ログ集約と分析(クロスアカウント集約)難易度 高無料
10個のメンバーアカウントそれぞれで稼働するアプリケーションのCloudWatch Logsを、中央のセキュリティ監視アカウントが持つ1つのKinesis Data Streamへリアルタイムに集約し、統合的な異常検知を行いたい。この構成を実現する設計として最も適切なものを選べ。(単一選択)
- A中央アカウントに
PutDestinationでKinesis Data Streamを紐づけた送信先(destination)を作成し、PutDestinationPolicyで各メンバーアカウントからのPutSubscriptionFilterを許可する。各メンバーアカウント側で対象ロググループにサブスクリプションフィルタを作成し、配信先に中央アカウントの送信先ARNを指定する - B各メンバーアカウントで日次の
CreateExportTaskを実行してロググループをそれぞれのS3バケットへエクスポートし、S3クロスアカウントレプリケーションで中央アカウントのバケットへ複製する - C中央アカウントのIAMユーザーのアクセスキーを各メンバーアカウントのアプリケーションに配布し、アプリケーションから直接中央アカウントのKinesis Data Streamへ
PutRecordさせる - D各メンバーアカウントでCloudTrail証跡を作成し、その証跡データをKinesis Data Streamへ直接ストリーミングするよう設定する
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
CloudWatch Logsのクロスアカウントサブスクリプションを使うと、複数アカウントのロググループから単一の中央アカウントの配信先へリアルタイムに集約できる。
- まず中央(監視)アカウント側で
PutDestinationによりCloudWatch Logsの「送信先(destination)」リソースを作成し、 対象のKinesis Data Streamを紐づける。この送信先にはCloudWatch LogsサービスがKinesisへ書き込むためのIAMロール(信頼ポリシーでlogs.amazonaws.comを許可)を関連付ける。 - 次に
PutDestinationPolicyで、この送信先に対して各メンバーアカウントのプリンシパルからのlogs:PutSubscriptionFilterを許可するアクセスポリシーをアタッチする。 - 最後に各メンバーアカウント側で、対象ロググループにサブスクリプションフィルタを作成し、配信先ARNとして中央アカウントの送信先ARNを指定する。
この3ステップにより、10アカウント分のログをそれぞれ個別にエクスポート・転送するスクリプトを書かずに、リアルタイムのクロスアカウント集約が実現できる。
- Bエクスポートタスクは日次のバッチ処理でありリアルタイム性が無く、集約先もS3であってKinesis Data Streamへの集約という要件に合わない。
- C長期アクセスキーの配布はベストプラクティスに反し、アプリケーションコードの改修も必要になる。CloudWatch Logsのマネージドなクロスアカウント集約機能を使う方が安全かつシンプル。
- DCloudTrailはAWS API呼び出しの記録であり、アプリケーションのCloudWatch Logsログイベントの集約という今回の要件とは対象データが異なる。
ひっかけ: 「各メンバーアカウントでロググループをS3にエクスポートし、S3クロスアカウントレプリケーションで集約する(B)」はバッチ処理でありリアルタイム性が無いうえ、
「Kinesis Data Streamへ集約」という要件(S3ではない)にも合わない。クロスアカウント×リアルタイム=サブスクリプションフィルタ+送信先(destination)の組み合わせを押さえる。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)