Raspberry Pi OS(64bit版に) Amazon SSM Agentを導入する


目的

オンプレミス(というより自室)に置いてあるRaspberryPiにAWSマネジメントコンソールからアクセスできるようにします。

手順概要

・SystemsManagerのハイブリッドアクティベーションを作成する
・SSMエージェントアクセス用のユーザを用意する
・SSMエージェントをインストールする
・ロールに権限を追加する(オプション)
・動作確認

手順詳細

・SystemsManagerのハイブリッドアクティベーションを作成する

Systems Managerの画面に移動し、左側ペインからハイブリッドアクティベーションを選択します。

画像1

初めてであれば右上にアクティベーションの作成ボタンが表示されていると思うのでこれをクリックします。

画像2

アクティベーションの説明が表示されるので、記述します。

画像3

アクティベーションの作成ボタンをクリックすると画面が遷移し、アクティベーションコードと、アクティベーションIDが表示されます。両方共今後必要になるものなので、メモしておきます。(特に前者は再度表示することが出来ないので注意してください)

画像4

・SSMエージェントアクセス用のユーザを用意する

Session Managerを利用する場合は、アクセス用のユーザとしてデフォルトではssm-userが必要です。このユーザを予め用意しておきます。

$ sudo useradd ssm-user
$ sudo mkdir /home/ssm-user
$ sudo chown ssm-user:ssm-user /home/ssm-user

これでは管理系業務が実施できないので、下記コマンドを実行してパスワード無しでsudoできるようにしておきます。

$ sudo su -
$ echo 'ssm-user ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/ssm-user
$ exit

・SSMエージェントをインストールする

公式ドキュメントには書かれていませんが、arm64向けのdebパッケージファイルはある模様です。下記リンクを参照してください。公式に動作は保証されるのかはわかりません。

ダウンロードリンク (https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/debian_arm64/amazon-ssm-agent.deb)

以下の様にコマンドを実行してdebパッケージのダウンロードとインストールを行います。

$ mkdir /tmp/ssm
$ sudo curl https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/debian_arm64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
$ sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
以前に未選択のパッケージ amazon-ssm-agent を選択しています。
(データベースを読み込んでいます ... 現在 91389 個のファイルとディレクトリがインストールされています。)
/tmp/ssm/amazon-ssm-agent.deb を展開する準備をしています ...
Preparing for install
-> Systemd detected
inactive
Failed to stop amazon-ssm-agent.service: Unit amazon-ssm-agent.service not loaded.
amazon-ssm-agent (2.3.1644.0-1) を展開しています...
amazon-ssm-agent (2.3.1644.0-1) を設定しています ...
Starting agent
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-ssm-agent.service → /lib/systemd/system/amazon-ssm-agent.service.

このままではもちろん認証情報を持たないため、エージェントは正常に動作しません。一時的にエージェントを停止します。

$ sudo systemctl stop amazon-ssm-agent

アクティベーションコードとアクティベーションIDを使ってSystems ManagerのマネージドインスタンスとしてRaspberry Pi OSインスタンスを登録します。

$ sudo amazon-ssm-agent -register -code "アクティベーションコード" -id "アクティベーションID" -region "ap-northeast-1"
Error occurred fetching the seelog config file path:  open /etc/amazon/ssm/seelog.xml: no such file or directory
Initializing new seelog logger
New Seelog Logger Creation Complete
2020-09-26 22:10:39 INFO [Warning] Could not read InstanceFingerprint file: InstanceFingerprint does not exist.
2020-09-26 22:10:39 INFO No initial fingerprint detected, generating fingerprint file...
2020-09-26 22:10:40 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-042ec6478e1b724c5

エラーが出てますが、ここでは気にする必要はありません。

$ sudo systemctl start amazon-ssm-agent 

SSMエージェントを起動させてエージェント導入は完了です。
以下のコマンドで自動でamazon-ssm-agentが起動するようにもしておきましょう。

$ sudo systemctl enable amazon-ssm-agent

・ロールに権限を追加する(オプション)

Session ManagerにてS3バケットおよびCloudWatch Logsにログを記録する場合は、S3バケットおよびCloudWatch Logsへのアクセス権限が必要です。今回は、一旦以下のような2つのインラインポリシーをAmazonEC2RunCommandRoleForManagedInstancesロールに追加しました。

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "VisualEditor0",
           "Effect": "Allow",
           "Action": [
               "logs:CreateLogStream",
               "logs:DescribeLogGroups",
               "logs:DescribeLogStreams",
               "logs:PutLogEvents"
           ],
           "Resource": "*"
       }
   ]
}

CloudWatchLogsへのアクセスのためのインラインポリシー例

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "VisualEditor0",
           "Effect": "Allow",
           "Action": [
               "s3:GetEncryptionConfiguration",
               "s3:ListBucketMultipartUploads",
               "s3:ListBucket",
               "s3:GetBucketLocation"
           ],
           "Resource": "arn:aws:s3:::バケット名"
       },
       {
           "Sid": "VisualEditor1",
           "Effect": "Allow",
           "Action": [
               "s3:PutObject",
               "s3:GetObject"
           ],
           "Resource": "arn:aws:s3:::バケット名/*"
       }
   ]
}

S3バケットアクセスのためのインラインポリシー例

動作確認

マネージドインスタンスを確認します。

画像5

目的のインスタンスが登録されていることが確認できました(mi-..のインスタンス)。

画像6

目的のインスタンスを選択してアクションドロップダウンメニューをクリックしてStartSessionをクリックするとセッションマネージャーが起動します。

画像7

無事、アクセス出来ました。これで、AWSのマネジメントコンソールから、RaspberryPiにアクセス出来ます。

参考

AWS Systems ManagerをRaspberry Piで使用してみた
Amazon EC2 Systems ManagerがRaspbian OSに対応したのでRaspberry Piにインストールしてみた
ステップ4: 管理インスタンスの作成 ハイブリッド環境でのアクティベーション


この記事が気に入ったらサポートをしてみませんか?