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

最終更新日: 2021 年 4 月 19 日

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

解決方法

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

注: 外部 IP アドレスは、VPC 内または VPC 外からのパブリック IP アドレスです。例えば、外部 IP アドレスは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの Elastic 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: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 アカウントのルートユーザーの認証情報を表します

例:

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

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


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


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