AWS Session Manager
#AWS #AWS_Systems_Manager
AWS Systems Manager Session Manager
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html
CLIセットアップ
macOS
macOS での Session Manager プラグインのインストール
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/install-plugin-macos-overview.html
code:sh
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
AWS CLI の最新バージョンのインストールまたは更新
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
code:sh
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
aws --version
amazon linuxは不要
code:session-manager
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
# install
sudo yum install -y session-manager-plugin.rpm
# pluginがinstallされたことの確認
session-manager-plugin
------
aws configure help
コマンドヘルプを確認する
profileを設定
aws configure --profile sample_profile
アクセスキーとシークレットキーを設定
ap-northeast-1
インスタンスへの接続
aws ssm start-session --target instance_id --profile sample_profile
Run As サポート
IAMユーザーにタグSSMSessionRunAs = os user account nameで設定したOSユーザー名で接続される
SSMSessionRunAs = os user account name タグが付いていない場合、AWS アカウント の Session Manager の詳細設定で指定した OS ユーザー名で接続される。
iamのタグにユーザーを設定すれば良い
タグ名 SSMSessionRunAs
SSMSessionRunAsがない場合、デフォルト設定したOSユーザー名でログインされる
参考
Linux と macOS のマネージドノードで Run As サポートを有効にする
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-preferences-run-as.html
SSM Session ManagerでログインするOSユーザーをIAMユーザー・ロールごとに切り替える
https://blog.serverworks.co.jp/ssm-login-os-user-iam
SSMをトンネリングしたSSH接続
ステップ 8: (オプション) Session Manager を通して SSH 接続のアクセス許可を付与および制御する
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html
SCPを使用する場合は、この設定を行う
マネージドノードへの接続を確立する際に使用する Privacy Enhanced Mail 証明書 (PEM ファイル) または少なくとも公開キーを作成または確認します。これはマネージドノードにすでに関連付けされたキーでなければなりません。
注意
ssh keyが必要
EC2に割り当てられたキーペアが必要。そのため基本的には、デフォルトのOSユーザー(ubuntuなど)で接続することになると思われる。
code:config
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
code:ssh-over ssm.sh
ssh -i key.pem ec2-user@instance-id
または
code:sh
# ~/.ssh/config
Host host-name
ProxyCommand sh -c "aws ssm start-session --profile <profile-name> --target '<instance-id' --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
User ec2-user
IdentityFile ~/.ssh/key.pem
設定
ログ
Amazon CloudWatch Logs を使用してセッションデータをストリーミングする (コンソール)
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html
https://docs.aws.amazon.com/systems-manager/latest/userguide/session-preferences-enable-encryption.html
(This is in addition to the TLS 1.2/1.3 encryption that AWS already provides by default.) To encrypt Session Manager session data, create a symmetric KMS key using AWS KMS.
---
運用方針
通常の接続: Webコンソールの Session Manager を使用。
IAMユーザーにOSユーザー名を紐づけて、接続する。
ファイル転送が必要な場合: AWS-StartSSHSession を利用して、一時的にポートフォワーディングを設定し、scp を使用してファイルのアップロード・ダウンロードを行う。
SSM セッションマネージャーでサーバー上の操作ログを取得
https://dev.classmethod.jp/articles/recording_session_logs_via_ssm/
----
メモ
AWS Systems Manager のセッションマネージャで EC2 (Linux) にアクセスした際に気をつけたいこととその緩和策
https://dev.classmethod.jp/articles/mitigation-idea-for-session-manager/
OS から見て、セッションマネージャからのアクセスは「ログイン」状態ではない、
ssm-userで接続した時点では、ログイン状態ではない。
lastログにも記録されない。wコマンドにもプロセスが表示されない
---
他
ポリシー参考になりそう
リモートからのメンテナンスは必ず踏み台サーバーを経由する
踏み台サーバーへはセッションマネージャー経由でログインする
SSH ポートは開放しない
踏み台サーバーへのアクセス許可は IAM で管理
踏み台サーバーは Amdazon Linux 2
ログインはメール通知
ログイン後の操作ログは S3 へ保管
-----
cloud9
https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/ec2-ssm.html
code:iam-cloud9.json
{
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ssm:resourceTag/aws:cloud9:environment": "*"
},
"StringEquals": {
"aws:CalledViaFirst": "cloudformation.amazonaws.com"
}
}
},
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ssm:*:*:document/*"
]
}