SessionManagerは踏み台不要でサーバに入り、 CLI で操作できる便利なツールですよね。
SSH不要時代がくるか!?AWS Systems Manager セッションマネージャーがリリースされました!
しかしながら、以下のような辛みがありました。
- パスワードなしで
sudo
できるssm-user
でしかログインできない - ブラウザからしか入れないので、 switch role したらセッション切れる
2つめの辛みは、SSH/SCP が使えるようになったことで解消されました!
AWS Systems Manager セッションマネージャーでSSH・SCPできるようになりました
そうした時に、1つめの辛みである ssm-user
でのログインを禁止したくなったので、IAM ポリシーを書いてみました。以下に示します。
キモは2つ。
-
ssm:SessionDocumentAccessCheck
という Condition -
SSM-SessionManagerRunShell
のssm:GetDocument
をDeny
公式ドキュメントを見てこの Condition を見つけたので、あとはドキュメントを読んでみてください。
※例示されているポリシーは GetDocument の Statement に ssm:SessionDocumentAccessCheck
の Condition が記述されていますが、これは間違いだと思います。マネジメントコンソールのビジュアルエディターで警告出たので。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": [
"arn:aws:ssm:*:*:document/AWS-StartSSHSession",
"arn:aws:ec2:*:*:instance/*"
],
"Condition": {
"BoolIfExists": {
"ssm:SessionDocumentAccessCheck": "true"
}
}
},
{
"Effect": "Deny",
"Action": "ssm:GetDocument",
"Resource": "arn:aws:ssm:*:*:document/SSM-SessionManagerRunShell"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetConnectionStatus",
"ec2:DescribeInstances",
"ssm:DescribeSessions",
"ssm:DescribeInstanceProperties"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ssm:TerminateSession",
"Resource": "arn:aws:ssm:*:*:session/*"
}
]
}
ちなみに、どうやらセッションマネージャー周りのポリシー変更は、変更後すぐは反映されないようです...
一度ログアウト/ログインを実施すると、すぐ反映されます(経験談)。