2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オンプレミスのホストにIAMロールを渡したい? それ、SSMハイブリッドアクティベーションで実現できます!

Posted at

はじめに

ほうき星です。

通常、オンプレミスのホスト上で 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 が存在しないことを確認しておきます。

オンプレミスホストのbash
# ls -la /root/.aws
ls: cannot access '/root/.aws': No such file or directory

IAMロールの作成

SSMハイブリッドアクティベーションでオンプレミスのホストに渡すIAMロールを作成します。
今回はAmazonSSMManagedInstanceCoreポリシーの他、Lambda関数を一覧をできるポリシーを与えています。

SSMHybridActivationRoleのCloudFormationテンプレート
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 から作成します。

CloudShell
$ aws ssm create-activation \
  --iam-role SSMHybridActivationRole \
  --default-instance-name ompremises-host
{
    "ActivationId": "f8xxxxxx-cxxx-4xxx-bxxx-d8xxxxxxxxf3",
    "ActivationCode": "obxxxxxxxxxxxxxxxx/E"
}

オンプレミスのホストへのSSMエージェントのインストールとアクティベーション

SSMハイブリッドアクティベーションの作成で得られたActivationIdActivationCodeを使用して、オンプレミスのホストにSSMエージェントのインストールとアクティベーションを行います。

オンプレミスホストのbash
# 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プロファイルに認証情報が追加されていることが確認できます。

オンプレミスホストのbash
# 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関数の一覧を確認してみます。

オンプレミスホストのbash
# aws lambda list-functions --region ap-northeast-1
~省略~

CloudTrail を使用して、何の権限でlist-functionsできたのかを確認します。
CloudTrail1.jpg

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

さいごに

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

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?