プライベートEC2インスタンスに安全に接続する方法を最新情報で総まとめ
プライベートEC2インスタンスへのアクセスは、管理者や一部の権限を持つ開発者など、組織内の特定ユーザーにとって日常的に発生する作業です。従来、AWSユーザーはこの用途に踏み台(ジャンプボックス)、VPN(仮想プライベート接続)、あるいはAWS Direct Connectを利用してきました。AWS EC2はこうした「旧来型」のソリューションに代わるモダンな選択肢を以前から提供してきましたが、2023年6月に行われた機能強化を機に、改めて整理しておく価値があります。本記事では、プライベートEC2インスタンスへ接続するための代替手段と、それぞれのメリット・デメリット、そして使い方を解説します。
注:本記事でいうプライベートインスタンスとは、パブリックIPv4アドレスを持たない、またはパブリックVPCサブネットで起動されていないEC2インスタンスを指します。なお、パブリックサブネットとは、ルートテーブルがインターネットゲートウェイ経由でインターネットへトラフィックを転送するサブネットを指します。
「従来型」SSH接続のおさらい
プライベートEC2インスタンスに安全に接続する「従来型」の方法は、大きく2つあります。1つ目はClient-VPNまたはSite-to-Site VPNを使って暗号化トンネルを確立する方法(技術的にはトンネルではないものの、AWS Direct Connectもここに含めて扱います)。2つ目はパブリックEC2インスタンスを「ジャンプボックス」(一般に「踏み台」ホストと呼ばれる)として使い、そこからプライベートインスタンスへ新たに接続を張る方法です。いずれもコストが発生し、場合によっては相応の構築作業が必要になります。順に詳しく見ていきましょう。
- AWS Client-VPN、AWS Site-to-Site VPN(または同等のVPNソリューション)、もしくはAWS Direct Connect
このアプローチは、暗号化トンネル(VPNの場合)あるいは専用プライベートリンク(AWS Direct Connectの場合)を確立することで、任意のネットワークからプライベートネットワークへの接続を可能にする手段として、これまでも(そして現在も)広く使われています。ただし、VPN接続の終端としてインスタンスやマネージドサービスが少なくとも1つ必要となり、ケースによっては接続時間に応じた料金も発生します。複雑さも構成によってまちまちです。
- ジャンプボックス(踏み台)
VPNやDirect Connectのセットアップに比べてコストや複雑さを抑えられるため、こちらはさらに一般的な選択肢です。クライアントからの接続を受けるパブリックEC2インスタンスを用意し、そこからプライベートEC2インスタンスへ新たに接続を張る構成です(下図参照)。SSH(通常はSSHエージェントフォワーディングを利用)やRDP(Remote Desktop Gatewayを利用)で活用できます。デメリットは、踏み台インスタンスの利用料に加え、踏み台を公開することで攻撃対象領域(アタックサーフェス)が広がる点です。当然ながら、認証情報(秘密鍵など)の厳格な管理、セキュリティグループとネットワークACL(NACL)によるネットワーク制限、OSの定期的なパッチ適用といった、考えられるセキュリティ対策をすべて講じる必要があります。これらはインフラ運用上のオーバーヘッドになります。

踏み台ベースの接続
これらの方法も技術的には有効ですが、AWSは同等のアクセスをより管理しやすく、コスト効率よく実現できるモダンな手段を2つ用意しています。順に見ていきましょう。
アクセス方法1:Session ManagerならSSHそのものを使わずに済む(必要に応じて)
2018年に登場したAWS Session Managerは、AWS Systems Managerの機能の1つです。EC2インスタンス、エッジデバイス、オンプレミスのサーバーや仮想マシン(VM)を対話的に管理できます。
Session Managerを使う場合、接続先のプライベートEC2インスタンス側でSSHやRDPは不要です(インストールも設定も起動も必要ありません)。一方で、Session Manager経由でプライベートEC2インスタンスに接続する際にSSHやRDPプロトコルを利用することも可能です(後述)。
Session Managerの構成:
- プライベートEC2インスタンスではSystems Manager Agentが稼働している必要があります。エージェントは複数のAMIにプリインストールされていますが、手動でインストールすることもできます(EC2インスタンス以外でも利用可能)。
- 接続先のプライベートEC2インスタンスが属するサブネットは、インターネットゲートウェイまたはNATゲートウェイを介して、直接または間接的にインターネットへ接続できる必要があります。あるいは、Session Manager用のVPCエンドポイントを構成すれば、アウトバウンドのインターネット接続なしでもプライベートEC2インスタンスを管理できます。この2つのパターンを図で見てみましょう。
- ネットワーク構成オプション1:すでにパブリックサブネットにNATゲートウェイがあり、Systems Manager AgentのトラフィックをNATゲートウェイ経由で処理する追加コストを許容できる場合、下図のような構成になります。クライアントセッションを開始するには、Session Manager AgentからSession Managerエンドポイントへのアウトバウンド接続が必要です。

