今回は「Session Manager (SSM) を使って EC2 へアクセスする方法 (privateサブネットでパブリックIPを持たないEC2へアクセスする方法)」についてまとめます。
概要
Systems Manager にある Session Manager を利用して EC2 へアクセスするための準備から接続方法についてまとめてみます。
Session Manager を使ってEC2へアクセスできるようになると、これまで 22ポート (SSH) を開放していたものが解放しなくてよくなります。 また、実質的な踏み台サーバーを AWS が提供していることになるので、踏み台も準備不要になってちょっと便利になります。
今回まとめとして取り上げるのは以下のような「プライベートサブネットにたてたパブリックIPを持たないEC2に対してアクセスするようなケース」で見ていきます。 EC2にはパブリックIPが付与されずプライベートIPのみとなります。 そのままではアクセスできないのでVPCエンドポイント(VPCピアリング)を付けて、AWS内の経路でアクセスしていきます。
サーバー準備
VPC
SSMを利用しようとすると、VPCのDNS解決が有効でないとアクセスできません。 またプライベートサブネットでアクセスするために設定するVPCエンドポイントでDNSを有効にしようとすると「DNSホスト名」も「有効」にしておく必要があります。 「DNSホスト名」も「有効」である必要がある点はパブリックな場合と異なる点です。
VPC
DNS解決 | 有効 |
---|---|
DNSホスト名 | 有効 |
サブネット
ルートテーブル | 外界とつながらないので特に指定なし |
---|
VPCエンドポイント
サービス名 | エンドポイント準備が必要なのは以下3種類
|
---|---|
サブネット | (接続したいEC2があるプライベートサブネットを指定) |
プライベートDNS名 | 有効 |
セキュリティグループ | HTTPS(443)のEC2からのインバウンドを許可 |
Systems Manager
初期化がまだであれば「高速セットアップ」から初期化を行います。 一度初期化を行っていたとしても、「高速セットアップ」はダッシュボードとして状況が見えるので再設定する際もこちらから行うと便利です。
基本的にはデフォルトのままでOKですが、Configuration Options に関してはチェックなしでも問題ありません。 Targetsに関してはさすがに「Choose all instances in the current AWS account and Region」か「Specify instance tags」でないとEC2が増減したとき毎回対応になって面倒になります。
高速セットアップ
Permissions |
Instance profile role
Assume role for Systems Manager |
---|---|
Configuration options | 内容は定期的なシステムチェックをするかどうか、なので全部チェックを外しても問題ありません。 更新や状況を確認したいものがあればチェックを入れておきます。 |
Targets | 内容は定期的なシステムチェックをするかどうか、なので全部チェックを外しても問題ありません。 更新や状況を確認したいものがあればチェックを入れておきます。 |
IAM
EC2に設定が必要なアクセス権は AmazonSSMManagedInstanceCore
ポリシーになります。
AWS EC2 向けロールに対してあらかじめ追加しておきます。
Sysmtes Manager で初期設定している場合、 AmazonSSMRoleForInstanceQuickSetup
ロールが追加されています。
このロールにはあらかじめ AmazonSSMManagedInstanceCore
が追加されているので、このロールを活用してもOKです。
ロール
ロール名 |
AmazonSSMRoleForInstancesQuickSetup
|
---|---|
信頼されたエンティティ | AWS サービス:ec2 |
アクセス権 | AmazonSSMManagedInstanceCore
|
Security Group
「EC2に付与するもの」と「VPCエンドポイントに付与するもの」の2種類が必要になります。
EC2に付与するセキュリティグループ
EC2に付与するセキュリティグループは「VPCエンドポイント」に向かって「アウトバウンドHTTPS(443)」が通信許可されていることです。
-
インバウンドルール
(なし)
-
アウトバウンドルール
タイプ プロトコル ポート範囲 送信先 HTTPS
TCP
443
(VPCエンドポイント向けのセキュリティグループ)
VPCエンドポイントに付与するセキュリティグループ
VPCエンドポイントには逆にEC2からHTTPSが入ってくるので「インバウンド HTTPS 」を許可します。
-
インバウンドルール
タイプ プロトコル ポート範囲 ソース HTTPS
TCP
443
(EC2向けのセキュリティグループ)
-
アウトバウンドルール
(なし)
EC2
Amazon Linux を使わない場合、独自に Session Manager Plugin をインストールする必要があります。 Amazon Linux は最初から入っているので特に気にする必要はありません。 今回は Amazon Linux 前提で進めていきます。
必要なセキュリティグループ、IAMロールは準備できているので、 EC2作成時には以下のような設定を行っていきます。
Step3: インスタンスの詳細の設定
ネットワーク | (作成したVPCを設定します。このVPCは「DNS解決が有効」である必要があります。) |
---|---|
サブネット | (作成した privateサブネット を指定します。 このサブネットは VPCエンドポイント 経由でAWSのSSMと通信できる必要があります) |
自動割り当てパブリックIP | 無効 |
IAMロール |
AmazonSSMManagedInstanceCore ポリシーを含むロールを指定します。
Systems Manager の高速セットアップをデフォルト設定で利用した場合 AmazonSSMRoleForInstancesQuickSetup ロールになります。
|
Step6: セキュリティグループの設定
セキュリティグループ | HTTPS(443) でVPCエンドポイントへ通信できるようにしておきます。 |
---|
接続確認
接続方法もいくつかありますが、今回は単純にマネジメントコンソールから接続する方法を見ておきます。 他の方法については別途記事を書こうと思います…。
Session Manager から接続
今回はSystemsManagerのセッションマネージャーから接続してみます。
もちろん、EC2のページから接続することもできます。
この方法で接続すると ssm-user
をいうユーザーで接続します。
-
「Systems Manager」へ遷移
-
左メニューから「Session Manager」を開く
-
「セッションの開始」を選択
-
接続したいインスタンスを選択して「セッションを開始する」を選択
今回は「SSM を使って EC2 へアクセスする方法 (privateサブネットの場合)」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!