【AWS_48_03】セッションマネージャーを利用してプライベートサブネットのEC2インスタンスへSSH接続する(VPCエンドポイントがある場合)

 
この記事を書いている人 - WRITER -
ブログ運営者のtkjzblogです。 仕事柄新しいシステムに触れることが多いです。 Windows、Linux(RHEL)がメインです。その他、VMwareやOffice365など仮想環境やクラウド環境も少しですが触れることがあります。 いろいろ忘れがちのため、このサイトへ情報を書き溜めていきたいと思います。 どうぞ、よろしくお願い致します。

セッションマネージャーについて一度記事を書いたのですが、あらためて検証をしてみるといろいろと疑問が出てきて、あらためて整理しないとと感じました。
それは以下3点の場合にそれぞれ設定は異なるがどうすればいいのだろうということでした。(それぞれ検証して記事にしていますのでご興味ある方は、リンクからアクセスしてください。

EC2インスタンスがパブリックサブネットにある場合
EC2インスタンスがプライベートサブネットにあり、インターネットへのアウトバウンド通信経路がある場合
EC2インスタンスがプライベートサブネットにあり、インターネットへのアウトバウンド通信経路がない場合

また、使用するユーザーが管理者レベル、一般ユーザーレベルで必要な設定も変わるのかなというところも疑問に思いました。
このあたりを検証して整理したいと思います。

   

今回は、「EC2インスタンスがプライベートサブネットにあり、インターネットへのアウトバウンド通信経路がない場合」を検証します。
検証のポイントは、以下となります。

・VPCの設定で「DNS名を有効化」を有効化する  
・プライベートサブネット内からVPC外部(AWS内部ネットワーク)へ接続する経路としてVPCエンドポイントを作成する
・EC2インスタンスには、セッションマネージャー接続のためのIAMロール(AmazonSSMManagedInstanceCore)を割り当てる
・EC2インスタンス用のセキュリティグループを設定する(インバウンド:不要、アウトバウンド:443ポートを許可)
 ※アウトバウンドはデフォルトですべてのトラフィックを許可しているのでそれを利用する
・VPCエンドポイント用のセキュリティグループを設定する(インバウンド:443ポートを許可、アウトバウンド:不要)
・VPCエンドポイントを3つ作成する
  com.amazonaws.region.ssm
  com.amazonaws.region.ssmmessages
  com.amazonaws.region.ec2messages
・管理者ユーザー(admin)へ、AdministratorAccessポリシーをアタッチする
・一般ユーザー(user01)へ、カスタマーポリシー、AmazonEC2FullAccessポリシーをアタッチする

   

   

前提

設定は、admin(管理者)で作業しています。admin(管理者)には、AdministratorAccessポリシーを適用しています。
user01(一般ユーザー)は、作成済みとして進めます。

   

VPCの作成

VPCを作成します。作成方法がわからない方は、以下記事を参考にしてください。

VPC作成後、チェックを入れてアクション > VPCの設定を編集 をクリックします。

「DNS ホスト名を有効化」にチェックを入れて、「保存」をクリックします。

   

プライベートサブネットの作成

プライベートサブネットを作成します。作成方法がわからない方は、以下記事を参考にしてください。

※IPv4 サブネット CIDR ブロックは、10.0.2.0/24 で作成しています

   

プライベートサブネットへEC2インスタンスを作成

プライベートサブネットへEC2インスタンスを作成します。作成方法がわからない方は、以下記事を参考にしてください。

※サーバ名は、pri-sv にしました
※キーペアは、「キーペアなしで続行」を選択します
※パブリック IP の自動割り当ては、無効化にします
※セキュリティグループ名は、pri-sv-sg にしました
※セキュリティグループのインバウンドセキュリティグループのルールは、削除して空にします

   

IAMロールを作成し、EC2インスタンスへアタッチ

IAMロールの作成

AWSマネジメントコンソールで「iam」を検索します。
左ペインのロールをクリック、画面右上の「ロールを作成」をクリックします。

「信頼されたエンティティタイプ」で「AWSのサービス」を選択します。

画像に alt 属性が指定されていません。ファイル名: image-241.png

「ユースケース」で「EC2」を選択し、「次へ」をクリックします。

画像に alt 属性が指定されていません。ファイル名: image-242.png

「許可ポリシー」で「AmazonSSMManagedInstanceCore」を検索し、左側にチェックを入れて「次へ」をクリックします。

画像に alt 属性が指定されていません。ファイル名: image-243.png

「ロールの詳細」へロール名を入力します。
その他はデフォルトのままで「ロールを作成」をクリックします。

画像に alt 属性が指定されていません。ファイル名: image-244.png
画像に alt 属性が指定されていません。ファイル名: image-245.png
画像に alt 属性が指定されていません。ファイル名: image-246.png

IAMロールが作成されました。

画像に alt 属性が指定されていません。ファイル名: image-247.png

   

IAMロールをEC2インスタンスへアタッチ

AWSマネジメントコンソールで「ec2」を検索します。
左ペインのインスタンスをクリック、作成したEC2インスタンスにチェックを入れます。
アクション > セキュリティ > IAMロールを変更 をクリックします。

プルダウンから作成したIAMロールを選択し、「IAMロールの更新」をクリックします。

EC2インスタンスの「セキュリティ」タブでIAMロールがアタッチされていることを確認します。

   

EC2インスタンスのセキュリティグループの確認

AWSマネジメントコンソールで「ec2」を検索します。
左ペインのセキュリティグループをクリック、EC2インスタンス用のセキュリティグループ(pri-sv-sg)にチェックを入れます。

「インバウンドルール」タブは「ルールなし」、「アウトバウンドルール」タブは、「すべてのトラフィックが許可」となっていることを確認しておきます。

   

VPCエンドポイント用のセキュリティグループを作成

AWSマネジメントコンソールで「vpc」を検索します。
左ペインのセキュリティグループをクリック、「セキュリティグループを作成」をクリックします。

「セキュリティグループ名」と「説明」は、任意の名前を入力します。今回は「endpoint-sg」としました。
「VPC」は、該当のVPCを選択します。

「インバウンドルール」は、以下のとおり選択します。
  タイプ:HTTPS
  ソース:0.0.0.0/0
「アウトバウンドルール」、その他はデフォルトのままで「セキュリティグループを作成」をクリックします。

VPCエンドポイント用のセキュリティグループが作成されました。

   

VPCエンドポイントの作成

VPCエンドポイントを3つ作成します。

●com.amazonaws.region.ssm
⇒Systems Manager サービスのエンドポイント
●com.amazonaws.region.ssmmessages
⇒Systems Manager は、このエンドポイントを使用して SSM Agent から Systems Manager サービスへの呼び出しを行う
●com.amazonaws.region.ec2messages
⇒Run Command のために、および Session Manager を使用してセキュアなデータチャネル経由でインスタンスに接続している場合に、SSM Agent が Systems Manager サービスと通信する上で必要

   

AWSマネジメントコンソールで「vpc」を検索します。
左ペインのエンドポイントをクリック、「エンドポイントを作成」をクリックします。

「エンドポイントの設定」で任意の名前タグを入力します。今回は「ssm」としました。
「タイプ」は、「AWSのサービス」を選択します。

「サービス」の検索ウィンドウで「ssm」を入力、表示された「com.amazonaws.ap-northeast-1.ssm」を選択します。
※環境によりリージョン名(ap-northeast-1)は異なります

「ネットワーク設定」で該当のVPCを選択します。
「追加設定」の「DNS名」で「DNS名を有効化」にチェックを入れます。

「サブネット」で該当のアベイラビリティーゾーンにチェックを入れ、サブネットIDのプルダウンからプライベートサブネットを選択します。

「セキュリティグループ」は、事前に作成した「endpoint-sg」を選択します。

「ポリシー」、「タグ」はデフォルトのままで「エンドポイントを作成をクリックします。

VPCエンドポイントが作成されました。

同じ流れで残り2つのVPCエンドポイントを作成します。
設定が異なる箇所は「名前タグ」と「サービス」になります。

●com.amazonaws.region.ssmmessages
  名前タグ:ssmmessages
  サービス:com.amazonaws.region.ssmmessages

●com.amazonaws.region.ec2messages
  名前タグ:ec2messages
  サービス:com.amazonaws.region.ec2messages

3つ作成することができました。ステータスが「使用可能」になるまで少し待ちます。

   

EC2インスタンスの再起動

参考サイトに「EC2インスタンスからシステムマネージャーへの接続は、インスタンス起動時に行われ、SSMエージェントがシステムマネージャーへ登録を行っている」とありましたのでEC2インスタンスを再起動します。
実際、再起動せずに接続しようとしたら失敗しました。

   

セッションマネージャーからEC2インスタンスへ接続(admin:管理者)

AWSマネジメントコンソールで「ec2」を検索します。
左ペインのインスタンスをクリック、作成したEC2インスタンスにチェックを入れ、「接続」をクリックします。

「接続」をクリックします。
※ここで「接続」ボタンがグレーアウトしていたら設定が反映されてないか、設定に不備があります。

接続できました。「終了ボタン」やブラウザのタブを閉じるなどして切断することができます。

   

一般ユーザー(user01)で接続するための設定

一般ユーザー(user01)がEC2インスタンスへ接続するためには、EC2インスタンスを扱えるポリシーとセッションマネージャーに関するポリシーが必要になります。
今回、EC2インスタンスを扱えるポリシーは「AmazonEC2FullAccess」をアタッチし、
セッションマネージャーに関するポリシーは、カスタムポリシーをJSONで作成してアタッチします。

   

EC2インスタンスのインスタンスARNを確認

AWSマネジメントコンソールで「ec2」を検索します。
左ペインのインスタンスをクリック、該当のEC2インスタンスにチェックを入れます。
画面下の「詳細」タブを選択し、「インスタンスARN」の値を控えます。今回は「arn:aws:ec2:ap-northeast-1:750067409009:instance/i-07469275a13585563」となります。
ポリシー作成の際に必要となります。

   

セッションマネージャーに関するポリシーの作成

AWSマネジメントコンソールで「iam」を検索します。
左ペインのポリシーをクリック、「ポリシーの作成」をクリックします。

「ポリシーエディタ」で「JSON」を選択します。
「ポリシーエディタ」にあるコードを一度削除し、上書きする形で新しいコードを貼り付けます。

■コード

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:ap-northeast-1:750067409009:instance/i-07469275a13585563",
                "arn:aws:ssm:ap-northeast-1:750067409009:document/SSM-SessionManagerRunShell"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceProperties",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:userid}-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

   

任意のポリシー名を入力します。今回は「20250826-user01-policy」としました。

その他はデフォルトのままで「ポリシーの作成」をクリックします。

ポリシーが作成されました。

   

一般ユーザー(user01)へポリシーの適用

今回は、ユーザーへ直接アタッチします。
AWSマネジメントコンソールで「iam」を検索します。
左ペインのユーザーをクリック、ポリシーを適用したいユーザー選択します。今回は「user01」を選択します。

「許可」タブを選択し、「許可を追加」を選択します。

「許可のオプション」で「ポリシーを直接アタッチする」を選択します。

検索ウィンドウへ「AmazonEC2FullAccess」と入力し、表示された「AmazonEC2FullAccess」にチェックを入れます。

フィルタを一度解除(×印)し、次に作成したポリシー「20250826-user01-policy」にチェックを入れて、「次へ」をクリックします。

確認画面で「AmazonEC2FullAccess」と「20250826-user01-policy」が選択されていることを確認し、「許可を追加」をクリックします。

2つのポリシーが追加されたことを確認します。

   

セッションマネージャーからEC2インスタンスへ接続(user01:一般ユーザー)

admin(管理者)からサインアウトして、user01(一般ユーザー)でサインインします。

AWSマネジメントコンソールで「ec2」を検索します。
左ペインのインスタンスをクリック、作成したEC2インスタンスにチェックを入れ、「接続」をクリックします。

「接続」をクリックします。
※ここで「接続」ボタンがグレーアウトしていたら設定が反映されてないか、設定に不備があります

接続できました。「終了ボタン」やブラウザのタブを閉じるなどして切断することができます。

   

検証後のリソースの削除

簡単にですが、作成したリソースの削除について記載します。

・EC2インスタンス
  削除
 
・VPCエンドポイント
  削除
 
・IAMロール
  削除

・IAMポリシー
  削除
 
・VPC
  削除

   

まとめ

本検証にて、セッションマネージャーを利用してプライベートサブネットのEC2インスタンスへSSH接続する(VPCエンドポイントがある場合)することができました。

これで、以下のようにセッションマネージャーを利用した接続パターンを3つ検証することができました。セッションマネージャーについて、少しは理解ができたのかなと感じました。

【AWS_48_01】セッションマネージャーを利用してパブリックサブネットのEC2インスタンスへSSH接続する

・【AWS_48_02】セッションマネージャーを利用してプライベートサブネットのEC2インスタンスへSSH接続する(NATゲートウェイがある場合)

・【AWS_48_03】セッションマネージャーを利用してプライベートサブネットのEC2インスタンスへSSH接続する(VPCエンドポイントがある場合) ※この記事です

      

下、他の記事をまとめた一覧です。AWSもまとめています。

   

この記事を書いている人 - WRITER -
ブログ運営者のtkjzblogです。 仕事柄新しいシステムに触れることが多いです。 Windows、Linux(RHEL)がメインです。その他、VMwareやOffice365など仮想環境やクラウド環境も少しですが触れることがあります。 いろいろ忘れがちのため、このサイトへ情報を書き溜めていきたいと思います。 どうぞ、よろしくお願い致します。

Copyright© しっぱいはせいこうのもと , 2025 All Rights Reserved.