Session Managerとは
AWSのEC2インスタンスにリモート接続するための方法はいくつかあるが、その中の1つにSession Manager がある。
Session Managerを使うとSSH接続するためのポートを開ける必要がなく、認証をIAMロールで行なえるようになる。
Session Managerでのリモート接続
Session Managerによるリモート接続はAWS CLI
を使って以下のように行なう。
$ aws ssm start-session --target インスタンスID
このように接続するとSSHのようにリモートでコマンドを実行できるようになる。
しかし使い慣れたSSHと多少の違いがある。
例えば、手元の環境ではctrl+y
の入力で接続が切断される。
切り取った文字列を貼り付けるための手癖で入力してしまい、意図せず切断してしまうため不便となる。
そこでSSHで接続できるようにする。
Session Managerを通したSSH接続
Session Managerを通してSSH接続ができるようにすると以下のようなメリットがある。
- Session Managerで認証するためSSHのポートを開ける必要がない
- 使い慣れたSSHでリモート接続できる
以降ではSession Managerを通してSSH接続するための設定方法を説明する。
Session Managerを有効化する
Session Managerを使うためにはEC2インスタンスに対して以下の4つの設定が必要になる。
- セキュリティグループの設定
- SSMエージェントのインストール
- EC2インスタンスのインスタンスプロファイル(IAMロール)の設定
- EC2インスタンスに公開鍵を置く(
~/.ssh/authorized_keys
)
【Terraform】Session Manager でログイン可能な EC2 を建てるにTerraform
でSession Managerを有効化するためのコードを記載している。
ポイントとしては以下の3つ。
セキュリティグループ
EC2に付加するセキュリティグループへアウトバウンドの443ポートを許可する設定を行なう。
EC2インスタンスにSession Manager Agentをインストールする
接続したいEC2インスタンスに対してSSMエージェントをインストールする。
CentOS・Rocky Linuxの場合。
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
$ sudo systemctl enable amazon-ssm-agent --now
AMIによってはSession Manager Agentがプリインストールされている場合もある。
その場合はこのステップをスキップしてよい。
EC2インスタンスのインスタンスプロファイル(IAMロール)の設定
EC2インスタンスに対してAmazonSSMManagedInstanceCore
ポリシーを必要とする。
IAMロールを作成し、許可ポリシーにAmazonSSMManagedInstanceCore
を追加する。
信頼関係(信頼されたエンティティ)はEC2とする。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EC2インスタンスに公開鍵を設置する(~/.ssh/authorized_keys)
EC2インスタンスの接続したいユーザーの~/.ssh/authorized_keys
に公開鍵を設置する。
例えばec2-user
というユーザーであれば/home/ec2-user/.ssh/authorized_keys
に公開鍵を設置する。
(ec2-user
はEC2側のユーザー)
確認
EC2インスタンスに対してSession Managerの設定が正常に行なわれているか確認する。
AWSコンソールのEC2のページから対象のEC2インスタンスを選択し、接続
をクリックする。
以下のような画面が表示されれば設定は正常に行なわれている。
設定に不備がある場合は以下のようにエラーが表示される。
SSHで接続する
設定(~/.ssh/config)
Session Managerを通してSSHするには~/.ssh/config
に以下の設定を追加する。
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --region ap-northeast-1 --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
SSHの実行方法
ホスト名の代わりにインスタンスIDで接続する。
$ ssh インスタンスID -l ec2-user
内部でAWS CLIを実行しているので~/.aws/credential
にアクセスキーを設定しておくなど、認証情報を渡してあげる必要がある。
例えばAWS_PROFILE
環境変数を指定して以下のように実行すると接続できる。
$ AWS_PROFILE=プロファイル名 ssh インスタンスID -l ec2-user
SCPの実行方法
SSHができるようになればSCPも可能となる。
SSHと同様にホスト名の代わりにインスタンスIDで接続する。
$ AWS_PROFILE=プロファイル名 scp somefile.txt ec2-user@インスタンスID: