ノートパソコン (Ubuntu) にSSM Agentをインストールしてマネージドインスタンスにしてみた

2023.05.22

少し前に以下のブログでノートパソコンにUbuntu Desktopをインストールしました。
そのUbuntu DesktopにSSM Agentをインストールしたのでブログに残します。

IAMロールの作成

EC2と同じようにAmazonSSMManagedInstanceCoreポリシーを使ったIAMロールを作成します。
以下のドキュメントの手順で作成できますが、今回はCloudFormationを作成しました。
ステップ 1: ハイブリッド環境に IAM サービスロールを作成する

以下のCloudFormationテンプレートでIAMロールを作成します。

CloudFormationテンプレート (ここをクリックしてください)
AWSTemplateFormatVersion: "2010-09-09"

Description: IAM Stack

Resources:
# ------------------------------------------------------------#
# IAM
# ------------------------------------------------------------# 
  IamRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument: 
        Version: "2012-10-17"
        Statement: 
          - Effect: Allow
            Principal: 
              Service: 
                - ssm.amazonaws.com
            Action: 
              - 'sts:AssumeRole'
      ManagedPolicyArns: 
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      RoleName: SSMRole

デプロイは以下のコマンドで行います。

aws cloudformation create-stack --stack-name CloudFormationスタック名 --template-body file://CloudFormationテンプレートファイル名 --capabilities CAPABILITY_NAMED_IAM

アクティベーション作成

オンプレミスの端末をマネージドインスタンスとして登録するにはEC2とは少し手順が異なり、SSM Agentをインストールするだけでは登録できません。
SSM Agentをインストールする際にアクティベーションコードとアクティベーション IDというものを一緒に登録する必要があります。
手順としては以下の公式ドキュメントの方法で行えます。
ステップ 2: ハイブリッド環境用のマネージドノードのアクティベーションを作成

マネジメントコンソールで行うことが可能ですが、今回はAWS CLIでの方法で行います。
以下のコマンドを実行します。

aws ssm create-activation \
    --default-instance-name マネージドインスタンスに付ける名前 \
    --iam-role CloudFormationで作成したIAMロールの名前 \
    --registration-limit 登録する台数(デフォルトは1台) \
    --region 登録するリージョン \
    --expiration-date "アクティベーションコードが期限切れになる日付(デフォルトは24時間)" \\  
    --tags "Key=タグキー,Value=タグ値"

コマンドを実行すると以下のようにアクティベーションコードとアクティベーション IDが返ってきます。

{
    "ActivationId": "アクティベーション ID",
    "ActivationCode": "アクティベーションコード"
}

インストール

インストール手順は以下のドキュメントの方法で行います。
ステップ 3: ハイブリッド環境 (Linux) に SSM Agent をインストールする

インストール方法はsnapインストールで行う方法と、debパッケージからインストールする方法があります。
今回はdebパッケージを使用したインストールで行います。
以下のコマンドを実行するとインストールされます。

mkdir /tmp/ssm
curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo -E amazon-ssm-agent -register -code "上記手順で取得したアクティベーションコード" -id "上記手順で取得したアクティベーションID" -region "登録するリージョン" 
sudo service amazon-ssm-agent start

確認

インストールまで完了するとマネジメントコンソールから登録されているか確認できます。
マネジメントコンソールからAWS Systems Managerの画面へ移動します。
移動後、左の項目のノード管理からフリートマネージャーをクリックすると確認することが出来ます。


EC2インスタンスとは違い、ノードIDの先頭が「mi-」から開始しているのがわかります。
また、アドバンストインスタンス層を有効にすることで、この画面から「ノードアクション」→「ターミナルセッションを開始する」でSession Managerを使用した接続を行うことが可能です。

さいごに

Session Managerでの接続も便利ですが、Run Commandなども実行が可能なのでパッチの適用などが自動化できるのが便利だと思います。