AWS Systems Managerの機能の1つであるSession Managerを利用することで、インターネットに公開された踏み台サーバーやセキュリティグループの22番ポートを使用せずに、プライベートサブネット内のEC2インスタンスにセキュアに接続することが可能になる。
本記事では、Session Managerの概要、設定手順、接続方法を解説する。
Session Managerとは
Session ManagerとはAWSのリソースを管理するための機能であるAWS Systems Manager(SSM)の機能の1つ。
Session Managerを使うと、プライベートサブネット内のEC2インスタンスにセキュアに接続可能になる。
通常、プライベートサブネット内のEC2インスタンスに接続しようとすると、パブリックサブネット内に踏み台サーバーを構築したり、セキュリティグループで22番ポートを開けておく必要があるが、Session Managerを使用することで上記作業が不要になる。
Session Mangerで接続するための準備①
IAMロールを作成
Session Managerを使用して接続するためにはAmazonSSMManagedInstanceCoreポリシーをアタッチしたIAMロールをEC2インスタンスにアタッチする必要がある。そのためにまずIAMロールを作成する。
- IAMコンソールにてIAMロールを作成
- 信頼されたエンティティタイプで「AWSのサービス」を選択
- ユースケースで「EC2」を選択
- AmazonSSMManagedInstanceCoreポリシーをアタッチ
作成したロールの信頼ポリシーは以下
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
※EC2インスタンス起動後にIAMロールをアタッチする場合は、EC2インスタンスを再起動する必要がある。
EC2インスタンスを起動
EC2コンソールから「インスタンスの起動」をクリックしEC2インスタンスを起動する。
今回は以下設定とする。次の手順で説明しているが、EC2インスタンスにSSM Agentをインストールする必要があるため一時的に22番ポート(SSH)を開けている。
項目 | 設定値 |
---|---|
名前 | 任意の名前 |
Amazon マシンイメージ (AMI) | Amazon Linux 2023 |
インスタンスタイプ | t2.micro |
キーペア | 任意のキーペア |
VPC | 任意のVPC |
サブネット | 任意のプライベートサブネット(一時的にigwへのルートテーブルへのルーティング設定を追加する必要有) |
パブリックIPの自動割り当て | 有効化(後で無効化) |
セキュリティグループ | タイプ:SSH、ソースタイプ:自分のIP |
ストレージ | gp3、8GiB |
IAM インスタンスプロファイル | 事前に作成したIAMロール(AmazonSSMManagedInstanceCoreポリシーをアタッチ) |
EC2インスタンスにSSM Agentをインストール
rLoginやTerratermなどを用いてEC2インスタンスにSSHし、SSM Agentをインストールする。ただし、今回使用するAmazon Linux 2023はデフォルトでAWS Systems Manager Agentがインストールされているためインストールは行わない。
ほとんどの場合、AWS が提供する Amazon Linux 2 用および Amazon Linux 2023 用 Amazon Machine Images (AMIs) には、デフォルトで AWS Systems Manager エージェント (SSM Agent) がプリインストールされています。
Amazon Linux 2 および Amazon Linux 2023 インスタンスに SSM Agent を手動でインストールする - AWS Systems Manager
SSM Agentが実行されているか確認する(Amazon Linux 2023)
以下コマンドでSSM AgentがActiveになっているか確認する。
$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-05-26 12:44:34 UTC; 12min ago
Main PID: 2151 (amazon-ssm-agen)
Tasks: 7 (limit: 1114)
Memory: 21.9M
CPU: 351ms
CGroup: /system.slice/amazon-ssm-agent.service
└─2151 /usr/bin/amazon-ssm-agent
もしActiveになっていない場合は以下コマンドにてSSM Agentをアクティブ化する
$ sudo systemctl start amazon-ssm-agent
SSM Agentをインストールする場合
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
EC2インスタンス起動時にSSM Agentをインストールする場合
EC2インスタンスに接続せずともSSM Agentをインストールすることもできる。そうしたい場合は、EC2インスタンス起動設定画面の高度な詳細から以下のとおりユーザーデータを設定する。設定することでインスタンス起動時に記入したコマンドが実行され、EC2インスタンスに接続せずともSession Mangerにて接続可能な状態になる。
EC2 Linux インスタンスに Systems Manager Agent をインストールする
#!/bin/bash
cd /tmp
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
sudo systemctl start amazon-ssm-agent
アウトバウンド通信を許可しているか確認
EC2インスタンスがインターネットへのアウトバウンド通信ができる必要がある。
確認する方法は2つ。セキュリティグループのアウトバウンド設定でHTTPS通信が許可されているか。EC2インスタンス内で以下コマンドを実行し、指定したURLにアクセスできていることを確認する。
$ curl --head <https://google.com>
HTTP/2 301
location: <https://www.google.com/>
content-type: text/html; charset=UTF-8
content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-iOS6dOKn2o5mZ0Ut0Q4cXw' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri <https://csp.withgoogle.com/csp/gws/other-hp>
date: Sun, 26 May 2024 13:16:03 GMT
expires: Tue, 25 Jun 2024 13:16:03 GMT
cache-control: public, max-age=2592000
server: gws
content-length: 220
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
検出できているか確認
SSMAgentのインストールが完了し、サービスが起動していると「SSM Manager > フリートマネジャー」にEC2インスタンスが表示される。
Session Mangerで接続するための準備②
VPCエンドポイント用セキュリティグループを作成
以下の設定でSGを作成しEC2インスタンスへアタッチ。準備①で作成したセキュリティグループはデタッチ、削除しておく。
inbound/outbound | タイプ | プロトコル | ポート | ソース |
---|---|---|---|---|
インバウンド | HTTPS | TCP | 443 | VPC CIDR |
アウトバウンド | HTTPS | TCP | 443 | 0.0.0.0/0 |
VPCエンドポイント作成
東京リージョン(ap-northeast-1)にてEC2インスタンスを起動している場合以下のVPCエンドポイントを作成。セキュリティグループに上記で作成したVPCエンドポイント用のものを設定、接続対象インスタンスが配置されているプライベートサブネットを指定する。
- ec2messages.ap-northeast-1.amazonaws.com
- ssm.ap-northeast-1.amazonaws.com
- ssmmessages.ap-northeast-1.amazonaws.com
Session Mangerで接続してみる
SSH接続するために一時的にigwへのルーティングを設定した場合、以下作業をする前に削除しておく。
EC2コンソールから接続
- 対象のEC2インスタンスを選択し「接続」をクリック
2. セッションマネージャータブから「接続」をクリック
3. 以下の画面が表示される
参考
Session Manager を使用して Amazon EC2 インスタンスに接続 - AWS 規範ガイダンス
Amazon Linux 2 および Amazon Linux 2023 インスタンスに SSM Agent を手動でインストールする - AWS Systems Manager