プライベートサブネットにあるEC2インスタンスを Systems Manager で管理する

2020.06.03

困っていた内容

プライベートサブネットにあるEC2インスタンスがSSMのマネージドインスタンスに表示されない。

どう対応すればいいの?

プライベートサブネットにあるインターネットアクセス出来ないEC2インスタンスをSSMで管理するには、以下の設定が必要です。

  • EC2インスタンスにSSMエージェントがインストールされていること
  • SSMへのアクセスに必要なIAMロールがEC2インスタンスに関連付いていること
  • VPCエンドポイントが設定されている

そこで、今回は、プライベートサブネットにEC2インスタンスを起動し、SSMのマネージドインスタンスへ表示させるまでを試してみました。
EC2インスタンスには Amazon Linux 2 を使用しています。

① EC2インスタンスでSSMエージェントが起動しているか確認する

対象のEC2インスタンスにログイン後、下記コマンドを実行し、SSMエージェントのステータスを確認します。
active (running) となっていればOKです。

$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-05-24 00:35:20 UTC; 1h 1min ago
 Main PID: 3204 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           └─3204 /usr/bin/amazon-ssm-agent
(後略)

他のOSを使用している方はこちらからご確認ください。

もし、SSMエージェントがEC2インスタンスにインストールされていなければ、インストールする必要があります。

② EC2インスタンスにSSM用のロールを割り当てる

AWSマネジメントコンソールで操作していきます。

EC2ダッシュボードから対象のEC2インスタンスを選択し、[アクション]→[インスタンスの設定]→[IAMロールの割り当て/置換]からIAMロールを割り当てます。

ここでIAMロールを割り当てます。
既にIAMロールを作成済みの方は、対象のIAMロールを選択します。IAMロールを作成していない方は、「新しいIAMロールを作成する」をクリックし新規作成します。

私は、ポリシー AmazonSSMManagedInstanceCore のみ追加した IAM ロールを新規作成しました。

AmazonSSMManagedInstanceCore は、インスタンスが Systems Manager サービスコア機能を使用することができるポリシーです。

想定されている動作によって、Systems Manager インスタンスプロファイルのポリシーとして、他のポリシーが必要な場合もあります。 他のポリシーについては下記ドキュメントをご覧ください。

(参考) ステップ 4: Systems Manager の IAM インスタンスプロファイルを作成する

③ SSMのVPCエンドポイントを作成する

VPCダッシュボードのナビゲーションペインから [エンドポイント] を開き、VPCエンドポイントを作成します。

今回は最低限必要な3つのVPCエンドポイントを作成します。

  • com.amazonaws.region.ssm
  • com.amazonaws.region.ec2messages
  • com.amazonaws.region.ssmmessages

まず、com.amazonaws.region.ssm から作成していきます。

「サービスカテゴリ」は「AWS サービス」を選択します。

「サービス名」はフィルターで検索しcom.amazonaws.region.ssmを選択します。 また、「VPC」と「サブネット」を選択します。(「サブネット」は、対象のプライベートサブネットを選択しました。)

「プライベート DNS 名を有効にする」にチェックが入っていることを確認し、セキュリティグループを選択します。または、新規セキュリティグループを作成します。

上記セキュリティグループのインバウンドルールは以下のように設定します。

  • Type: HTTPS 443
  • Source: 対象のVPCのSubnet CIDR

com.amazonaws.region.ec2messages/com.amazonaws.region.ssmmessagesについても同様に追加します。
最終的に以下のようになります。

ここで、1つ目のVPCエンドポイント作成時に以下のエラーが発生したので共有します。

VPCダッシュボードから、対象VPCを選択し、[アクション] から [DNS ホスト名の編集] を開きます。

「DNS ホスト名」に有効化のチェックを入れました。

念の為、[DNS 解決の編集]でも確認しました。これは有効になっていました。

再度、VPCエンドポイントの作成をしてみたところ問題なく作成できました。

④ SSMマネージドインスタンスに表示されているか確認する

Systems Managerコンソールのナビゲーションペインから[マネージドインスタンス]を開き確認します。
マネージドインスタンスの一覧に対象EC2インスタンスが表示されました。

一覧に表示されるまでに時間がかかる場合があります。その場合、少し待って確認します。

参照情報

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