マルチアカウント構成でのAWSログ監視設計|Security Lake活用と集約アーキテクチャ

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > AWS(Amazon Linux) > マルチアカウント構成でのAWSログ監視設計|Security Lake活用と集約アーキテクチャ
「AWSのアカウントが増えてきて、ログが散らばっている。どこで何が起きているか、一目で分からない」
マルチアカウント構成になってから、このような悩みがあるケースが増えています。

本番・開発・ステージングでアカウントを分けたり、事業部ごとにアカウントを作ったりすると、CloudTrail・VPC Flow Logs・Security Hubのログがアカウントごとに分散して保存されます。
個別に確認する手間が膨大になり、横断的な脅威の検出が遅れます。

この記事では、AWSログ監視をマルチアカウント構成で一元化する設計を解説します。AWS Security Lakeを中心に、集約アーキテクチャの設計パターンと有効化の手順を整理します。想定環境はAWS Organizations管理下の複数アカウント構成です。

この記事のポイント

・AWS Security Lakeは複数アカウントのログをS3に一元集約できる
・OCSFフォーマットに正規化されるため、SIEMとの連携が容易になる
・Organizations委任管理者アカウントで集中管理する設計が基本形
・CloudTrail・VPC Flow Logsなど主要ソースを自動収集できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

マルチアカウントのAWSログ監視はなぜ難しいのか

AWSのセキュリティ設計でよく起きるのが「ログは取っているが、見られていない」状態です。

シングルアカウントなら、CloudWatchダッシュボードやCloudTrailのコンソールで確認できます。しかし、アカウント数が増えると同じことが難しくなります。

具体的には、次のような問題が出てきます。

・各アカウントのCloudTrailログが別々のS3バケットに保存される
・VPC Flow LogsはCloudWatch Logsに出力されており、アカウントをまたいだ検索ができない
・Security Hubの検知結果も各アカウントに閉じている
・GuardDutyのアラートが届いても、どのアカウントのどのリソースか特定に時間がかかる

「10アカウントあれば10か所確認しなければならない」という状況になります。

これを解決する方法の一つが、ログを1か所に集約するアーキテクチャです。以前はS3のクロスアカウントレプリケーションを手動で設定することが多かったのですが、現在はAWS Security Lakeが標準的な選択肢になっています。

AWS Security Lakeとは何か(集約設計の全体像)

AWS Security Lakeは、AWSアカウントとリージョンにまたがるセキュリティログを、単一のS3バケットに集約するマネージドサービスです。

特徴は大きく2つあります。

OCSFへの正規化
収集したログをOpen Cybersecurity Schema Framework(OCSF)という標準フォーマットに変換してから保存します。ログのフォーマットがソースごとに異なるという問題を解決し、AthenaやSIEMから統一したクエリで分析できるようになります。

Organizationsとの統合
AWS Organizationsと連携することで、管理アカウントから全メンバーアカウントのログを一括で収集できます。新しいアカウントが追加されたときも、自動的に収集対象に含めることができます。

主なデータソースとして、次のものを自動収集できます。

・AWS CloudTrail(管理イベント・データイベント)
・VPC Flow Logs
・Amazon Route 53 Resolverクエリログ
・Amazon Security Hub(検知結果)
・Amazon EKS監査ログ
・AWS WAFログ

サードパーティのログ(Okta・CrowdStrikeなど)をカスタムソースとして追加することもできます。

Security Lakeを有効化してログを集約する設定手順

ここでは、AWS Organizationsを使ったマルチアカウント構成での設定手順を説明します。

1. 委任管理者アカウントを設定する

Security Lakeの運用は、専用のセキュリティアカウント(Security Account)を委任管理者として設定するのが基本です。

管理アカウントで次のコマンドを実行します。

# Security Lake の委任管理者を設定する(管理アカウントで実行) aws organizations register-delegated-administrator \ --account-id 111122223333 \ --service-principal securitylake.amazonaws.com

111122223333は委任先のセキュリティアカウントIDに書き換えてください。

次に、委任先アカウントでSecurity Lakeを有効化します。

# Security Lake を有効化する(東京リージョンの例) aws securitylake create-data-lake \ --configurations '[ { "region": "ap-northeast-1", "encryptionConfiguration": { "kmsKeyId": "alias/aws/securitylake" }, "replicationConfiguration": { "regions": [], "roleArn": "" } } ]' \ --meta-store-manager-role-arn \ arn:aws:iam::111122223333:role/AmazonSecurityLakeMetaStoreManagerV2

有効化が完了すると、Security Lake専用のS3バケットが自動的に作成されます。

現在の状態を確認するには次のコマンドを使います。

# データレイクの状態を確認する aws securitylake get-data-lake-status \ --account-ids 111122223333 # 出力例(環境により異なります) # { # "dataLakes": [ # { # "dataLakeArn": "arn:aws:securitylake:ap-northeast-1:111122223333:data-lake/default", # "region": "ap-northeast-1", # "status": "INITIALIZED" # } # ] # }

2. データソースを追加する

有効化後、収集するログのソースを設定します。次のコマンドでOrganizationsの全アカウントにCloudTrailとVPC Flow Logsを設定します。

# 組織内の全アカウントでデータソースを有効化する aws securitylake update-data-lake-organization-configuration \ --auto-enable-new-account '[ { "region": "ap-northeast-1", "sources": [ {"sourceName": "CLOUD_TRAIL_MGMT"}, {"sourceName": "VPC_FLOW"}, {"sourceName": "SH_FINDINGS"} ] } ]'