NATゲートウェイを使ったSession Manager
- ネットワーク構成オプション2:インターネットゲートウェイやNATゲートウェイを使いたくない場合は、Systems Manager、Session Manager Message Gateway Service、Message Delivery Serviceの各サービスごとにVPCエンドポイントが必要になります。詳しくはこちらとこちらをご覧ください。VPCエンドポイントは独自のセキュリティグループ(およびリソースポリシー)を持つため、ネットワークおよびアイデンティティのアクセス制御をさらにきめ細かく設定できます。

VPCエンドポイントを使ったSession Manager
Session Managerの利用:
- AWSマネジメントコンソールまたはAWS Command Line Interface(AWS CLI)を使って、システム管理者がAWS Identity and Access Management(IAM)ポリシーでアクセスを許可したノードに対しセッションを開始できます。AWS CLIを使う場合は、まずAWS CLI用のSession Manager プラグインをインストールする必要があります。
- IAMポリシーでインスタンスへのアクセスを一元管理できます。これは接続先インスタンス側(インスタンスに割り当てるロールに、Systems Manager AgentがSystems Manager/Session Manager APIとやり取りするための権限が必要)と、EC2インスタンスへアクセスするアイデンティティ側(IAMユーザーまたはロールに、対象インスタンスへのSession Manager接続を開始する権限が必要)の双方に当てはまります。
- インスタンスの権限は、AWS Identity and Access Management(IAM)ロールでアカウントレベルに付与する方法と、インスタンスプロファイルでインスタンスレベルに付与する方法があります。ユースケースに合えば、AWSはDefault Host Management Configurationによるアカウントレベルでの付与を推奨しています。
- SSHやRDPプロトコルもそのまま利用できます(その場合、クライアント側に認証情報ファイルが必要です)。
- プライベートサブネット上のEC2「踏み台」とポートフォワーディングを組み合わせれば、お好みのGUIからAmazon RDSやAmazon EC2上のデータベースインスタンスへ安全に接続することも可能です。
Session Managerに関するその他の考慮事項:
- Session Managerはロギングと監査に対応しています。AWS CloudTrailとAmazon CloudWatch Logs(必要に応じてS3バケットも)を組み合わせて、すべてのセッションアクティビティを記録できます。ただし、ポートフォワーディングやSSH経由で接続するセッションについてはロギングできません。SSHがセッションデータをすべて暗号化し、Session ManagerはSSH接続のトンネルとして機能するだけだからです。
- Session Managerを使ってAmazon EC2インスタンスにアクセスする場合、追加料金はかかりません。標準のデータ転送料金が適用されます。一方、Session Managerでオンプレミスのインスタンスに対話的にアクセスする場合は料金が発生します。
アクセス方法2:EC2 Instance Connect Endpointは最新のSSH/RDP接続手段
EC2 Instance Connect Endpointを使えば、インスタンスがパブリックIPv4アドレスを持たなくても、エフェメラルキー(一時鍵)ベースのSSHでSSHまたはRDP接続が可能です。2023年6月以前は、EC2 Instance Connectが似た機能を提供していたものの、対象はパブリックEC2インスタンスのみでした(この種のインスタンスへのアクセスには現在も利用できます)。EC2 Instance Connectは2019年に登場しました。
EC2 Instance Connect Endpointの構成:
- 接続先インスタンス側にエージェントは不要です。そのため、サードパーティ製アプライアンスのようにエージェントをサポートしないインスタンスにもアクセスできます。
- インターネットゲートウェイやNATゲートウェイを介した直接・間接のインターネット接続も不要です。ただし、接続先インスタンスを含むVPC内の1つのサブネットにエンドポイントを構成する必要があります。執筆時点(2023年11月)では、VPCあたり作成できるEC2 Instance Connect Endpointは1つまでです(Quotasを参照)。エンドポイントが利用可能になるまでには数分かかります。

