VPCエンドポイント経由の通信でaws:SourceIPキーを使ったIAMポリシー制限

AWS運用自動化サービス「Cloud Automator」

こんにちは、技術2課、大阪勤務の全(ちょん)です。

この季節、インフルエンザに加え、今回はコロナウィルスも広がりつつあるので、不安ではありますが、私は花粉症による鼻ムズムズが押し寄せてきています。

今回はVPCエンドポイントが配置された環境でのIAMポリシー制限ではまった内容についてブログに残しました。

要件

実現したい要件は以下の通りとなります。

・IAMユーザー(アクセスキー)の利用を対象リソース(今回はEC2)のみに制限したい
・Private subnetのインターネットアクセスは禁止

検証環境

今回はこのような構成で検証しました。

Public Subnet環境

Public SubnetのEC2①上でAWS CLIを実行すると以下のような経路となります。

上で提示した要件を満たす場合、以下のようなIAMポリシーをIAMユーザーに適用します。

AWS CLIを実行してみます。

試しに、同じIAMユーザーを利用して別EC2からAWS CLIを実行すると以下のようになります。

Private Subnet環境

続いて、Private SubnetのEC2②ですが、AWS CLIを実行するためにはいずれかの対応が必要になります。

1.VPCにNatGatewayをアタッチしルート情報を追記
2.プロキシサーバーを用意し、プロキシを経由させるよう設定変更
3.対応するサービスのVPCエンドポイントを用意

対応を実施する前はAWS CLIを実施することができません。(エラーとなります)

今回は要件に沿うべく3のVPCエンドポイントを用意しました。
構成は以下の通りとなります。

VPCエンドポイントを用意したあとはAWS CLIは正常に動作しました。

経路は以下の通りとなります。

先程と同じようにEC2②のみを限定するIAMポリシーをアタッチし、AWS CLIを実行するとPublic Subnet時とは異なり以下の通りエラーとなります。

更に、VPCエンドポイントを配置したことで、Public SubnetのEC2①でもエラーとなりました。

公式ドキュメントに以下のような記載がありました。

リクエスト実行元が Amazon VPC エンドポイントを使用するホストである場合、aws:SourceIp キーは使用できません。代わりに、aws:VpcSourceIpなどの VPC 固有のキーを使用する必要があります。  https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip

設定するなら以下のようなIAMポリシーとなりますが、特定のリソース(IPアドレス)のみの制限をすることはできないものとなります。

上記ポリシーをアタッチするとEC2①、EC2②ともにコマンドが成功となります。

さらに、この結果からPublic Subnetに配置されているEC2②は以下の経路になることがわかります。

過去に上記経路について調査したブログがありますので参考にリンクを記載しておきます。

S3のVPC Endpoint経由でアクセス出来ているか否かの確認 – Publicサブネット編

最後に

今回の検証でVPCエンドポイントが配置された環境でのIAMポリシー利用について、理解が深まりました。
(そもそもIAMユーザーのアクセスキー情報を渡さなければいいと言うのは内緒で)
IAMは奥が深いサービスなので、まだまだ勉強が必要です。

AWS運用自動化サービス「Cloud Automator」