Systems Manager Run Command をプライベートサブネット上の EC2インスタンスに対して実行する手順と注意点

Systems Manager Run Command(ランコマンド) をプライベートサブネット上の EC2インスタンスに対して実行します。VPCエンドポイントを利用します。
2019.09.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

表題の内容について、手順と注意点(私の誤ち)をブログに書き起こしたいと思います。

目次

 

構成図

構成図は下記のとおりです。

  • プライベートサブネット上に EC2インスタンスを作成します。
  • Systems Manager Run Command を VPCエンドポイント経由で EC2インスタンスに対して実行します。
  • コマンド出力を VPCエンドポイント経由で S3 or CloudWatch へ保存します。

 

手順

既に VPC, Private Subnet は作成されている前提で下記手順で進めていきます。

  1. EC2インスタンス設定
  2. VPCエンドポイント作成
  3. Run Command 実行

 

1. EC2インスタンス設定

本記事では Windows Server 2016の EC2インスタンスを作成します。 セキュリティグループグループのインバウンド、特に許可必要ありません。 作成後の設定を書いていきます。

▼ SSM エージェントのインストール

今回は SSMエージェントがプリインストールされている AMIを利用するため省略します。 インストールされていない場合は SSMエージェントの使用 などを参考にインストールしてください。

▼ IAMロールの割当て

Systems Manager 用のIAMロールを割当てます。ロールには AWS管理ポリシーである AmazonEC2RoleforSSM をアタッチします。 (画像はカスタムメトリクス目的で CloudWatchAgentServerPolicyも割当ててます)

 

2. VPCエンドポイント作成

リージョンを ap-northeast-1 として進めます。 少し多いですが、下記の数だけ VPCエンドポイントを作成する必要があります。

  • com.amazonaws.ap-northeast-1.ssm
  • com.amazonaws.ap-northeast-1.ec2messages
  • com.amazonaws.ap-northeast-1.ssmmessages
  • com.amazonaws.ap-northeast-1.s3 もしくは com.amazonaws.ap-northeast-1.logs

以降でエンドポイントを作成していきますが、事前にセキュリティグループを作成しておきましょう。 プライベートサブネットのアドレスからの HTTPS通信を許可するものです。

▼ com.amazonaws.ap-northeast-1.ssm

マネジメントコンソールの VPC→エンドポイント から エンドポイントの作成 を選択します。

...ssm にチェックを入れます。

対象のインスタンスがある VPC・サブネットを選択します。

プライベートDNS名を有効にする設定とします。セキュリティグループは事前に作成したものにチェックを入れます。

エンドポイントの作成 を選択します。以上が 1 エンドポイントの作成ステップです。

▼ com.amazonaws.ap-northeast-1.ec2messages

同様のステップで作成しましょう。

▼ com.amazonaws.ap-northeast-1.ssmmessages

同様のステップで (略)

▼ com.amazonaws.ap-northeast-1.s3 もしくは com.amazonaws.ap-northeast-1.logs

Run Command でコマンドの出力先を指定する場合に必要となるエンドポイントです。 保存先に CloudWatch logs を選択する場合は、同様のステップで作成しましょう。

以下、保存先に S3を選択する場合の手順。

・適切なVPCを選択。プライベートサブネットに関連付けられているルートテーブルを選択。

・ポリシーはフルアクセスを選択。

 

3. Run Command 実行

試しに ipconfig を実行して結果を S3, CloudWatch logs に格納してみましょう。

コマンドの実行 を選択します。

コマンドのタイプに AWS-RunPowerShellScript 、コマンドに ipconfig を入れます。

ターゲットに対象の EC2インスタンスが表示されています。チェックします。

今回は両方に出力します。出力先のS3, CloudWatch 両方にチェックを入れて 実行 しましょう。

成功を確認できたら、それぞれコマンド出力を確認してみましょう。

▼ CloudWatch logs

▼ S3

 

おわりに (注意点)

注意点は 「コマンド出力用に用いる S3, CloudWatch logs の VPCエンドポイントを忘れない」 ことです。

分かってしまえば「それだけか・・・」といった感じですが、 私が一度試したときは S3, CloudWatch logs のVPCエンドポイント作成をしていなかったために、

  • Systems Manager Session Manager は正常に利用できる
  • さらに Systems Manager Run Command の実行対象として表示される・選択できる
  • でも実行がタイムアウトする

といった現象に陥っていました。

この記事が少しでもどなたかのお役に立てば幸いです。

 

参考