EC2 Instance Connect Endpoint
EC2 Instance Connect Endpointの利用:
- プライベートノードへの接続には、AWSマネジメントコンソール、独自のキーとSSHクライアント、またはAWS Command Line Interface(AWS CLI)が利用できます。RDPクライアントで接続する前に、AWS CLIでトンネルを開く必要があります。
- 独自のSSHキーを使うこともできます(その場合、クライアント側に認証情報ファイルが必要です)。デフォルトの管理者ユーザーでRDP接続を行うには、Windowsのパブリックインスタンスへ接続する場合と同様に、EC2に紐付けたデフォルトキーペアの秘密鍵で初期管理者パスワードを復号する必要があります。
- EC2 Instance Connect Endpointは、アイデンティティベース(接続を開始するIAMユーザーまたはロールに割り当てられたIAM権限)とネットワークベース(エンドポイントおよび接続先インスタンスに適用されるセキュリティグループ)を組み合わせ、インスタンスへのアクセス制御を一元化します。EC2 Instance Connect EndpointにクライアントのIPアドレスを保持させることもでき、その場合はセキュリティグループやネットワークACL(NACL)の構成方針に影響します。
EC2 Instance Connect Endpointに関するその他の考慮事項:
- 一時的な認証情報を使うため、万一秘密鍵が漏洩しても、その鍵は認証情報の有効期間を超えて使うことはできません。
- AWS CloudTrailのログを使えば、リソース操作のログ収集や、EC2 Instance Connect Endpoint経由で確立した接続の監査が行えます。Session Managerと異なり、ユーザー操作のロギングは接続先インスタンスのOSレベルで管理する必要があります。
- 把握しておきたい制限事項もいくつかあります。代表的なところでは、サポートされるポートは22と3389のみであること、EC2 Instance Connect EndpointはIPv6アドレスでのインスタンス接続に対応していないことが挙げられます。
- EC2 Instance Connect Endpointの利用に追加料金はかかりません。標準のデータ転送料金が適用されます。
まとめ
本記事では、AWS上のプライベートEC2インスタンスへ安全に接続する4つの方法を取り上げました。
従来型の方法は次の2つです。1)AWS Client-VPN、Site-to-Site VPN、AWS Direct Connectの構築(暗号化トンネルや専用リンクを確立できますが、複雑さとコストが伴います)。2)パブリックEC2インスタンスを「ジャンプボックス」として使う方法(コスト効率は高いものの、攻撃対象領域が広がります)。
そのうえで、よりモダンで簡単、かつ低コストな2つのアプローチを紹介しました。
- Session Manager:AWS Systems Managerの機能で、プライベートインスタンス側にSSHやRDPがなくても(任意で利用は可能)EC2インスタンスを対話的に管理できます。Systems Manager Agentを使い、接続先サブネットからのアウトバウンドのインターネット接続(NATゲートウェイまたはVPCインターフェイスエンドポイント経由)が必要で、IAMポリシーによる一元的なアクセス制御を提供します。
- EC2 Instance Connect Endpoint:パブリックIPv4アドレスを持たないインスタンスへのSSHまたはRDP接続を可能にします。接続先インスタンスにエージェントは不要で、直接的なインターネット接続も必要ありません(VPC内のサブネットにエンドポイントをアタッチするだけ)。アクセス制御はIAM権限とセキュリティグループで管理します。
Session ManagerとEC2 Instance Connect Endpointはいずれも監査機能を備え(Session Managerはオプションでセッションアクティビティのロギングが可能)、Amazon EC2インスタンスへのアクセスに追加料金は発生しません(標準のデータ転送料金を除く)。
これらの改良された接続オプションをぜひ今すぐ活用してみてください。AWSが2024年2月1日から適用すると発表したパブリックIPv4アドレスの新料金の影響を緩和するうえでも有効です。サポートが必要な場合は、DoiTのCustomer Reliability Engineering(CRE)とTechnical Account Managers(TAM)が喜んでお手伝いしますので、お気軽にお問い合わせください。