SSM Session Manager 経由での SSH

Step 7: (Optional) Enable SSH Connections Through Session Manager” にある通りだが、SSH クライアント側に session-manager-plugin をインストール して、~/.ssh/config に次のように設定すれば

# SSH over Session Manager
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

ssh ec2-user@i-0897e5bf469826a3c などとするだけで SSH 接続することができる。サーバー側はクライアント側から直接アクセス可能な IP アドレスを持っている必要がなく、もちろん SecurityGroup で 22/tcp を開けておく必要もない。

ただし、サーバー側に公開鍵 (~/.ssh/authorized_keys) の設置が必要。

SSH クライアント側では session-manager-plugin が起動して AWS と https (443/tcp) で通信します。ssh コマンドはこの session-manager-plugin と pipe で通信します。

サーバー側では amazon-ssm-agent から起動される ssm-session-worker が localhost の sshd (22/tcp) に接続しています。

USER       PID  COMMAND
root      3456  /usr/sbin/sshd -D
root     20830   \_ sshd: ec2-user [priv]
ec2-user 20862       \_ sshd: ec2-user@pts/1
ec2-user 20863           \_ -bash
ec2-user 20902               \_ ps auxwwf
...
root      4291  /usr/bin/amazon-ssm-agent
root     20821   \_ /usr/bin/ssm-session-worker yteraoka-0b10612850cc08e6e i-04bf9e371e9f6b863

関連するプロセスの流れは次のような感じですが、

ssh -> session-manager-plugin -> (AWS) -> amazon-ssm-agent -> ssm-session-worker -> sshd

接続の方向としては次のようになっていました。

ssh -> session-manager-plugin -> (AWS) <- amazon-ssm-agent
                                   ^
                                   |
                            ssm-session-worker -> sshd

ここで、amazon-ssm-agent や ssm-session-worker の接続先となっている (AWS) というのが Global IP Address であるため、Private な Subnet にいるインスタンスの場合は NAT Gateway などでインターネットに出られるようになっているか VPC EndpointPrivateLink の設定 が必要です。

ブラウザから Session Manager でインスタンスに接続する場合は ssm-session-worker が直接 shell を起動させます。

USER       PID  COMMAND
root      4291  /usr/bin/amazon-ssm-agent
root     20569   \_ /usr/bin/ssm-session-worker yteraoka-05b675cf4885dd674 i-04bf9e371e9f6b863
ssm-user 20582       \_ sh
ssm-user 20583           \_ ps auxwwf

Session Manager 経由の SSH を禁止したい場合は IAM Policy で次のように Deny します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Deny",
            "Action": "ssm:StartSession",
            "Resource": "arn:aws:ssm:*:*:document/AWS-StartSSHSession"
        }
    ]
}

その他のメモ

Built with Hugo
テーマ StackJimmy によって設計されています。