📝

プライベートな EC2 に SSM セッションマネージャーで接続してみた

2021/11/08に公開

AWS のセキュリティ関連の話で、
「EC2 や RDS はプライベートサブネットに配置しましょう」
という話がよく出てきますが、プライベートな EC2 へのアクセスにはプラス α の作業が必要です。
今回は SSM セッションマネージャーを使用したプライベート接続をやってみたいと思います。

構成図

軽く説明

やることは結構シンプルです。

  1. EC2 にアタッチする IAM ロールを作成する
  2. プライベートサブネットに EC2 インスタンスを構築する
  3. VPC にプライベートリンクを設置する
  4. SSM セッションマネージャーで EC2 インスタンスに接続する

前提

  • VPC は 10.0.0.0/16 で作成済み

  • DNS ホスト名の解決を「有効」に変更しておく (デフォルトでは無効)

  • プライベートサブネットは 10.0.10.0/24 で作成済み

1. EC2 にアタッチする IAM ロールを作成する

まずは EC2 用の IAM ロールを作成します。
マネジメントコンソールから「iam」と検索して、「IAM」を選択します。

IAM ダッシュボードから IAM ロールの数字をクリックします。

ロールの画面から「ロールを作成」をクリックします。

ユースケースの選択で「EC2」を選択して次に進みます。

ポリシーの検索欄に、「AmazonSSMManagedInstanceCore」と入力し、表示されたポリシーを選択して次に進みます。

タグが必要な場合はタグ付けします。
今回はタグなしで次に進みます。

任意のロール名を入力し、「ロールの作成」をクリックします。

これで EC2 用の IAM ロールができました。

2. プライベートサブネットに EC2 インスタンスを構築する

続いて EC2 インスタンスを構築します。
マネジメントコンソールから「ec2」と検索して、「EC2」を選択します。

EC2 ダッシュボードから「インスタンスを起動」をクリックします。

AMI は Amazon Linux 2 AMI (HVM) を選択します。

インスタンスタイプは t2.micro を選択します。

インスタンスの詳細の設定では、ネットワーク、サブネット、IAM ロールを編集します。
・ネットワーク: 作成済みの VPC
・サブネット: 作成済みのプライベートサブネット
・IAMロール: 1 で作成した EC2 用の IAM ロール

上記以外はデフォルトのまま次に進みます。

ストレージの設定はデフォルトのまま次に進みます。

タグは任意のタグを付けます。
今回は Name タグに SSMTest と付けました。

セキュリティグループはデフォルトのグループを選択します。
セキュリティグループは特にインバウンドルールは必要ありませんが、アウトバウンドで HTTPS を許可しておく必要があります。
今回はデフォルトのグループなのでアウトバウンドは全許可です。

最後に設定を確認して「起動」をクリックします。

セッションマネージャーでアクセスするため、キーペアは不要です。

これでプライベートな EC2 を構築できました。

この時点ではまだ接続できません。

3. VPC にプライベートリンクを設置する

これが大きなポイントとなる作業だと思いますが、作業自体は簡単です。
まずは VPC コンソールに移動しましょう。

プライベートリンクにはセキュリティグループをアタッチする必要があるため、先にセキュリティグループを作成します。

「セキュリティグループを作成」をクリックします。

以下のように設定します。
・セキュリティグループ名: SSNTest
・説明: SSMTest
・VPC: 作成済みの VPC
・インバウンドルール: HTTPS を VPC CIDR で許可
・アウトバウンドルール: デフォルトの全許可のまま

これでプライベートリンク用のセキュリティグループができました。

続いて、サイドバーから「エンドポイント」をクリックします。

「エンドポイントの作成」をクリックします。

今回作成するエンドポイント (プライベートリンク )は以下の 3 つです。
・com.amazonaws.ap-northeast-1.ssm
・com.amazonaws.ap-northeast-1.ssmmessages
・com.amazonaws.ap-northeast-1.ec2messages

まずは検索欄に「ssm」と入力し、「com.amazonaws.ap-northeast-1.ssm」から作成していきます。

VPC は作成済みの VPC を選択します。
サブネットは複数選択してもよいのですが、その分課金されるので、今回は EC2 インスタンスを構築したプライベートサブネットのみを選択します。

プライベート DNS 名の有効はデフォルトでチェックがついているので、そのままにしておきます。

セキュリティグループは作成済みのプライベートリンク用のグループを選択します。

ポリシーでアクセス制御もできますが、今回はフルアクセスのままにしておきます。

識別のために Name タグに ssm とつけました。
最後にエンドポイントの作成をクリックします。

これで1つ目のエンドポイントができました。

作成直後は「保留中」となりますが、しばらくすると「使用可能」に変わります。

あとは残りのエンドポイントも同様の手順で作成します。
エンドポイントの選択以外は同様の手順なので、選択箇所以外は割愛します。

3 つ作成して使用可能な状態になった状態です。

これでプライベートリンクの作成も完了です。

4. SSM セッションマネージャーで EC2 インスタンスに接続する

それでは EC2 インスタンスにセッションマネージャーで接続できるか試してみましょう。
EC2 インスタンスのコンソールから「接続」をクリックします。

「セッションマネージャー」のタブから「接続」をクリックします。

無事つながり、コマンドを打てる状態になりました。

これでプライベートサブネットに構築したインスタンスに、セッションマネージャーを利用して接続できるようになりました!

まとめ

今回はプライベートな EC2 に SSM セッションマネージャーで接続する方法を紹介しました。
セキュリティを考慮してサーバーはプライベートに構築したいけど、サーバーに直接アクセスできるようにもしたい、といった場合などに利用できるのではないかと思います。
参考になれば幸いです。

注意

プライベートリンクは放っておくと時間単位でどんどん課金されますので、検証などが済んだら削除しましょう。
参考までに今回使用した作成したリソースは以下の通りです。
・IAM ロール
・EC2 インスタンス
・セキュリティグループ
・プライベートリンク ×3

参考資料

Discussion