はじめに
AWSのよくある構成として、プライベートサブネットにEC2を配置し、SSM接続をするケースがよくあると思ます。
よくありますが、設定漏れがあったりして意外と時間を取られたりするので、備忘録として残しておこうと思います。
内容
ざっくり下記の2項目について試してみようと思います。
- プライベートサブネットに配置したEC2へSSM接続
- SSM接続に必要なリソースを消してみてどんなエラーが出るか確認
EC2のインスタンスタイプは無料枠、OSはデフォルトでSSMエージェントが入っているAmazonLinux2023を利用します。
事前知識
リソースの構築に入る前にそもそもSSM接続とは何かについてまとめます。
SSM接続とは
VPC環境において、EC2に接続する方法の1つです。
SSHポートを開放せずに接続ができるため、鍵の管理が不要でよりセキュアにEC2に接続することができます。
プライベートサブネットにおいてEC2に接続したい場合は下記の準備が必要になります。
- EC2にSSMエージェントがインストールされており、実行中であること
- EC2に「AmazonSSMManagedInstanceCore」の許可を含むロールがアタッチされていること
- 以下3つのエンドポイントがプライベートサブネットに存在すること
- ec2messages
- ssm
- ssmmessages
- 上記エンドポイントにEC2が接続するためのアウトバウンドルール
詳しくは👇の公式で確認できます。
環境構築
早速構築に取り掛かっていきます。
👇の順番で進めます。
- VPC周りの構築
- EC2にアタッチする用のロール作成
- エンドポイントの作成
- EC2の作成
- SSM接続!!!
VPC周りの構築
マネージドコンソールから「VPC」>「VPCを作成」から下記情報でVPCを作成します。
作成したVPCの「リソースマップタブ」に作成したサブネットが存在していることが確認できます。
また、VPCエンドポイントを作成するにあたって「DNSホスト名を有効化」を有効にする必要があります。
作成したVPCを選択し、「アクション」>「VPCの設定を編集」をクリックし、該当箇所にチェックを入れ保存します。
EC2にアタッチするIAMロールの作成
次にEC2にアタッチする用のIAMロールを作成します。
マネジメントコンソールから「IAM」>「ロール」>「ロールの作成」からIAMロールを作成していきます。
ステップ1:信頼されたエンティティを選択で下記情報を入力します
- 信頼されたエンティティタイプ
- AWSのサービス
- ユースケース
- サービスまたはユースケース:EC2
- ユースケース:EC2
ステップ2:許可を追加で下記情報を入力します
- 許可ポリシー
- ポリシー名:AmazonSSMManagedInstanceCore
- 許可の境界を設定-オプション
- 許可の境界なしでロールを作成
環境によっては境界を指定する必要があるケースもあると思うので、確認してください。
ステップ3:名前、確認、および作成で下記情報を入力します
ロールの一覧に作成したロールが存在することを確認します
エンドポイントの作成
続いてVPCエンドポイントを作成していきます
必要なエンドポイントは上述した3つになります
- ec2messages
- ssm
- ssmmessages
はじめに作成するエンドポイント用のセキュリティグループを作成します。
マネジメントコンソールから「VPC」>「セキュリティグループ」>「セキュリティグループを作成」から下記情報で作成します。
- 基本的な詳細
- セキュリティグループ名:任意のセキュリティグループ名
- 説明:任意の説明
- VPC:先ほど作成したVPCを指定
- インバウンドルール
- HTTPS、0.0.0.0/0
- アウトバウンドルール
- 設定なし
セキュリティグループ一覧に作成したセキュリティグループが存在することを確認します。
セキュリティグループの作成が確認できたので、VPCエンドポイントの作成を行います。
マネジメントコンソールから「VPC」>「エンドポイント」>「エンドポイントの作成」からエンドポイントを作成していきます。
ec2messages
- エンドポイントの設定
- 名前タグ:任意のエンドポイント名
- タイプ:AWSのサービス
- サービス
- サービス名:com.amazonaws.ap-northeast-1.ec2messages
- ネットワーク設定
- VPC:先ほど作成したVPC
- DNS名を有効化:✅を入れる
- DNSレコードのIPタイプ:IPv4
- サブネット
- サブネット:先ほど作成したプライベートサブネットを指定
- IPアドレスタイプ:IPv4
- セキュリティグループ
- グループID:先ほど作成したセキュリティグループ
- ポリシー
- フルアクセス ※必要に応じて設定してください
ssm
サービス以外は同じ情報で作成します。差異がある箇所のみ記載します。
- サービス
- サービス名:com.amazonaws.ap-northeast-1.ssm
ssmmessages
こちらも同様です。差異がある箇所のみ記載します。
- サービス
- サービス名:ssmmessages
エンドポイント一覧から対象のエンドポイントが作成されたことを確認します。
ステータスがすべて使用可能であることも確認してください
EC2の作成
最後に接続対象のEC2を作成していきます
その前にEC2用にもセキュリティグループの用意が必要なので作成していきます。
マネジメントコンソールから「VPC」>「セキュリティグループ」>「セキュリティグループを作成」から下記情報で作成します。
- 基本的な詳細
- セキュリティグループ名:任意のセキュリティグループ名
- 説明:任意の説明
- VPC:先ほど作成したVPCを指定
- インバウンドルール
- 設定なし
- アウトバウンドルール
- HTTPS、0.0.0.0/0
セキュリティグループ一覧から、作成したセキュリティグループが存在していることを確認します。
それではEC2の作成に取り掛かります。
冒頭に記載しましたが、OSはSSMエージェントがプリインストールされているAmzon Linux2023を利用します。
SSMエージェントがプリインストールされているかは下記の記事を参考に確認できます。プリインストールされていない場合は別途SSMエージェントのインストール&起動が必要です。
マネジメントコンソールから「EC2」>「インスタンス」>「インスタンスを起動」から下記の情報でEC2を作成します。
※設定項目が多いため主要な箇所のみを記載します。
名前とタグ
- 名前:任意の名前
アプリケーションおよびOSイメージ(Amazonマシンイメージ)
- Amazonマシンイメージ(AMI):Amazon Linux 2023 kernel-6.1 AMI
インスタンスタイプ
- インスタンスタイプ:t3.micro
キーペア(ログイン)
- キーペア名:キーペアなしで続行(推奨されません)
SSH接続が必要な場合やはキーペアの作成を推奨します
ネットワーク設定
- VPC:先ほど作成したVPC
- サブネット:先ほど作成したサブネット
- パブリックIPの自動割り当て:無効化
- ファイアウォール(セキュリティグループ):既存のセキュリティグループ
- 共通のセキュリティグループ:先ほど作成した、EC2用のセキュリティグループ
高度な詳細
- IAMインスタンスプロフィール:先ほど作成したEC2用のIAMロールを選択
インスタンスの起動を押下後、下記の表示あがあれば作成は成功です。
インスタンス一覧に作成したEC2が存在することを確認し、ステータスチェックがOKになるまで待機します。
しばらくたつとステータスがOKになったのでこれにてEC2の構築は完了です
SSM接続
それではリソースの構築が完了したので、EC2にSSM接続を実施してみます
マネジメントコンソールから「EC2」>「インスタンス」> 作成したEC2を選択します
右上のほうにある「接続」をクリックします
下記のキャプチャの画面に遷移するので、「セッションマネージャー」タブ >「接続」をクリックして接続してみます
接続ボタンがアクティブではない場合、何らかの設定ミスがないか確認してみてください。
まれに設定不備がなくてもアクティブになるまでに時間がかかるケースもあるようです。
👇のキャプチャのような画面に遷移できればSSM接続は成功です
終わりに
今回はプライベートサブネットのEC2にSSM接続する内容を書いてみました。
この記事がどなたかの一助になれば幸いです。