- Session Managerをデフォルトで使うと sudoが可能なssm-userユーザを使ってログインすることとなる。
-
ssm-userとは別のユーザアカウントをログイン先のOS上で作成する
- sudo権限は付与しない
-
RoleやGroupでログイン先のユーザ名を指定する場合は、Session Manager上の設定を有効化する必要がある
Enable Run As support for Linux instances
-
SSMSessionRunAs
というタグ名を作って、ログインさせたいユーザ名を値に設定する。 -
例: 以下のようなPolicyを作った上で、RoleやGroupにattachする。
- ここでホスト名やregionなどの制限を付け加える。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": [
"arn:aws:ssm:*:*:document/AWS-StartSSHSession",
"arn:aws:ec2:*:*:instance/<instance id>"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:DescribeSessions",
"ssm:GetConnectionStatus",
"ssm:DescribeInstanceProperties",
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ssm:TerminateSession",
"Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
}
]
}
現時点では以下のユースケースを満たすためのアプローチは設定は違う。 1を可能にした上で、2をできるようにする必要がある。
- session managerを使ったshellでのログイン
- rsyncを使うためのsshのトンネルの作成
1はStartSession権限を与えれば使えるようになる。
2を実現するためには、ログイン先のshellアカウントの authorized_keys
にログイン元のssh公開鍵を登録しておく。
AWSの公式ドキュメントなどで紹介されている以下の.ssh/configの設定はSession Managerを使ってトンネルを張ることを意味しているだけ。 sshトンネルを張った上で、sshをローカルに実行するようにして2を実現している様子。
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
※2を実現するために、RunCommand権限を付与すれば公開鍵の登録は不要になるが、今度は別のユーザでのログインもできるようになってしまうので本末転倒になる。
sample setting for "ssh over session manager"
.ssh/config
command
rsync example
command