本記事の内容は 2021年9月現在の情報です。
今回は、プライベートサブネットに配置したEC2インスタンスに対して、VPCエンドポイント経由でセッションマネージャーを使って接続したいと思います。
AWSセッションマネージャーを使ってみる
完成イメージはこんな感じです。

VPCとサブネットの作成
まずは、VPCとサブネットの作成をします。
構成図通りでOKです。
トラフィックはセキュリティグループで管理するので、ネットワークACLはそのままで大丈夫です。
ルートテーブルも、VPCエンドポイント作成時に自動で変更されるのでそのままで大丈夫です。
IAMロールの作成
次に、EC2インスタンス用にSSMエージェントのロールを用意します。
”IAMロールの作成” -> ”EC2”を選択して画面遷移します。


IAMの管理コンソールからEC2を選択し、”AmazonSSMManagedInstanceCore”を選択します。

任意の名前をつけて完了です。あとでEC2に適用します。

VPCエンドポイントの作成
次に、VPCエンドポイントを作成します。
の前に、VPCのDNSを有効にしておきます。
VPC管理コンソールの右上のポチから、”DNSホスト名を編集”を選択し、”有効化”にチェックを入れて変更を保存します。


では、エンドポイントを作成します。
左ペインのエンドポイントを選択します。

作成するエンドポイントは、以下の4つです。
- com.amazonaws.region.ssm
- com.amazonaws.region.ec2messages
- com.amazonaws.region.ssmmessages
- com.amazonaws.region.s3
順番に作成していきます。
エンドポイントの作成を選択します。
サービスカテゴリは”AWSサービス”のままでOKです。
したの検索ボックスに”ssm”と入力すると、com.amazonaws.region.ssmが出てきますので、チェックを入れます。
VPCとサブネットもデフォルトではなく作ったやつに変えます。

”プライベートDNS名を有効にする”にチェックを入れて、セキュリティグループを選択します。
ここで、新しいセキュリティグループを作成します。

新しく作成するセキュリティグループは、以下のルールにします。
- インバウンド:HTTPSのポート443。ソースはプライベートサブネット(下図ではVPCからのトラフィックを全許可にしてしまってます、すいません。。。)
- アウトバウンド:全て許可

作成が完了したらそのセキュリティグループを選びます。
ポリシーはフルカスタムにして、VPCエンドポイントを作成します。

”com.amazonaws.region.ec2messages”と"com.amazonaws.region.ssmmessages"も同様に作成します。
”com.amazonaws.region.s3”だけ作り方がちょっと違います。
サービス名を選ぶところは簡単ですが、タイプをGatewayを選ぶようにしてください。

どのルートテーブルにルートを追加するかを設定します。

今回はメインルートテーブルを選択しましたが、分けて作成したい方はカスタムルートテーブルを作成してそちらを選択してください。
EC2インスタンスの作成
最後に、EC2インスタンスを作成します。
基本的にデフォルトでOKです。
注視するとこだけピックアップします。
IAMロールは、先程作成したIAMロールを設定します。

ユーザーデータは、下記の通り記載します。
#!/bin/bash
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

セキュリティグループも新規に作成します。
EC2インスタンスのセキュリティグループは、以下の通りです。
- インバウンド:VPC内のトラフィックを許可
- アウトバウンド:VPCエンドポイントに向けてHTTPS443を許可

ここまでできたら完了です。
接続テスト
では、接続テストをします。
起動中のEC2インスタンスを指定して、”接続”を選択します。

こんな感じで、コンソール画面が出てくれば成功です。

最後に
というわけで、プライベートサブネット内のEC2インスタンスにVPCエンドポイント経由でセッションマネージャーで接続しました。
これで踏み台なしでEC2インスタンスに入れるようになりました。
IGWもアタッチしてないので、閉じた空間が保証されているかと思います。
ただ、操作をするうえではインターネットから情報を取れるようにすることも望ましいと思います。
そういった時は、NAT gatewayを配置して外と通信できるようにすると良いと思います。
また、インスタンスがWindowsの時は、同じように設定するとPowershellでしか操作できません。
RDPするためのポートフォワーディング機能もあるので、Windowsの方はそちらを試してみると良いかと思います。
ちょっと今回セキュリティグループのところが雑になってしまったところは反省してます。
ポイントとしては、
①VPCエンドポイントはEC2インスタンスからのHTTPSを許可していること
②EC2インスタンスはVPCエンドポイントへのHTTPSが許可していること
です。
以上、AWSセッションマネージャーを使ってみるでした。
AWS学習におすすめの書籍
AWSについて、しっかりと基礎から学びたい、実践的なスキルを身につけたいと考えている方向けに、おすすめの書籍を紹介します。
これらの書籍は、実際にAWSエンジニアとして働く僕が参考にしている書籍です。
AWSエンジニア入門講座――学習ロードマップで体系的に学ぶ
AWSを使いこなすための前提となるITインフラの知識が足りない初学者にとって、どこからどのように学べばよいのかがわかりづらくなっています。そこで本書では、AWS学習サイト運営YouTuberである監修者自身が実サービスの導入で習得しながら体系化した「学習ロードマップ」に沿って、AWSのサービスとIT技術をやさしく解説していきます。
著者が作成した学習ロードマップに沿って、AWSやインフラストラクチャを体系的に学ぶことができます。
付属のロードマップの完成度が高く、学習に迷ったときや復習にも使えます。
これからAWSエンジニアを目指す方や、インフラストラクチャを基礎から学びたい方におすすめです。
Amazon Web Services 業務システム設計・移行ガイド
オンプレミス上に構築された業務システムをAWS上に移行するための「サービスの選定」「ネットワーク設計・構築」「サーバとデータの移し方」「運用・監視体制の構築」など。これまで多くの企業にAWSを導入し、コンサルティングフェーズから実際の設計・開発、運用フェーズまでの全行程に携わってきた著者陣のノウハウを凝縮して、一般的な企業にAWSを導入する際のベストプラクティスをお届けします。
実務を想定した様々なユースケースとそれに対するベストプラクティスを、設計構築から運用まで幅広くカバーして紹介しています。
タイトルからは移行に焦点を当てたように見えますが、僕としては移行に限らずエンタープライズとしてAWSを利用する上で知っておくべきことが記されていると思います。
より実践的な知識やノウハウを身に着けたい方、初学者から一皮むけたい方におすすめです。