SRE部佐竹です。
本日は、AWS Organizations の運用に関して記載をします。
- 2024年11月18日 追記
- はじめに
- 背景
- 全体像
- Region を US East (N. Virginia) に
- SNS Topic を作成する
- CloudWatch Events で Rule を作成する
- 動作確認
- 運用を鑑みての補足事項(CreateAccountResult)
- まとめ
2024年11月18日 追記
2024年11月18日 に「AWS アカウントの新規作成や組織間の移動、解約等を EventBridge と SNS で Slack へ通知する」というブログを新規に記載しました。
最新の情報としては、是非こちらをご覧ください。
はじめに
AWS Organizations については過去 SCP に関するブログを記載してきました。
今回は、AWS Organizations で AWS アカウントを新規に払い出ししたときに、その通知を送りたいという要望に対応します。
背景
AWS Organizations で AWS アカウントを新規に払い出したとき、すぐにそれに気づきたいという要望があります。
AWS アカウントが発行された時、それが正常なものなのかすぐに確認したいということ。それに加えて、作成した AWS アカウントに対してすぐに後続処理をしたいため、となります。
というわけで今回は、CloudWatch Events を利用して AWS アカウントの新規作成時の通知を簡単に実装します。
全体像
以下に AWS 環境構成図として全体像を示します。
Region を US East (N. Virginia) に
AWS Organizations の履歴は US East (N. Virginia) に記録される決まりがあります。そのため、まずは Region を US East (N. Virginia)
へと変更しましょう。
東京リージョンでは CloudTrail のコンソール一切表示がされない AWS Organizations の履歴も US East (N. Virginia)
であれば上画像の通り閲覧可能です。
SNS Topic を作成する
CloudWatch Events の通知先に SNS を指定するため、先に SNS の Topic を作成します。
今回は Organizations-CreateAccount
という名前の Topic を新規に作成しました。Subscriptions
のメールアドレスは Slack のチャンネル投稿になっています。
なお、SNS の Email でサブスクリプションする場合は、以下のブログに記載する点にご注意ください。
暗号化に関する補足
もし、SNS Topic で暗号化を利用する場合は、AWS managed key である「aws/sns」を利用しないでください。
AWS managed key はキーポリシーが修正されないため、EventBridge からの連携で利用できません。よって「Customer managed key」を作成する必要があります。
Customer managed key を利用しての対応手順については、以下のドキュメントを参考に KMS キーポリシーを修正してご利用ください。
キーポリシーの修正箇所を上記ドキュメントから抜粋します。
{ "Sid": "Allow CWE to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" }
補足ですが Sid に記載のある「CWE」というのは、EventBridge の旧称である「CloudWatch Events」を指しているようなので、Sid が気になるかたはこれも修正したほうがいいでしょう。
CloudWatch Events で Rule を作成する
Region US East (N. Virginia)
のまま操作します。CloudWatch のマネジメントコンソールの左端メニューから Events を選択して進めます。
- Event pattern を選択します
- Build event pattern to match events by service を選択します
- サービス名に Organizations と入力検索し Organizations を選択します
- Event Type タイプは AWS API Call via CloudTrail を選択します
- Specific operation(s) には今回通知を行いたい
CreateAccount
と記載します
正しく入力すると Event Pattern Preview 配下の通りになります。
{ "source": [ "aws.organizations" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "organizations.amazonaws.com" ], "eventName": [ "CreateAccount" ] } }
画面右側、Targets には先ほど作成した SNS の Topic を選択します。Configure input は Matched event
のままで問題ありません。
最後にルールに名前をつけます。今回は Organizations-CreateAccount
としました。
ルールが無事に作成完了しました。
動作確認
今回、実際に CreateAccount を行うのはハードルが高いため CreateOrganizationalUnit
で代理しました。OU(Organizational Unit) であれば容易に作成と削除が可能なためです。
ルールとして CreateOrganizationalUnit
も合わせて通知されるようにルールを追加します。先ほど Specific operation(s) にて設定した CreateAccount
の部分を CreateOrganizationalUnit
に変更(もしくは追加)するだけで問題ありません。
上画像の通り設定した状態で、実際に CreateOrganizationalUnit
を操作してみると以下の Notification が Slack に通知されました。
問題なくフックできてますね。
Chatbot の動作について
上記の通り設定できる Chatbot ですが残念ながら現時点では AWS Organizations のイベントには対応しておりませんでした。
設定してみたところ以下のエラーとなりました。
Event received is not supported (see https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html )
運用を鑑みての補足事項(CreateAccountResult)
なお、今回は「CreateAccount」をトリガーとしていますが、これはアカウント発行をキックする API です。
万が一この API が失敗してしまった場合を加味すると、「CreateAccount」が成功した場合に結果として実行される「CreateAccountResult」を通知するほうがより効果的でしょう。
また、「CreateAccountResult」の結果 JSON には作成された Account ID 等も含まれており、Account ID を利用した後続処理にも有用です。本ブログのアップデートとして「CreateAccountResult」も合わせてご利用ください。
そして運用の観点としては他にも「CloseAccount」や「InviteAccountToOrganization」を合わせて通知すると色々捗ります。
まとめ
今回のブログでは、AWS Organizations で AWS アカウントを新規に払い出したタイミングで通知を送る実装方法について記載しました。
実装方法は簡単で SNS と CloudWatch Events を設定するだけで、CloudTrail の API をフックして通知が可能です。ポイントはリージョンを US East (N. Virginia)
とするところでしょうか。
今回は通知だけを目的にしたため SNS から Email を送信するのみでしたが、もちろんのこと SNS をトリガーにして AWS Lambda も発火可能です。うまく活用すればアカウント払い出し直後に自動的に OU に AWSアカウントを移動することも可能になるでしょう。
今回はここまで。
ではまたお会いしましょう。
2023年7月21日 追記
本ブログの補足記事として上記ブログを記載いたしました。是非、合わせてご覧ください。
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。