CloudWatch Logs のログをアカウントまたぎで共有する

AWS運用自動化サービス「Cloud Automator」

技術2課の多田です.

CloudWatch Logs のログをアカウントまたぎで共有し,ログ分析に活用する要件がありました.そのための検証を行なったので,まとめていきます.

実現方法

実現するには,CloudWatch Logs のログを送信先アカウントで, Kinesis Data Streams の設定が必要です.仮に,アカウント A(111111111111)からアカウント B(999999999999)にログを連携する場合で考えます.

以下が手順です.

1. アカウント B で, Kinesis Data Streams の送信先ストリーム,データ入力を行うサービスロールの作成と送信先ストリームへの適用
2. アカウント A で,連携するログのサブスクリプションフィルターを作成
3. アカウント B で, Kinesis Data Streams のシャードにログが送信されているかを確認

参考情報

今回の手順は下記のドキュメントに記載があるため,手順に則って検証を行いました.

クロスアカウントのログデータをサブスクリプションと共有する

1.Kinesis Data Streams の送信先ストリーム,データ入力を行うサービスロールの作成と送信先ストリームへの適用

まず,ログの送信先のアカウントの設定を行いますが,AWS CLI を使って実施していきます.

最初に, Kinesis Data Streams に送信先ストリームを作ります.ストリームが有効化されるまで1,2分ほどかかります.

aws kinesis create-stream --stream-name "RecipientStream" --shard-count

続いて,サービスロールの作成を行います.なお,サービスロールと適用するポリシーの中身は以下の通りです.

サービスロールの作成と,ポリシーの適用は以下の通りです.

 

2. アカウント A で,連携するログのサブスクリプションフィルターを作成

続いて,ログの送信元アカウントで Kinesis Data Streams にログを共有するためのサブスクリプションフィルターを作成します.今回は, CloudTrail のログに記録された「tada」に関するログを送る例を書きます.

3. アカウント B で, Kinesis Data Streams のシャードにログが送信されているかを確認

最後に,Kinesis Data Streams のシャードにログが送信されているかを確認します.

上記の設定で Kinesis Data Streams にログデータが共有されるようになりました.これでログを Kinesis Data Firehose と連携して S3に出力する構成も可能になりました.

まとめ

CloudWatch Logs のログを Kinesis Data Streamsを使った共有する方法を紹介しました.通常の業務システムのアカウントとログ分析基盤のアカウントを分離したり,ログアーカイブや統合するためのアカウントのような場合に検討できる設定かと思います.何か役に立てば幸いです.

AWS運用自動化サービス「Cloud Automator」