まえがき

cloudpack 木村(富)です。

「AWS Systems Manager」の機能の一つである「セッションマネージャー」でEC2へ接続する機会が増えました。
その際に接続できなかったりして戸惑うことがあります。

その中でもセキュリティ要件が高い、AWS Systems Managerでプライベートサブネットに作成したEC2インスタンスへ接続する方法を記載します。
私も接続しようとしてハマってしまいました。

※パブリックサブネットのEC2インスタンスとプライベートサブネットのEC2インスタンスでは接続する最低限必要な要件が異なります。

内容

AWS Systems Managerでプライベートサブネットに作成したEC2インスタンスへ接続する手順を記載いたします。
今回は元々セッションマネージャーが動作する前提条件を満たしている「Amazon Linux2」を搭載したEC2を例に記載いたします。

Amazon Linux 2でパブリックサブネットのEC2インスタンスを作成するとSSM Agentがインストールされています。
そのため、以下のIAMポリシーでIAMロールを作成し、EC2インスタンスに追加のみでAWS System Managerに接続可能になります。

AmazonSSMManagedInstanceCore

以下参照ドキュメントになります。

ハイブリッドインスタンスは Systems Manager API オペレーションと通信するため、ハイブリッドアクティベーションで指定された AWS Identity and Access Management (IAM) サービスロールを使用します。このサービスロールは、Session Manager でオンプレミスマシンに接続するために必要な許可が含まれている必要があります。サービスロールが AWS 管理ポリシー AmazonSSMManagedInstanceCore を含む場合、Session Manager に必要なアクセス許可は既に付与されています。

ステップ 1: Session Manager の前提条件を満たす

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-prerequisites.html

SSM Agent がプリインストールされた Amazon Machine Images (AMIs)

※AMIに予めAWS Systems Manager エージェントがプリインストールされている一覧になります。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ami-preinstalled-agent.html

手順

パブリックサブネット/プライベートサブネット共通の手順

1.IAMロールを作成する

  • IAMロール作成画面より、[ AWSのサービス ]、[ EC2 ]を選択して[ 次へ ]を押下。

  • IAMポリシー[ AmazonSSMManagedInstanceCore ]を検索して選択後[ 次へ ]を押下。

2.EC2へIAMロールをアタッチする

  • ロール名を任意につけて[ ロールを作成 ]を押下。

※ここでは[ iretmedia-AmazonSSMManagedInstanceCore ]としています。

  • EC2サービスにて[ アクション ]→[ セキュリティ ]→[ IAMロール変更 ]を押下。

  • 上記で作成したIAMロールを選択して[ IAMロールの更新 ]を押下。

3.インストール確認

  • Amazon Linux 2 以外のインスタンスではSSM Agentがインストールされていないものもある為、インストール確認を実施してください。

ステータス確認コマンド
Linux系

sudo systemctl status amazon-ssm-agent

Windows PowerShell

Get-Service AmazonSSMAgent

プライベートサブネットのみ必要な手順

ここからはプライベートサブネットに作成されたEC2に接続する場合の追加手順を記載します。
パブリックサブネットに作成されたEC2の場合は、以下で紹介する「4.VPCサービスよりエンドポイントを作成する」の手順をスキップし、「動作確認」へ進んでください。

プライベートサブネットのEC2インスタンスをAWS Systems Managerで接続しようとすると上記IAMロール追加だけでは接続できません。
接続するには下記3つのVPCエンドポイントを作成する必要があります。
com.amazonaws.ap-northeast-1.ssm
com.amazonaws.ap-northeast-1.ssmmessages
com.amazonaws.ap-northeast-1.ec2messages

Systems Manager を使用してインターネットアクセスなしでプライベート EC2 インスタンスを管理できるように、VPC エンドポイントを作成するにはどうすればよいですか?

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/

4.VPCサービスよりエンドポイントを作成する

  • VPCサービスにて[ エンドポイント ]を選択後、[ エンドポイントを作成 ]を押下。

  • エンドポイントを作成します。設定後に [ エンドポイントを作成 ]を押下。

環境に合わせて設定してください。

例として以下を設定します。

・名前タグ = [ ※本記事では「 iretmedia-com.amazonaws.ap-northeast-1.ssm 」とします ]
・サービスカテゴリ = AWSのサービス
・サービス = com.amazonaws.ap-northeast-1.ssm
・VPC = 接続EC2インスタンスに設定されているVPCを選択
・サブネット = 接続EC2インスタンスのサブネットAZを選択
・サブネットID = 接続EC2インスタンスのプライベートサブネットを選択
・IPアドレスタイプ = [ ※本記事では「 IPv4 」とします ]
・セキュリティグループ = [ 任意のセキュリティグループを選択してください ]
 ※注意:セキュリティグループのインバウンドに以下の要件が必要です。
- タイプ:HTTPS
- プロトコル:TCP
- ポート範囲:443
- ソース:ご使用VPCのCIDR (※例として10.0.0.0/16など)
・ポリシー = [ ※本記事では「 フルアクセス 」とします ]

上記と同様に以下のVPCエンドポイントを作成してください。
異なる箇所はサービス部分のみで他は同じ設定になります。
com.amazonaws.ap-northeast-1.ssmmessages
com.amazonaws.ap-northeast-1.ec2messages

動作確認

プライベート環境でVPCエンドポイントを作成後AWS Systems Managerにて接続できるかどうか確認してください。
※VPCエンドポイントをの作成には少し時間がかかります。(計測したところ4分程度かかりました)

AWS Systems Manager サービス→セッションマネージャー→セッションの開始→ターゲットインスタンスを選択して[ セッションを開始する ]を押下。

その他

他にNATゲートウェイを使用するという方法があります。
しかし、AWS Systems Managerへの接続に関しては推奨されておりません。
NATゲートウェイもVPCエンドポイントも存在するだけで使用料金がかかります。
NATゲートウェイの転送量はVPCエンドポイントよりも高くなっております。

NAT ゲートウェイを介したほとんどのトラフィックがインターフェイス VPC エンドポイントをサポートする AWS のサービスに送信される場合、サービス用のインターフェイス VPC エンドポイントを作成します。コスト削減の可能性を確認するには、「インターフェイス VPC エンドポイントの料金の詳細」を参照してください。

NAT ゲートウェイのデータ転送料金を削減するにはどうすればよいですか?

https://aws.amazon.com/jp/premiumsupport/knowledge-center/vpc-reduce-nat-gateway-transfer-costs/

以上になります。
ご覧いただきありがとうございました。