特定の VPC エンドポイントまたは IP アドレスを使用して Amazon S3 バケットへのアクセスを制限するにはどうすればよいですか?

最終更新日: 2021 年 12 月 3 日

特定の Amazon Virtual Private Cloud (VPC) エンドポイントまたは特定の IP アドレスからではないトラフィックをすべてブロックしたいと考えています。また、静的ウェブサイトをホストするために Amazon Simple Storage Service (Amazon S3) バケットを使用しています。ウェブサイトは、特定の VPC エンドポイントまたは IP アドレスからアクセスできる必要があります。どうすればできますか?

解決方法

警告: この記事のバケットポリシーの例では、許可された VPC エンドポイントまたは IP アドレス外のリクエストへのアクセスを明示的に拒否します。バケットポリシーを保存する前に、そのバケットポリシーをよく確認してください。

バケットポリシーを使用して、S3 バケットにアクセスできる VPC エンドポイントVPC ソース IP アドレス、または外部 IP アドレスを指定します。

注: VPC ソース IP アドレスは、VPC 内のプライベート IP アドレスです。プライベートアドレスはインターネット経由では到達できず、VPC 内のインスタンス間の通信に使用できます。例えば、プライベート IP アドレスは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのプライベート IP アドレスにすることができます。詳細については、「プライベート IPv4 アドレス」を参照してください。

外部 IP アドレスは、VPC 内または VPC 外からのパブリック IP アドレスです。例えば、外部 IP アドレスは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの Elastic IP アドレスまたはパブリック IP アドレスにすることができます。あるいは、外部 IP アドレスは、VPC の NAT ゲートウェイまたはプロキシサーバーの IP アドレスにすることができます。

以下のバケットポリシーの例は、リクエストが指定された VPC エンドポイント (aws:sourceVpce) からのものでない限り、バケットへのトラフィックをブロックします。

{
  "Id": "VPCe",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VPCe",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": [
            "vpce-1111111",
            "vpce-2222222"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

注:

以下のバケットポリシーの例は、リクエストが指定されたプライベート IP アドレス (aws:VpcSourceIp) からのものでない限り、バケットへのトラフィックをブロックします。

{
  "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": "*"
    }
  ]
}

注: aws:VpcSourceIP 条件でこのポリシーを使用するには、Amazon S3 の VPC エンドポイントをアタッチする必要があります。VPC エンドポイントは、EC2 インスタンスのサブネットのルートテーブルにアタッチされ、バケットと同じ AWS リージョンに存在している必要があります。

以下のバケットポリシーの例は、リクエストが指定された外部 IP アドレス (aws:SourceIp) からのものでない限り、バケットへのトラフィックをブロックします。

{
  "Id": "SourceIP",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SourceIP",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "11.11.11.11/32",
            "22.22.22.22/32"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

警告: これらのバケットポリシーの例では、許可された VPC エンドポイントまたは IP アドレス外のリクエストへのアクセスを明示的に拒否します。バケットポリシーを入力したユーザーであっても、そのユーザーが条件を満たさない場合、バケットへのアクセスが拒否される場合があります。したがって、バケットポリシーを保存する前に、バケットポリシーを注意深く確認してください。誤ってロックアウトされた場合は、誤って全ユーザーの Amazon S3 バケットへのアクセスを拒否してしまいましたを参照してください。アクセス許可を再び付与するにはどうすればよいですか?」をご参照ください。

(同じ AWS アカウント内の) 特定のユーザーにバケットへのアクセスを許可する必要がある場合は、[Condition] (条件) ブロック内に次のステートメントを含めます。

  • AROAEXAMPLEID は許可する IAM ロールのロール ID です。
  • AIDAEXAMPLEID は許可する IAM ユーザーのユーザー ID です。
  • 111111111111 はバケットの AWS アカウント ID で、AWS アカウントのルートユーザーの認証情報を表します

例:

"Condition": {
            "StringNotLike": {
                "aws:userId": [
                    "AROAEXAMPLEID:*",
                    "AIDAEXAMPLEID",
                    "111111111111"
                ]
            }
        }

特定の IAM ロールへのアクセスを許可する方法の詳細については、「Amazon S3 バケットアクセスを特定の IAM ロールに制限する方法」をご参照ください。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?