AWS Systems Manager Automation のクロスアカウントアクセスを試してみる

2022.06.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Systems Manager(SSM) Automation は運用作業自動化に役立つ機能です。 EC2インスタンスや他AWSリソースに対する 一連の操作を実施できます。 この一連の操作は SSMドキュメントと呼ばれる形式で管理されます。 AWS管理のSSMドキュメントもあります。

この SSM Automation は クロスリージョン, クロスアカウント 対応です。 以下ドキュメントにある手順で実現できます。

今回は クロスアカウントで Automation を実行 して、挙動など確かめてみました。

事前準備

img

2つのロールを事前に準備しておきましょう。

  • AWS-SystemsManager-AutomationAdministrationRole
    • 集中管理用のアカウント(管理アカウント)上に作成する SSMロールです
  • AWS-SystemsManager-AutomationExecutionRole
    • 実際にAutomationが実行されるアカウント(メンバーアカウント)上に作成する SSMロールです
    • 上述の AdminitrationRole から Assume Role されることで実行されます

ロール作成用の CFnテンプレートは こちらの公式ドキュメント からダウンロードできます。 ExecutionRole は必要に応じて StackSet などで複数アカウントへ展開すると良いでしょう。

(注) 実行する Automation次第では ExecutionRole の権限が足りない可能性があります。 必要に応じて追加で権限を付与してください。

試してみた

今回は AWS-EnableS3BucketEncryption (S3のデフォルト暗号化を有効にする AWS管理のSSMドキュメント) を使って クロスアカウントアクセスを試してみます。

(注) この場合、 ExecutionRole の権限に s3:PutEncryptionConfiguration を足す必要があります。

管理アカウントへログインして、 [Systems Manager] > [自動化] から [オートメーションを実行] を選択します。

img

オートメーションドキュメントを選択して [次へ] を選択します。

img

実行形式として [複数のアカウントとリージョン] を選択します。

img

下図のようにターゲットを指定しました。

  • アカウントと組織単位(OU): メンバーアカウントID
  • AWSリージョン: ap-northeast-1(東京)
  • オートメーション実行ロール: AWS-SystemsManager-AutomationExecutionRole

img

入力パラメータを埋めます。 AutomationAssumeRole には AWS-SystemsManager-AutomationAdministrationRole を指定しましょう。

img

[実行] を選択して、Automationを走らせます。

問題なければ以下のように ステータス: 成功 となります。

img

メンバーアカウント上 S3バケットのデフォルト暗号化が有効になったことも確認しました。

いろいろ確認・調査

実行結果の確認について

管理アカウント上ではメンバーアカウントへ実行した aws:executeAutomation 全体の結果が確認できるようです。

img

Automation内の各ステップの結果は メンバーアカウント上で確認できます。

img

通知について

通知は EventBridge を活用して実装できます。 例えば 以下ブログのように Automation が失敗したときに 通知するような構成を作れます。

ログについて

[オートメーション] > [設定] から CloudWatch Logs へのログ出力を有効化出来ます。

img

aws:executeScript アクションのみログとして保存される点に注意。 例えば今回の Automation( AWS-EnableS3BucketEncryption )では aws:executeScript アクション は使われていないので、CloudWatch Logs にはログが流れません。

Systems Manager は、 aws:executeScript アクションを使用しないドキュメント用にはロググループまたは ログストリームを作成しません。ドキュメントが aws:executeScript を使用する場合、CloudWatch Logs に 送信される出力は、それらのアクションにのみ関係します。

– 引用: CloudWatch Logs を使用した自動アクション出力のログ記録 - AWS Systems Manager

おわりに

SSM Automation のクロスアカウントアクセスを試してみました。 中央集権的に Automation を管理・トリガーできるのは良いですね。

ただ、以下ポイントは少し辛く感じました。

  • ログの出力制限
  • 一部実行結果はメンバーアカウント上でしか確認できない

最低限 通知は実装して、失敗時に気付ける仕組みは作りたいですね。

参考