VPC エンドポイント経由かつ特定のEC2インスタンスからのみアクセスを許可する Amazon S3 のバケットポリシーの設定方法はありますか?
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていること
Amazon S3 を使用しています。EC2 インスタンスからは VPC エンドポイント経由でアクセスをしています。特定の EC2 インスタンスからのみアクセスを許可する要件を叶えたいです。どのようにバケットポリシーを設定すればいいでしょうか?
どう解決すればいいの?
Amazon S3 のバケットポリシーにて、EC2 インスタンス ID を直接指定することはできません。
一方で、EC2 インスタンスのプライベート IP アドレスを指定することは可能です。
バケットポリシーに下記を指定してください。
{ 
  "Id": "VpcSourceIp", 
  "Version": "2012-10-17", 
  "Statement": [ 
    { 
      "Sid": "VpcSourceIp", 
      "Action": "s3:*", 
      "Effect": "Deny", 
      "Resource": [ 
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET", 
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" 
      ], 
      "Condition": { 
        "NotIpAddress": { 
          "aws:VpcSourceIp": [ 
            "10.1.1.1/32", 
            "172.1.1.1/32" 
          ] 
        } 
      }, 
      "Principal": "*" 
    } 
  ] 
}
なお、EC2 インスタンスのプライマリプライベート IP アドレスは不変です。
Elastic Network Interface - Amazon Elastic Compute Cloud
プライマリネットワークインターフェイス
各インスタンスには、プライマリネットワークインターフェイスと呼ばれるデフォルトのネットワークインターフェイスがあります。プライマリネットワークインターフェイスをインスタンスからデタッチすることはできません。追加のネットワークインターフェイスを作成し、アタッチできます。使用できるネットワークインターフェイスの最大数はインスタンスタイプによって異なります。詳細については、各インスタンスタイプのネットワークインターフェイスあたりの IP アドレス数を参照してください。
参考資料
AWS グローバル条件コンテキストキー - AWS Identity and Access Management
aws:VpcSourceIp
このキーを使用して、リクエストの作成元の IP アドレスと、ポリシーで指定した IP アドレスを比較します。ポリシーでは、リクエストが指定された IP アドレスから送信され、VPC エンドポイントを経由する場合にのみキーが一致します。
可用性 – このキーは、リクエストが VPC エンドポイントを使用して行われた場合にのみリクエストコンテキストに含まれます。
データ型 – IP アドレス
値タイプ — 単一値











