【AWS】”CloudWatchログを別アカウントに直接出力する方法”
初めまして。pon0000です。
今回紹介するのは、掲題の通り
「CloudWatchログを別アカウントに直接出力する方法」
です。
【実現したいこと】
本アカウントを”アカウントA”、別アカウントを”アカウントB”としたとき
「Aアカウント内の[ロググループ](”グループX”とする)に出力されているログを、Bアカウントの[同名ロググループ](グループX)にログ出力したい
調べてみて意外と簡単だったので、方法は以下の通りです。
【方法】
①対象インスタンスにCloudWatchAgentをインストールし、アカウントA内の「CloudWatch」で「グループX」にログが出力されていることをまずは確認する
(この箇所は他サイトでも多々紹介されているので、詳細は省略します。私はAmazonSSMを使用してCloudWatchAgentをインストールしていましたが、別にインストールできたら他の手段でもいいと思います)
②Bアカウント内にて「IAM」ユーザーを作成(”ユーザーY”とする)し、「アクセスキー 」「シークレットアクセスキー」のIdを取得。
また先に「CloudWatch」にて同名ロググループ「グループX」を作成しておく
③Aアカウント内でインスタンスに「CloudWatchAgent」をインストールした際”common-config.toml”という設定ファイルに編集をかける
※デフォルトだと、以下に配置されている
編集箇所としては
# [credentials]
# shared_credential_profile = "{profile_name}"
# shared_credential_file= "{file_name}"
の箇所を
[credentials] ←コメントアウト外す
shared_credential_profile = "AmazonCloudWatchAgent" ←コメントアウトを外しCloudWatchAgentをインストール、設定する際に作成した"{profile_name}"を入力※例:"AmazonCloudWatchAgent"を入力。
# shared_credential_file= "{file_name}" ←そのまま
に変更し保存
④Aアカウント、ログ出力させたいインスタンス内にて以下のコマンドを実行し「profile」を作成する
aws configure --profile AmazonCloudWatchAgent
aws configure --profile AmazonCloudWatchAgent
※PowerShell使用
⑤作成後、これに編集をかける※viコマンドなど
[AmazonCloudWatchAgent]
aws_access_key_id = "ユーザーYのアクセスキーId"
aws_secret_access_key = "ユーザーYのシークレットアクセスキーId"
region = XXXXX (アカウントBのリージョン)
⑤Aアカウントの対象インスタンスの「CloudWatchAgent」を再起動
これで、アカウントA内にあるインスタンスのログは、アカウントBの「CloudWatch」に作成してしている「グループX」に出力されます。
最後に
CloudWatchAgentのインストール、CloudWatchのログの出力方法(自己アカウント内)を紹介している記事を多く見かけ、さらにログの参照方法として「スイッチロール」「S3を使用したクロスアカウントでのログ出力」は見つけたのですが、
今回のような「別アカウントにログを直接出力する方法」の記事/サイトなどは少なくとも当時は見かけなかったので紹介してみました!!
※ブログ記事書いていいのかどうかのレベルの者なので、表現や方法が少し違ったときはスルーして頂けると幸いです。
では、また!!!