SSM Default Host Management ConfigurationをCloudFormation StackSetsで組織全体にデプロイしてみた
AWS Systems Manager Default Host Management Configuration(DHMC)機能を利用すると、EC2インスタンスに特別な権限を付与することなく、自動的にSSM管理できるようになります。
AWS SSM DHMCで必要な設定は次の2点だけです
- SSMが assume する専用ロールを用意(AWSは専用のマネージドポリシー
AmazonSSMManagedEC2InstanceDefaultPolicy
を用意) - SSM DHMC にこのロールを指定
簡単ですね。
AWS SSM側の設定はたったこれだけです。 ただし、自動管理したいEC2インスタンスにはバージョン 3.2.582.0 以上のSSMエージェントがインストールされている必要があります、、、
CloudFormatino StackSetsでマルチアカウント・リージョン展開
このDHMCの設定は、EC2インスタンスをSSM管理されるためのフォールバックとして利用されるため、EC2インスタンスにインスタンスプロファイルが設定されていても、競合しません。
つまるところ、時間の経過とともに SSM Agentのバージョンが DHMC の要件を満たすことを見越して、DHMC 設定をマルチアカウント・リージョン展開しても実害はありません。
AWS公式のAWS Cloud Operations & Migrations BlogにDHMCを有効にする CloudFormation が紹介されていたので、このテンプレートを利用し、StackSets でマルチアカウント・リージョン展開してみました。
CloudFormation のソリューション
DHMC を有効にするCloudFormationテンプレートは次のレポジトリにあります。
このテンプレートでスタックを作成すると、以下のAWSリソースが作成されます。
- SSM DHMCに設定するIAMロール
AWSSystemsManagerDefaultEC2InstanceManagementRole
- SSM DHMCを設定するSSMドキュメント
automationRunbookEnableDefaultSSM
- このドキュメントの操作に利用するIAMロール
AutomationServiceRole-EnableDefaultSSM
SSM ドキュメント automationRunbookEnableDefaultSSM
をSSM Automationで実行し、次の API に相当する操作で SSM DHMC にIAMロール AWSSystemsManagerDefaultEC2InstanceManagementRole
を設定しています。
$ aws ssm update-service-setting \ --setting-id /ssm/managed-instance/default-ec2-instance-management-role \ --setting-value AWSSystemsManagerDefaultEC2InstanceManagementRole
やってみた
Organizations の管理アカウントからこのテンプレートをStackSetsでマルチアカウント・リージョン展開するだけです。
グローバルリソースのIAMは、CloudFormationパラメーターの MainRegion
で指定したリージョン展開時に作成されます。
IAMリソースがまっさきに作成されるよう、StackSets実行時には、このパラメーターで指定したリージョンを展開先リージョンの1つ目に含めるようにしてください。
実行結果の確認
Stack Instancesタブから、マルチアカウント・リージョンでCloudFormationスタックが展開され、成功していることを確認してください。
念の為、メンバーアカウントからも確認してみてください。
$ aws ssm get-service-setting \ --setting-id /ssm/managed-instance/default-ec2-instance-management-role { "ServiceSetting": { "SettingId": "/ssm/managed-instance/default-ec2-instance-management-role", "SettingValue": "AWSSystemsManagerDefaultEC2InstanceManagementRole", "LastModifiedDate": "2023-03-04T09:58:15.888000+00:00", "LastModifiedUser": "arn:aws:sts::12345:assumed-role/AutomationServiceRole-EnableDefaultSSM/Automation-4c3457a0-cbea-49f0-a84f-7f3b3d3768a5", "ARN": "arn:aws:ssm:ap-northeast-1:12345:servicesetting/ssm/managed-instance/default-ec2-instance-management-role", "Status": "Customized" } }
最後に
AWS Systems Manager Default Host Management Configuration(DHMC)の登場により、AWS管理者はEC2インスタンスのインスタンスプロファイルを気にすることなく、EC2インスタンスを自動的にSSM管理できるようになります。
DHMCで設定するIAMロールはインスタンスプロファイルのフォールバック的な位置づけのため、既存のインスタンスプロファイルの有無やそのポリシーを気にすることなく、DHMCを有効にしてしまって問題ありません。この2つのロールの責任範囲は次のブログにまとめています。
SSMのサービスの特性上、CloudFormation StackSetsを利用し、マルチアカウント・リージョンに有効化するのが良いでしょう。
1年以内にSSM高速セットアップに対応し、数クリックでOrganization全体にデプロイできるようになるのではないでしょうか。
それでは。
参考
- [アップデート] EC2インスタンスに対しデフォルトでSSMを有効にするDefault Host Management Configurationが追加されました | DevelopersIO
- Enable management of your Amazon EC2 instances in AWS Systems Manager using Default Host Management Configuration | AWS Cloud Operations & Migrations Blog
- Default Host Management Configuration - AWS Systems Manager