📝

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

7 min read

AWSのセキュリティ関連の話で、
「EC2やRDSはプライベートサブネットに配置しましょう」
という話がよく出てきますが、プライベートなEC2へのアクセスにはプラスαの作業が必要です。
NATゲートウェイを使用するという方法がありますが、今回は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

ログインするとコメントできます