CLOUD_TRAIL_MGMTはCloudTrailの管理イベント、VPC_FLOWはVPC Flow Logs、SH_FINDINGSはSecurity Hubの検知結果に対応します。

Sources に指定できる主な値は次のとおりです。

・CLOUD_TRAIL_MGMT(CloudTrail管理イベント)
・LAMBDA_EXECUTION(Lambda実行ログ)
・S3_DATA(S3データイベント)
・VPC_FLOW(VPC Flow Logs)
・ROUTE53(Route 53 Resolverクエリログ)
・SH_FINDINGS(Security Hub検知結果)

Organizationsの全メンバーアカウントに設定を反映させるには、コンソールの「組織設定」から「既存アカウントにも適用」を有効にします。

3. サブスクライバーを設定する

集約したログをAthenaやSIEMから参照するには、サブスクライバーを設定します。

次のコマンドで、Athenaからクエリできるサブスクライバーを作成します。

# Athena用のサブスクライバーを作成する aws securitylake create-subscriber \ --subscriber-name "athena-subscriber" \ --sources '[ {"awsLogSource": {"sourceName": "CLOUD_TRAIL_MGMT", "sourceVersion": "2.0"}}, {"awsLogSource": {"sourceName": "VPC_FLOW", "sourceVersion": "2.0"}} ]' \ --subscriber-identity '{ "principal": "111122223333", "externalId": "my-external-id" }' \ --access-types '["S3"]'

サブスクライバーが作成されると、Security LakeのS3バケットへの読み取りアクセス権が付与されます。その後、Athenaのデータソースとして登録して、OCSFフォーマットのログをSQLでクエリできます。

LinuxサーバーとAWSを組み合わせた運用の基礎については、Amazon LinuxでのLinuxサーバー構築と基礎設定も参考にしてください。

マルチアカウント設計の3つのパターン

Security Lakeを使ったマルチアカウントのログ監視設計には、いくつかのパターンがあります。

パターン1: 専用セキュリティアカウント型
AWS Organizations内に「セキュリティアカウント」を作成し、Security Lakeの委任管理者として設定します。全アカウントのログが1つのS3バケットに集約されます。コスト管理が明確になり、SIEMとの統合がシンプルになります。

パターン2: リージョン集約型
東京リージョンと大阪リージョンそれぞれにSecurity Lakeを有効化し、東京リージョンを「ロールアップリージョン」として設定する方法です。大阪リージョンのログが東京に自動的にレプリケートされます。リージョン障害を想定した設計に向いています。

パターン3: LogArchiveアカウント連携型
AWS Control Towerを使っている場合、LogArchiveアカウントとSecurity Lakeを連携させる設計です。既存のS3集約と整合しやすく、Control Tower環境での採用例が多いパターンです。

3つの中では、専用セキュリティアカウント型が最もシンプルで、はじめて取り組む場合に向いています。

注意点とよくある問題

Security Lakeの運用で注意が必要な点と、よくある問題を整理します。

コストの見積もりを事前に行う
Security Lakeのコストは主に次の3つで構成されます。

・S3ストレージコスト(収集したログの保管)
・データ取り込みコスト(1GBあたりの料金)
・クエリコスト(Athenaを使う場合は1TBあたりの料金)

VPC Flow LogsはデータボリュームがCloudTrailより大きくなりやすいため、すべてのアカウントで有効化する前にサンプルアカウントで取り込み量を確認することをお勧めします。

コストを抑えるには、Security Lakeのライフサイクル設定でS3の保存期間を設定します。コンソールの「ライフサイクル管理」から各データソースの保存日数を設定できます。

データソースが「PENDING」のまま進まない
データソースを追加したあと、収集が始まるまで15~20分かかることがあります。それ以上PENDING状態が続く場合は、次を確認してください。

・委任管理者アカウントへのアクセス許可ポリシーが正しく設定されているか
・OrganizationsのSCPでSecurityLakeの操作がブロックされていないか
・CloudTrailがすでに有効化されているアカウントで設定が競合していないか

AthenaクエリでテーブルにアクセスできないときはテーブルI名を確認する
AthenaでOCSFログをクエリするとき、テーブル名はリージョンとOCSFバージョンを含む形式になります。

-- CloudTrail管理イベントのテーブル名形式 -- テーブル名: amazon_security_lake_table_ap_northeast_1_cloud_trail_mgmt_2_0 -- ハイフンはアンダースコアに変換される点に注意 SELECT eventtime, api.operation, actor.user.name, src_endpoint.ip FROM "amazon_security_lake_table_ap_northeast_1_cloud_trail_mgmt_2_0" WHERE eventday = '20241110' LIMIT 10; -- 出力例(環境により異なります) -- eventtime | api.operation | actor.user.name | src_endpoint.ip -- ...

テーブル名のリージョン部分やOCSFバージョン(2_0)が実際の環境と一致しているか確認してください。

本記事のまとめ

AWSログ監視をマルチアカウント構成で設計する方法を解説しました。
設計のポイント 内容
委任管理者の設定 Organizations管理アカウントから専用セキュリティアカウントを委任管理者に設定する
データソースの選択 CloudTrail・VPC Flow Logs・SH_FINDINGSを優先して有効化する
サブスクライバー設定 Athena経由でOCSFログをクエリするか、SIEMに直接連携する
コスト管理 VPC Flow Logsは事前にボリュームを確認し、ライフサイクルを設定する
設計パターン 初めての場合は専用セキュリティアカウント型が最もシンプル
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Amazon LinuxでのLinuxサーバー構築基礎を解説しています。
>> Amazon Linux 入門・基礎解説はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。