Session Manager を使って Private EC2 にアクセスする方法

0 件のコメント

今回は「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内の経路でアクセスしていきます。

サーバー準備

SSMを利用しようとすると、VPCのDNS解決が有効でないとアクセスできません。 またプライベートサブネットでアクセスするために設定するVPCエンドポイントでDNSを有効にしようとすると「DNSホスト名」も「有効」にしておく必要があります。 「DNSホスト名」も「有効」である必要がある点はパブリックな場合と異なる点です。

VPC

DNS解決 有効
DNSホスト名 有効

サブネット

ルートテーブル 外界とつながらないので特に指定なし

VPCエンドポイント

サービス名 エンドポイント準備が必要なのは以下3種類
  • com.amazonaws.ap-northeast-1.ssm
  • com.amazonaws.ap-northeast-1.ec2messages
  • com.amazonaws.ap-northeast-1.ssmmessages
サブネット (接続したいEC2があるプライベートサブネットを指定)
プライベートDNS名 有効
セキュリティグループ HTTPS(443)のEC2からのインバウンドを許可

初期化がまだであれば「高速セットアップ」から初期化を行います。 一度初期化を行っていたとしても、「高速セットアップ」はダッシュボードとして状況が見えるので再設定する際もこちらから行うと便利です。

基本的にはデフォルトのままでOKですが、Configuration Options に関してはチェックなしでも問題ありません。 Targetsに関してはさすがに「Choose all instances in the current AWS account and Region」か「Specify instance tags」でないとEC2が増減したとき毎回対応になって面倒になります。

高速セットアップ

Permissions

Instance profile role
Use the default role を選択。 Use the default role を選択すると AmazonSSMRoleForInstancesQuickSetup ロールが作成されます。 独自のロールを指定したい場合 Choose an existing role を選択しますが、 AmazonSSMManagedInstanceCore ポリシーを含んでいる必要があります。

Assume role for Systems Manager
こちらは関係ないので Use the default role (AmazonSSMRoleForAutomationAssumeQuickSetup) を指定しておきます。

Configuration options 内容は定期的なシステムチェックをするかどうか、なので全部チェックを外しても問題ありません。 更新や状況を確認したいものがあればチェックを入れておきます。
Targets 内容は定期的なシステムチェックをするかどうか、なので全部チェックを外しても問題ありません。 更新や状況を確認したいものがあればチェックを入れておきます。

EC2に設定が必要なアクセス権は AmazonSSMManagedInstanceCore ポリシーになります。 AWS EC2 向けロールに対してあらかじめ追加しておきます。

Sysmtes Manager で初期設定している場合、 AmazonSSMRoleForInstanceQuickSetup ロールが追加されています。 このロールにはあらかじめ AmazonSSMManagedInstanceCore が追加されているので、このロールを活用してもOKです。

ロール

ロール名 AmazonSSMRoleForInstancesQuickSetup
信頼されたエンティティ AWS サービス:ec2
アクセス権 AmazonSSMManagedInstanceCore

「EC2に付与するもの」と「VPCエンドポイントに付与するもの」の2種類が必要になります。

EC2に付与するセキュリティグループ

EC2に付与するセキュリティグループは「VPCエンドポイント」に向かって「アウトバウンドHTTPS(443)」が通信許可されていることです。

  • インバウンドルール

    (なし)

  • アウトバウンドルール

    タイプ プロトコル ポート範囲 送信先
    HTTPS TCP 443 (VPCエンドポイント向けのセキュリティグループ)

VPCエンドポイントに付与するセキュリティグループ

VPCエンドポイントには逆にEC2からHTTPSが入ってくるので「インバウンド HTTPS 」を許可します。

  • インバウンドルール

    タイプ プロトコル ポート範囲 ソース
    HTTPS TCP 443 (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エンドポイントへ通信できるようにしておきます。

接続確認

接続方法もいくつかありますが、今回は単純にマネジメントコンソールから接続する方法を見ておきます。 他の方法については別途記事を書こうと思います…。

今回はSystemsManagerのセッションマネージャーから接続してみます。 もちろん、EC2のページから接続することもできます。 この方法で接続すると ssm-user をいうユーザーで接続します。

  1. 「Systems Manager」へ遷移

  2. 左メニューから「Session Manager」を開く

  3. 「セッションの開始」を選択

  4. 接続したいインスタンスを選択して「セッションを開始する」を選択

今回は「SSM を使って EC2 へアクセスする方法 (privateサブネットの場合)」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!