SSM Default Host Management ConfigurationをCloudFormation StackSetsで組織全体にデプロイしてみた

2023.03.04

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

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 でマルチアカウント・リージョン展開してみました。

Enable management of your Amazon EC2 instances in AWS Systems Manager using Default Host Management Configuration | AWS Cloud Operations & Migrations Blog

CloudFormation のソリューション

DHMC を有効にするCloudFormationテンプレートは次のレポジトリにあります。

GitHub - aws-samples/aws-systems-manager-default-host-management-configuration: This repo hosts CloudFormation templates related to the AWS Cloud Operations blog post. See README.md for a link to the blog post.

このテンプレートでスタックを作成すると、以下の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全体にデプロイできるようになるのではないでしょうか。

それでは。

参考