EC2インスタンスにSession Manager経由でSSH接続する
Session Maneger経由でSSH接続することのメリット
- 接続対象のインスタンスにPublic Ipを付与する必要がない
- 踏み台Instance(Bastion)を必要としない → Private Subnet内のインスタンスに直接接続可能
- AWSによるCredential認証と公開鍵認証の2段階認証になる
- Cloudtrailに接続ログが残る
EC2インスタンス側で必要な設定
EC2インスタンスを作成する
-
キーペア(公開鍵)を作成する
-
EC2インスタンスをインターネットにアウトバウンド可能に
-
EC2インスタンスにSSM Agentを立ち上げるためのInstance Roleを付与する
クライアント側で必要な設定
awscliのセットアップ
インストール
- 公式ドキュメントなどを参考に,awsコマンドを実行できるようにする
credentialの設定
-
aws configure
を実行して,credentialなどを設定する- この際に,アクセスキーやシークレットアクセスキーが必要
- 未取得の人は → 公式ドキュメントなど参照
- これが完了すると,
~/.aws/config
と~/.aws/credentials
が作成されているはず
SSHの設定
pemファイルの配置
-
~/.ssh/xxx.pem
などわかりやすい場所にEC2インスタンスにアタッチしたキーペアのpemファイルを配置
EC2インスタンスの確認
- 作成したEC2インスタンスのinstance-idを確認しておく(eg. i-0220655452xxxxxx)
configの作成
-
~/.ssh/config
を作成する- 内容はいかを参考に
~/.ssh/config
Host {YOUR_PREFERRED_NAME}
HostName {YOUR_INSTANCE_ID}
# EC2インスタンスのOSに依存(Ubuntu: ubuntu, amazon-linux: ec2-user)
User ubuntu
IdentityFile {YOUR_PEM_FILE_PATH}
# 接続を切れにくくするための設定
ServerAliveInterval 60
ServerAliveCountMax 5
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
接続確認
-
ssh {YOUR_PREFERRED_NAME}
で接続可能-
{YOUR_PREFERRED_NAME}
は自身で設定したconfigを参照すること
-
うまくいかないときは?
sshのログを以下で吐き出し可能
ssh -vvv {YOUR_PREFERRED_NAME}
また,以下の項目を確認すべし
EC2インスタンス側
- EC2インスタンスに適切なRoleがついているか?
- そもそもインターネットにアウトバウンドできるか?
クライアント側
- awscliがインストールできていて,パスは通っているか?
- aws configureで正しく設定できているか?
- そのcredentialに対して,SSMの権限が付与されているか?
- pemファイルのパスは間違っていないか?
- instance-idは正しいか?