メインコンテンツまでスキップ

SessionManager の設定

SSM Agentのインストール

SSM Agent の使用

AmazonLinuxを除きでオルトではインストールされていない場合はインストールを行う

RedhatELへのインストール

Red Hat Enterprise Linux インスタンスに SSM Agent を手動でインストールする

Python 2 または Python 3 のいずれかが RHEL 8 および 9 インスタンスにインストールされていることを確認します

# python --version

インストール

# dnf install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

動作確認

# systemctl status amazon-ssm-agent
備考

SSM Agent のバージョン 2.3.50.0 以降、エージェントはマネージドノード上にルートまたは管理者アクセス許可 (ssm-user と呼ばれる) のあるユーザーアカウントを作成します。(2.3.612.0 より前のバージョンでは、SSM Agent が起動または再起動するときにアカウントが作成されます。2.3.612.0 以降のバージョンでは、マネージドノード上でセッションが開始されるときに ssm-user が初めて作成されます) セッションは、このユーザーアカウントの管理者認証情報を使用して起動します。

SessionManager設定

EC2への接続手段としてSessionManagerの設定を行う

AWS: Session Manager のセットアップ

SessionManager用のセッションデータ暗号化用鍵の作成

セッションデータの KMS キー暗号化を有効にする

コンソールからSessionManagerの設定画面を開き、「KMS encryption」のチェックを有効にする

有効にするとKMSキーの指定を求められるので、ない場合は新規で作成する

鍵の管理者を設定し、キーの使用法アクセス許可を定義については別途IAMロールで指定する
作成後元のSessionManager設定画面に戻り、先程作成した鍵を指定して設定を保存する

セッションログ保存用S3バケットの作成

セッションマネージャーログ保存用のバケット、またはフォルダを作成する
ログを頻繁に見ないのであればライフサイクルを設定できるバケットを指定したほうがよい

SessionManager用のIAMロール作成

Session Manager のカスタム IAM ロールを作成

カスタムポリシーの作成

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel",
"ssm:UpdateInstanceInformation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/s3-bucket-prefix/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetEncryptionConfiguration"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": "key-name"
},
{
"Effect": "Allow",
"Action": "kms:GenerateDataKey",
"Resource": "*"
}
]
}

作成したポリシーをEC2に設定しているロールに付与する

AWS IAMユーザーに対するSSM許可ポリシーの作成

Session Manager のクイックスタートのデフォルト IAM ポリシー

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:region:account-id:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:DescribeSessions",
"ssm:GetConnectionStatus",
"ssm:DescribeInstanceProperties",
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:CreateDocument",
"ssm:UpdateDocument",
"ssm:GetDocument"
],
"Resource": "arn:aws:ssm:region:account-id:document/SSM-SessionManagerRunShell"
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:userid}-*"
]
}
]
}

すべてのインスタンスに対してすべてのSSM権限を許可する場合は下記でもよい

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ssm:StartSession",
"ssm:TerminateSession",
"ssm:ResumeSession",
"ssm:DescribeSessions",
"ssm:GetConnectionStatus"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
]
}

作成したポリシーをSSMを許可するIAMユーザーに付与する
※IAMユーザーにすでに強い権限が付与されている場合はスキップ

アイドルタイムアウトの設定

アイドルセッションのタイムアウト値を指定します。

セッションマネージャーのデフォルトアイドルタイムアウトは20分となっているので必要であれば調整する

シェルプロファイルのカスタマイズ

アイドルセッションのタイムアウト値を指定

SSM利用時のシェルや環境設定必要であれば行う

S3 logging設定

セッションマネージャーの設定画面から

セッションマネージャーで利用するOSアカウントの指定

Linux と macOS のマネージドノードで Run As サポートを有効にする

デフォルトではSSMAgent導入時に作成されるssm-userが利用される、必要であれば指定することが可能
rootを指定することはできない。
用途や環境のセキュリティレベルによるが、ec2-user同様、AWSがデフォルトで利用するユーザーから変更することはあまりしないほうが良い印象
任意のOSアカウントを採用する場合は権限管理やトラブル時に原因切り分けが行えるような設計をする

指定したい場合、SSMの設定画面から

Run As を有効化し、 ユーザー名を指定した場合:IAMユーザーに「SSMSessionRunAs」タグがない場合に指定したユーザーでログインが行われます
ユーザー名を指定しない場合:IAMユーザーに「SSMSessionRunAs」タグがない場合終了します

デフォルトの ssm-user を使用してほしくない場合は空欄にしたほうが良さそう
SSMを利用するIAMユーザーにタグを追加して完了

セッションマネージャー経由でのSSH/SCP許可

Session Manager を通して SSH 接続のアクセス許可を有効にして制御する

SSM Agent のプラグインをインストール

Session Manager プラグインを Red Hat Enterprise Linux ディストリビューションにインストールする

# dnf install -y https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm

ローカルマシンにSSH用Proxyコマンドを設定する

# SSH over Session Manager
host i-* mi-*
ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"

CloudWatchAgentのインストール

サーバーでの CloudWatch エージェントのインストールおよび実行

インストール

ダウンロードリンクから適切なURLを自身のリージョン状況に変更してインストール

# dnf install -y https://amazoncloudwatch-agent.s3.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm

CLoudWatchAgent用ポリシーの設定

CloudWatch エージェントで使用する IAM ロールとユーザーを作成する

EC2に設定したロールに「CloudWatchAgentServerPolicy」ポリシーを付与する

SSM クイックセットアップ

各種設定とSystemsManagerとの関連付け、Agentのアップデート管理等を一括登録する
SysytemsManagerの管理画面から高速セットアップを選択し、関連付けたいインスタンスを指定して実行する

SSM接続確認

コンソールからSSM接続確認

EC2の接続画面から接続できることを確認

ローカルからCLIでの接続確認

ローカルPCからCLIで接続できることを確認

> aws ssm start-session --target <instance id> --profile develop

Starting session with SessionId: <instance id>
sh-5.1$