AWS

Session Manager でプライベートサブネットのEC2 インスタンスに接続する方法

2024年5月27日

aws-systems-manager-icon

AWS Systems Managerの機能の1つであるSession Managerを利用することで、インターネットに公開された踏み台サーバーやセキュリティグループの22番ポートを使用せずに、プライベートサブネット内のEC2インスタンスにセキュアに接続することが可能になる。

本記事では、Session Managerの概要、設定手順、接続方法を解説する。

「サリー」です。AWSパートナー企業でエンジニアとして働いています。
お問い合わせ自己紹介

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ロールを作成する。

  1. IAMコンソールにてIAMロールを作成
  2. 信頼されたエンティティタイプで「AWSのサービス」を選択
  3. ユースケースで「EC2」を選択
  4. 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タイププロトコルポートソース
インバウンドHTTPSTCP443VPC CIDR
アウトバウンドHTTPSTCP4430.0.0.0/0

VPCエンドポイント作成

東京リージョン(ap-northeast-1)にてEC2インスタンスを起動している場合以下のVPCエンドポイントを作成。セキュリティグループに上記で作成したVPCエンドポイント用のものを設定、接続対象インスタンスが配置されているプライベートサブネットを指定する。

Session Mangerで接続してみる

SSH接続するために一時的にigwへのルーティングを設定した場合、以下作業をする前に削除しておく。

EC2コンソールから接続

  1. 対象のEC2インスタンスを選択し「接続」をクリック

2. セッションマネージャータブから「接続」をクリック

3. 以下の画面が表示される

参考

Session Manager を使用して Amazon EC2 インスタンスに接続 - AWS 規範ガイダンス

Amazon Linux 2 および Amazon Linux 2023 インスタンスに SSM Agent を手動でインストールする - AWS Systems Manager

-AWS
-, ,