[Organizations]CloudWatchを別アカウントに共有する際にOrganization account selectorを使ってみた
こんにちは、おんづか(@onzuka_muscle)です!
Organizationsを使っている環境でCloudWatchを特定のアカウントに集約したい(クロスアカウントに共有したい)場合にOrganization account selectorを使ってみたのでご紹介します。
結論から言うとCloudWatchを集約したいアカウントでOrganizations下のアカウントリストが選択可能になります。こちらの画像のようになります。
やってみた
こちらのドキュメントを見ながら設定しています。
前提
構成イメージです。
- マネジメントアカウント
- Organizationsの管理アカウント
- モニタリングアカウント
- CloudWatchを集約するアカウント
- 見る側
- メンバーアカウント
- 見られる側
これらのアカウントは全て一つのOrganizationsに属しています。
メンバーアカウントの設定
こちらのブログで紹介している見られる側(監視対象のアカウント)の設定
と同様のため割愛します!
それぞれのメンバーアカウントにIAMロールを作成します。
モニタリングアカウントを先に見てみる
CloudWatch>設定>クロスアカウントクロスリージョン「設定」>クロスアカウントクロスリージョン「編集」
「AWS 組織アカウントセレクタ」という項目があり選択すると下記のエラーがでます。
このフィルタを使用するには、組織内のアカウントのリストにアクセスする必要があります。マスターアカウント (アカウント ID XXXXXXXXXXXX) にアクセスし、CloudWatch 設定および アカウントリストへのアクセス許可を付与するロールを作成します。 詳細はこちら に移動します。
マネジメントアカウントでの設定が必要と言われてますね。
マネジメントアカウントの設定
CloudWatch>設定>クロスアカウントクロスリージョン「設定」
マネジメントアカウント以外ではなかった「組織内のアカウントのリストにアクセス許可を付与する
」というメニューが表示されています。
「組織アカウントリストを共有
」をクリックします。
「スタック作成」することでモニタリングアカウントがOrganizations下のアカウントリストを取得するためのIAMロールが作成されました。
作成されたIAMロールを確認してみます。
信頼関係
のタブでモニタリングアカウントからAssumeRoleできることが確認できます。
ポリシーを確認するとアカウントリストを取得するためのアクションが許可されています。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "organizations:ListAccounts", "organizations:ListAccountsForParent" ], "Resource": "*", "Effect": "Allow" } ] }
これでマネジメントアカウント側で必要な設定は完了です。
モニタリングアカウントの設定
CloudWatch>設定>クロスアカウントクロスリージョン「設定」>クロスアカウントクロスリージョン「編集」
に戻ってきました。
エラーが消えてます。「変更を保存
」します。
メトリクスのメニューからアカウントを選択してみます。
アカウントリストが表示されました!
メンバーアカウントを選択してメトリクスも確認できました。
[注意]メンバーアカウントそれぞれにIAMロールが必要
メンバーアカウントにIAMロールがないとアカウントリストには表示されますがメトリクス等のデータが取れずに下記のようなエラーが出ます。
所感
Organizationsと連携してアカウントリストが取得できると何が嬉しいのでしょうか?
Organizations下のアカウントが増減したときにアカウントリストをメンテしなくてもいいというメリットが真っ先に思い付きました。
メンバーアカウントに必要なIAMロールをCloudFormation StackSetsの自動デプロイを使って作成するといったことをすれば、Organizationsに新規追加したアカウントに対してスムーズにモニタリングアカウントからの監視を開始できそうです。