はじめに
ほうき星です。
通常、オンプレミスのホスト上で AWS CLI や SDK、CloudWatch Agent などを使用する場合は、IAMユーザーを作成し、そのアクセスキーとシークレットアクセスキーを用意する必要があります。
この方法は簡単に設定できる反面、作成したアクセスキー/シークレットアクセスキーの管理(ローテーションや流出時の対応等)をする必要があり面倒な側面もあります。
そこで本記事ではオンプレミスのホストにIAMロールを渡す方法をご紹介します。
オンプレミスのホストにIAMロールを渡す方法
仕組み概要(SSMハイブリッドアクティベーション)
今回オンプレミスのホストにIAMロールを渡すために、SSMハイブリッドアクティベーションを利用します。
SSMハイブリッドアクティベーションとは、オンプレミスや他クラウド上のサーバーを AWS Systems Manager で管理可能にする仕組みです。
SSMオートメーションの対象にできる他、アドバンスドインスタンス層を有効にするとセッションマネージャで接続し操作することもできます。
このSSMハイブリッドアクティベーション時にIAMロールを指定する事ができ、SSMエージェントはこのロールを引き受け一時的な認証情報を受け取ります。
そのためこのIAMロールに AWS CLI や SDK、CloudWatch Agent 等に必要なポリシーを設定しておくことで、IAMユーザのアクセスキー/シークレットアクセスキーを払い出すことなく、AWSのリソースにアクセスすることができます。
事前のクレデンシャルの確認
AWS CLI がオンプレミスのホストにインストール済みである事を前提にしています。
事前に credentials が存在しないことを確認しておきます。
# ls -la /root/.aws
ls: cannot access '/root/.aws': No such file or directory
IAMロールの作成
SSMハイブリッドアクティベーションでオンプレミスのホストに渡すIAMロールを作成します。
今回はAmazonSSMManagedInstanceCoreポリシーの他、Lambda関数を一覧をできるポリシーを与えています。
AWSTemplateFormatVersion: "2010-09-09"
Description: "SSM Hybrid Activation IAM role template"
Resources:
SSMHybridActivationRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: "SSMHybridActivationRole"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service: "ssm.amazonaws.com"
Action: "sts:AssumeRole"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
Policies:
- PolicyName: "LambdaListFunctionsPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "lambda:ListFunctions"
Resource: "*"
SSMハイブリッドアクティベーションの作成
SSMハイブリッドアクティベーションを CloudShell から作成します。
$ aws ssm create-activation \
--iam-role SSMHybridActivationRole \
--default-instance-name ompremises-host
{
"ActivationId": "f8xxxxxx-cxxx-4xxx-bxxx-d8xxxxxxxxf3",
"ActivationCode": "obxxxxxxxxxxxxxxxx/E"
}
オンプレミスのホストへのSSMエージェントのインストールとアクティベーション
SSMハイブリッドアクティベーションの作成で得られたActivationIdとActivationCodeを使用して、オンプレミスのホストにSSMエージェントのインストールとアクティベーションを行います。
# mkdir /tmp/ssm
# curl https://amazon-ssm-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/linux_amd64/ssm-setup-cli -o /tmp/ssm/ssm-setup-cli
# sudo chmod +x /tmp/ssm/ssm-setup-cli
# sudo /tmp/ssm/ssm-setup-cli -register -activation-code "obxxxxxxxxxxxxxxxx/E" -activation-id "f8xxxxxx-cxxx-4xxx-bxxx-d8xxxxxxxxf3" -region "ap-northeast-1"
~省略~
2025-07-19 07:16:03 INFO Successfully started agent, reloading registration info
2025-07-19 07:16:03 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-0dxxxxxxxxxxxxxce
2025-07-19 07:16:08 INFO Process Path: /usr/bin/amazon-ssm-agent
2025-07-19 07:16:08 INFO Agent process count: 1
2025-07-19 07:16:08 INFO Agent registration completed
#
IAMロールの権限を使用できていることの確認
SSMアクティベーション後に再度、クレデンシャルを確認するとdefaultプロファイルに認証情報が追加されていることが確認できます。
# ls -la /root/.aws/
total 4
drwx------. 2 root root 25 Jul 19 07:16 .
dr-xr-x---. 1 root root 81 Jul 19 12:20 ..
-rw-------. 1 root root 1038 Jul 19 12:16 credentials
# cat /root/.aws/credentials
[default]
aws_access_key_id = ASXXXXXXXXXXXXXXXXTC
aws_secret_access_key = DrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXa5
aws_session_token = IQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXs=
#
SSMHybridActivationRoleにはlambda:ListFunctionsの権限をつけたので、オンプレミスのホスト上で AWS CLI を使用してLambda関数の一覧を確認してみます。
# aws lambda list-functions --region ap-northeast-1
~省略~
CloudTrail を使用して、何の権限でlist-functionsできたのかを確認します。

CloudTrail のイベント詳細から、SSMHybridActivationRole を AssumeRole して得た一時的な認証情報が使用されていることが確認できます。

さいごに
この記事ではSSMハイブリッドアクティベーションを利用して、オンプレミスのホストにIAMロールを渡す方法をご紹介しました。
この記事が誰かの参考になれば幸いです。