SessionManager の設定
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の設定を行う
SessionManager用のセッションデータ暗号化用鍵の作成
コンソールから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$