[小ネタ]プライベートサブネットのEC2でSystems Manager実行に必要なVPCエンドポイントポリシー

はじめに

こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。

先日、プライベートサブネットに起動したEC2インスタンスでAWS Systems ManagerのRun Commandでドキュメントを実行しようとしたところ、ちょっとつまづいてしまったので解決方法をご紹介します。

困ったこと

CloudWatchで監視するWindowsイベントログ

プライベートサブネットに立ち上げたNAT Gateway経由でインターネットに接続出来るEC2に上のブログを参照し、Systems ManagerのRun Commandからドキュメント「AWS-UpdateSSMAgent」を実行したところ以下の403 Forbiddenエラーで実行が失敗しました。

Run Command自体は実行出来るのでSystems Manager周りでは問題ないと思っていたのですが、AWSのドキュメントをみてみたところ以下のS3バケットへのアクセスが必要との記述がありました。

アクセス権限 説明
arn:aws:s3:::aws-ssm-region/* SSM ドキュメントで使用するために必要なモジュールを含む Amazon S3 バケットへのアクセスを提供します。
arn:aws:s3:::aws-windows-downloads-region/* Windows オペレーティングシステムをサポートする SSM ドキュメントの一部で必須です。
arn:aws:s3:::amazon-ssm-region/* SSM エージェント インストールの更新のために必須です。これらのバケットには SSM エージェント インストールパッケージ、および AWS-UpdateSSMAgent ドキュメントとプラグインによって参照されるインストールマニフェストが含まれています。
arn:aws:s3:::amazon-ssm-packages-region/* 2.2.45.0 より前のバージョンの SSM エージェント を使用して、AWS-ConfigureAWSPackage ドキュメントを実行するために必要です。
arn:aws:s3:::region-birdwatcher-prod/* SSM エージェント バージョン 2.2.45.0 以降で使用されるディストリビューションサービスへのアクセスが提供されます。このサービスは、AWS-ConfigureAWSPackage ドキュメントを実行するために使用されます。
arn:aws:s3:::patch-baseline-snapshot-region/* パッチベースラインのスナップショットを含む Amazon S3 バケットへのアクセスを提供します。AWS-RunPatchBaseline と AWS-ApplyPatchBaseline のドキュメントを使用する場合、これは必須です。

regionには、EC2を起動したリージョンのリージョンコードが入ります。

解決方法

VPCにS3のVPCエンドポイントを作成し、以下のポリシーを付与したところ正常に実行できました!(東京リージョンの場合)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::aws-ssm-ap-northeast-1/*",
                "arn:aws:s3:::aws-windows-downloads-ap-northeast-1/*",
                "arn:aws:s3:::amazon-ssm-ap-northeast-1/*",
                "arn:aws:s3:::amazon-ssm-packages-ap-northeast-1/*",
                "arn:aws:s3:::ap-northeast-1-birdwatcher-prod/*",
                "arn:aws:s3:::patch-baseline-snapshot-ap-northeast-1/*"
            ]
        }
    ]
}

Run Commandでもちゃんとステータスも成功になっています!

おわりに

プライベートサブネットに起動したEC2でコマンド実行する場合、主に踏み台サーバなどを経由して実行していたのですが、今回Run Commandのドキュメントを利用してみようとしたところ思わぬところでつまづいてしまいました。プライベートサブネットでEC2を起動したときは、今回のRun Commandの実行に限らずIAMロールやインターネットへの通信だけではなくS3へのアクセスも疑って見る必要がありますね。 この記事がどなたかのお役に立てば幸いです。

最近の格闘技(主にMMA)

日付が変わって10月になりますが、今週末は何と言ってもUFC243があります。メインイベントでは2月に急遽ヘルニアでタイトルマッチがなくなってしまったものの6年間負けなしのロバート・ウィティカー選手と、MMAデビューから17戦無敗のイズラエル・アデサニヤ選手がミドル級王座統一戦を行います。持ち前のタフさで正規王者のウィテカー選手が勝つか、無敗のままアデサニヤ選手がベルトを口寄せしてしまうか見ものです。この重量級の一戦は共に打撃主体の選手なので一瞬も目が離せません。

また、その翌週末も土日でRIZIN.19、UFN、Bellator、そして両国国技館ではONE Championship 100の昼夜興行が行われる予定です。これだけのメジャー団体のイベントが2日の間に集中しており、日本だけでも連日ビッグイベントが行われるため今からコンディションを整えておく必要がありそうです!