Amazon Session ManagerでEC2インスタンスへsshログインする

Amazon Session Manager で プライベートサブネット上にあるEC2インスタンスsshログインする

AmazonEC2インスタンスにインタネットからsshしたい。Publicサブネットに踏み台を置く例もあるんですが、session managerでsshログインさせたほうが良いみたいです。
Amazonのドキュメントもあるんですが、何ぶんわかりにくいのでstep by stepでまとめます。

IAMロールを作成する

IAMコンソールから、ロール→ロールを作成。
「一般的なユースケース」でEC2を選択して、「次のステップ」をクリック。
ポリシーのフィルタに AmazonSSMManagedInstance と入力、下にでてきた同ロールにチェックをいれて「次のステップ」をクリック
f:id:rougeref:20211130100858p:plain

タグはお好み。確認をクリック。ロール名は適当に。EC2SSMとかでも。

f:id:rougeref:20211130101030p:plain

EC2インスタンスに上記で作成したロールを関連付ける

EC2コンソールから対象のEC2インスタンスを選択、アクション→IAMロールを変更。
f:id:rougeref:20211130101458p:plain

NATゲートウェイを設定

プライベートサブネットからインタネット(実際にはSession Manager)にでられるように、パブリックサブネット上にNATゲートウェイを設置。
プライベートサブネットのデフォルトルータにNATゲートウェイを設定。

sshログインしたい端末にaws CLIをインストール

インストール手順はカンタンでいろんなところで紹介されているので省略。
aws configで認証を通す必要ありますが、ここで使うIAMユーザにはSSMを利用できるだけのロールを割り当てる必要があります。

sshのconfigを編集する

SSM経由でログインするときは、EC2のインスタンスIDを指定します。configへ以下。

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

awsのssmでプロクシをかけるみたいです。

実際にsshでログインしてみる

$ ssh -i mykey.pem ec2-user@i-0fe7d76ae74dbab06
Last login: Tue Nov 30 08:02:49 2021 from localhost

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-16-44 ~]$