- はじめに
- 踏み台サーバー経由で接続する方法
- SSMセッションマネージャー経由で接続する方法
- EC2 Instance Connect Endpoint サービス経由で接続する方法
- 各種接続方法を比較してみる
- おわりに
はじめに
こんにちは。大林です。踏み台サーバーやSSMセッションマネージャーなど、プライベートサブネットに配置されたEC2インスタンスへの接続方法が増えてきたと思います。 今回のブログでは、プライベートサブネットに配置されたEC2インスタンスへの接続方法をまとめて、各種接続方法のメリットとデメリットを比較していきたいと思います。
踏み台サーバー経由で接続する方法
踏み台サーバーとは、外部から直接アクセスできないサーバーにアクセスするために配置される中継サーバーのことです。セキュリティの観点からVPC内に構築された内部向けのサーバーを外部に公開することは避けたいと思います。踏み台サーバーを使用すれば、外部へからの侵入リスクを抑えながらサーバーに接続することができます。
以下の構成図は、踏み台サーバー経由でEC2インスタンスに接続する通信経路とプライベートサブネットに配置されたEC2インスタンスからインターネットに通信する経路をまとめたものです。構成図にはNATゲートウェイがありますが、踏み台サーバー経由でプライベートサブネットに配置されたEC2インスタンスに接続するだけであればNATゲートウェイは必要ありません。プライベートサブネットに配置されたEC2インスタンスに接続してパッケージのインストールをしたい場合、インターネットへのアウトバウンドの通信経路が必要なのでNATゲートウェイが必要になります。
①セキュリティグループを作成する
EC2のマネジメントコンソールを開いてセキュリティグループを作成する。設定内容は以下です。
踏み台サーバ用セキュリティグループ
ルール | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|---|---|
インバウンドルール | IPv4 | SSH | TCP | 22 | 接続元IPアドレス |
プライベートサブネットに配置されたEC2インスタンス用セキュリティグループ
ルール | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|---|---|
インバウンドルール | IPv4 | SSH | TCP | 22 | 踏み台サーバ用セキュリティグループ |
②パブリックサブネットに踏み台サーバを作成する
EC2作成時のネットワーク設定でパブリックサブネットを指定してEC2インスタンスを作成していきます。
踏み台サーバを作成する際は以下の点に気を付けてください。
・キーペアを作成してローカルにダウンロードすること。
・パブリックIPを割り当てること。
・手順①で作成した踏み台サーバ用セキュリティグループを設定すること。
(Amazon EC2マネジメントコンソール)
(Amazon EC2マネジメントコンソール)
③プライベートサブネットにEC2インスタンスを作成する
EC2作成時のネットワーク設定でプライベートサブネットを指定してEC2インスタンスを作成していきます。
EC2インスタンスを作成する際は以下の点に気を付けながらプライベートサブネットにEC2インスタンスを作成してください。
・キーペアを作成してローカルにダウンロードすること。
・手順①で作成したプライベートサブネットに配置されたEC2インスタンス用セキュリティグループを設定すること。
(Amazon EC2マネジメントコンソール)
(Amazon EC2マネジメントコンソール)
(Amazon EC2マネジメントコンソール)
④踏み台サーバーにプライベートサブネットに配置されたEC2インスタンスのキーペアをコピーする
以下のコマンドを使用して、ローカル環境から踏み台サーバーにプライベートサブネットに配置されたEC2インスタンスのキーペアをコピーします。
scp –i 踏み台サーバーのキーペア(.pemファイル) 踏み台サーバーからアクセスするEC2インスタンスのキーペア(.pemファイル) ec2-user@ec2-踏み台サーバーのパブリックIPアドレス.リージョン.compute.amazonaws.com:コピー先ディレクトリ
⑤踏み台サーバーにアクセスする
以下のコマンドを参考にローカルPCにダウンロードしたキーペアを使用して踏み台サーバに接続します。 ※このコマンドはキーペアが「.ssh」フォルダにあることを想定したものです。
⑥踏み台サーバーからプライベートサブネットにあるEC2インスタンスにアクセスする
以下のコマンドを使用して、踏み台サーバーからプライベートサブネットにあるEC2インスタンスに接続します。
ssh -i ~/.ssh/キーペア ec2-user@接続先EC2インスタンスのプライベートIP
SSMセッションマネージャー経由で接続する方法
AWS Systems Managerの機能の一部であるセッションマネージャーを経由してプライベートサブネットに配置されたEC2インスタンスに接続する方法を説明していきます。
セッションマネージャーを活用することにより、SSHキーの管理やEC2インスタンスへのパブリックIPアドレスの割り当てを避けつつ、プライベートサブネット内に配置されたEC2インスタンスへの接続が可能になります。
前提として、セッションマネージャーを使用してEC2インスタンスに接続するためには、接続対象のEC2インスタンスにSSMエージェントがインストールされている必要があります。Amazon Linux 2やWindows Server 2008-2022 (AWSが提供する公式AMIでのみ)などSSMエージェントがデフォルトインストールされているOSもあります。
また、セッションマネージャーを使用してプライベートサブネットに配置されたEC2インスタンスに接続するためには、SSMエージェントからのアウトバウンドの通信経路を確保することと、接続対象のEC2インスタンスに適切な権限を割り当てることも必要になってきます。
アウトバウンドの通信経路を確保するためには、VPCエンドポイントかNATゲートウェイが必要になります。今回はVPCエンドポイント使用した手順とNATゲートウェイを使用した手順の両方の手順を説明していきます。
VPCエンドポイントを使用した方法
VPCエンドポイントは、SSMエージェントがSystems Managerにアクセスするための通信経路として使用します。また、NATゲートウェイを配置することで、EC2インスタンスに接続した後にパッケージのインストールなどインターネットへの通信経路を確保できます。そのため、以下の構成図ではプライベートサブネットに配置されたEC2インスタンスに接続するだけであれば、VPCエンドポイントのみを作成すればよいです。
以下の構成図は、セッションマネージャー経由でEC2インスタンス接続する経路とプライベートサブネットに配置されたEC2インスタンスからインターネットに通信する経路をまとめたものです。上記の説明の通り、SSMエージェントとSystems Manager間の通信はVPCエンドポイントもしくはNATゲートウェイを使用する必要があります。以下の構成図だと、VPCエンドポイントとNATゲートウェイの両方があるため、SSMエージェントとSystems Manager間の通信を可能とする経路が2つ存在することになります。VPCエンドポイントを作成した場合は、SSMエージェントとSystems Manager間の通信はNATゲートウェイを通ることなくVPCエンドポイントを経由して通信が行われます。
①セキュリティグループとIAMロールを作成する
EC2のマネジメントコンソールを開いてセキュリティグループを作成します。設定内容は以下です。
VPCエンドポイント用セキュリティグループ
ルール | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|---|---|
インバウンドルール | IPv4 | HTTPS | TCP | 443 | EC2が配置されているサブネットのIPv4 CIDR |
アウトバウンドルール | IPv4 | HTTPS | TCP | 443 | 0.0.0.0/0 |
EC2インスタンス用IAMロール
EC2インスタンス用のIAMロールの許可ポリシーに「AmazonSSMManagedInstanceCore」を追加します。
(AWS IAMマネジメントコンソール)
②プライベートサブネットにEC2インスタンスを作成する
EC2のマネジメントコンソールを開いてEC2インスタンスを作成していきます。EC2インスタンスを作成する際に手順①で作成したEC2インスタンス用IAMロールを設定します。
(Amazon EC2マネジメントコンソール)
③VPCエンドポイントを作成する
VPCのマネジメントコンソールを開いて、VPCエンドポイントを作成していきます。プライベートサブネットに配置されたEC2インスタンスがSystems Managerと通信するためには、以下の3つのエンドポイントが最低限必要です。VPCエンドポイントを作成する際は、手順①で作成したVPCエンドポイント用セキュリティグループを設定します。
- com.amazonaws.リージョン.ssm
- com.amazonaws.リージョン.ssmmessages
- com.amazonaws.リージョン.ec2messages
上記の3つのエンドポイントが正常に作成されると、ステータスが「使用可能」になっていることが確認できます。 (Amazon VPCマネジメントコンソール)
④SSMセッションマネージャー経由でEC2インスタンスに接続する
EC2のマネジメントコンソールから「セッションマネージャー」のタブを選択して、接続ボタンをクリックすると接続することができます。 (Amazon EC2マネジメントコンソール)
(Amazon EC2マネジメントコンソール)
NATゲートウェイを使用した方法
NATゲートウェイを使用してSSMエージェントとSystems Manager間の通信を可能にする方法を説明していきます。この方法は、SSMエージェントからSystems Manager間の通信経路とプライベートサブネットに配置されたEC2インスタンスからインターネット間の通信経路の両方をNATゲートウェイで確保する方法です。上記のVPCエンドポイントを使用した方法と比較すると、VPCエンドポイントが必要ないため構成がより簡潔になります。
①IAMロールを作成する
EC2インスタンス用IAMロール
EC2インスタンス用のIAMロールの許可ポリシーに「AmazonSSMManagedInstanceCore」を追加します。
(AWS IAMマネジメントコンソール)
②プライベートサブネットにEC2インスタンスを作成する
EC2のマネジメントコンソールにアクセスして、EC2インスタンスを作成していきます。EC2インスタンスを作成する際は、上記の手順①で作成したIAMロールを設定します。
(Amazon EC2マネジメントコンソール)
③NATゲートウェイを作成して、ルートテーブルを編集する
VPCのマネジメントコンソールからNATゲートウェイを作成していきます。サブネットにはパブリックサブネットを指定して、接続タイプはパブリックを選択します。 (Amazon VPCマネジメントコンソール)
作成したNATゲートウェイの状態が「Available」になったら、接続するEC2インが配置されているプライベートサブネットが関連付けられたルートテーブルを編集していきます。
ルートテーブルのルート編集画面を開いて、ターゲットに上記で作成したNATゲートウェイを指定して変更を保存します。
(Amazon VPCマネジメントコンソール)
(Amazon VPCマネジメントコンソール)
④SSMセッションマネージャー経由でEC2インスタンスに接続する
EC2のマネジメントコンソールから「セッションマネージャー」のタブを選択して、接続ボタンをクリックすると接続することができます。NATゲートウェイを作成してルートテーブルを編集したとしても、EC2インスタンスに接続できるようになるまで少し時間がかかる場合があります。私が検証した際には、EC2インスタンスに接続できるようになるまでに20分程かかる時もありました。 (Amazon EC2マネジメントコンソール)
(Amazon EC2マネジメントコンソール)
EC2 Instance Connect Endpoint サービス経由で接続する方法
EC2 Instance Connect Endpoint サービスは、プライベートサブネットに配置されたEC2インスタンスにプライベート接続を可能とするサービスです。EC2 Instance Connect Endpoint サービスを使用することで、パブリックIPアドレスを持たないEC2インスタンスにSSH/RDP接続をすることができます。また、EICエンドポイントは、VPCエンドポイントと異なり、固定費用が発生しません。そのため、コストを抑えた接続が可能です。
一方で、1つのVPCあたりEICエンドポイントを1つまでしか作成できないといったデメリットもあります。
以下の手順では、SSH接続をする際に必要な手順をまとめています。
(画像参照元)EC2 Instance Connect Endpoint のセキュリティグループ
①セキュリティグループを作成する
EC2のマネジメントコンソールを開いてセキュリティグループを作成します。設定内容は以下です。
EICエンドポイント用セキュリティグループ
インバウンドルールは特に指定する必要はありませんが、アウトバウンドルールでSSH通信を許可しておく必要があります。
EC2インスタンス用セキュリティグループ
ルール | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|---|---|
インバウンドルール | IPv4 | SSH | TCP | 22 | EICエンドポイント用セキュリティグループ |
②プライベートサブネットにEC2インスタンスを作成する
EC2のマネジメントコンソールにアクセスして、EC2インスタンスを作成していきます。EC2インスタンスを作成する際は、上記の手順①で作成したEC2インスタンス用セキュリティグループを設定します。 (Amazon EC2マネジメントコンソール)
③EICエンドポイントを作成する
VPCのマネジメントコンソールからEICエンドポイントを作成します。サービスカテゴリでは「EC2 インスタンス接続エンドポイント」を選択して、上記の手順①で作成したEICエンドポイント用セキュリティグループを設定します。また、サブネットはEC2インスタンスが配置されているプライベートサブネットを指定します。 (Amazon VPCマネジメントコンソール)
(Amazon VPCマネジメントコンソール)
(Amazon VPCマネジメントコンソール)
④EC2 Instance Connect Endpoint サービスを使用してEC2インスタンスに接続する
EC2のマネジメントコンソールから「EC2 Instance Connect」のタブを選択します。「EC2 Instance Connectエンドポイントを使用して接続する」を指定して、上記の手順③で作成したEICエンドポイントを選択します。最後に接続ボタンをクリックすると接続できます。 (Amazon EC2マネジメントコンソール)
(Amazon EC2マネジメントコンソール)
各種接続方法を比較してみる
以下のようにプライベートサブネットに配置されたEC2インスタンスへの接続方法を比較してみると、接続方法はどれも一長一短だと言えます。
踏み台サーバーを使用した場合だと柔軟性がある一方、SSHキーの管理や踏み台サーバー自体のセキュリティ対策が必要になります。
VPCエンドポイントを使用したセッションマネージャー経由での接続は、SSMエージェントとSystems Manager間の通信がインターネットを経由しないためセキュアになりますが、インターネットへの通信経路を確保するためにNATゲートウェイが必要になりVPCエンドポイントとNATゲートウェイの両方の固定費用がかかってきます。
セッションマネージャー経由での接続にNATゲートウェイのみを採用した場合、VPCエンドポイントを使用しない分固定費用は抑えられますが、VPCエンドポイントを使用した場合と比べてセキュアではなくなります。
EC2 Instance Connect Endpoint サービスを使用した接続方法は、コストを抑えることができますが、冗長性という点では他の接続方法には劣ると言えます。
接続方法 | メリット | デメリット |
---|---|---|
踏み台サーバーを使用した接続 | ・クライアントからSSH接続が可能 ・さまざまなネットワーク構成に適応できるため柔軟性が高い |
・踏み台サーバーへのセキュリティ対策が必要 ・SSHキーの管理が必要 |
SSM(VPCエンドポイントを使用) | ・SSHキーの管理が不要 ・SSHのインバウンドポートを開く必要がない ・SSMエージェントとSystems Manager間の通信がインターネットを介さないためセキュアになる |
・NATゲートウェイを使用してインターネットへの通信経路を確保する場合、VPCエンドポイントとNATゲートウェイの固定費とデータ量に応じた利用料がかかる ・ EC2インスタンスにSSMエージェントをインストールする必要がある |
SSM(NATゲートウェイを使用) | ・SSHキーの管理が不要 ・SSHのインバウンドポートを開く必要がない ・NATゲートウェイのみの利用料でSSMセッションマネージャーとインターネットの両方に接続可能 |
・VPCエンドポイントとSSMセッションマネージャーを使用した接続方法よりもセキュアではない ・EC2インスタンスにSSMエージェントをインストールする必要がある |
EC2 Instance Connect Endpoint サービスを使用した接続 | ・EIC エンドポイントの固定費用がかからない(データ転送には料金がかかる) ・パブリックIPアドレスを持たないEC2インスタンスに対してSSH/RDP接続ができる |
・EICエンドポイントの冗長構成ができない→1つのVPCあたりエンドポイントを1つまでしか作成できない |
おわりに
今回のブログでは、踏み台サーバを使用した接続方法、SSMセッションマネージャーを使用した接続方法(VPCエンドポイント)、SSMセッションマネージャーを使用した接続方法(NATゲートウェイのみ)、EC2 Instance Connect Endpoint サービスを使用した接続方法をまとめて、それぞれのメリットとデメリットを比較していきました。どの接続方法も特徴があるため、要件に応じた接続方法を選択していくことが重要だと思います。また、本ブログを参考にハンズオンを実施した方は特にVPCエンドポイントとNATゲートウェイの削除を忘れないようにお願いします!