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

所要時間2分
0

特定の Amazon 仮想プライベートクラウド (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 アドレスがあります。

外部 IP アドレスは、VPC 内または VPC の外部から発信されるパブリック IP アドレスです。たとえば、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの Elastic IP アドレスにもパブリック IP アドレスなどは外部 IP アドレスです。また、VPC の NAT ゲートウェイまたはプロキシサーバーの IP アドレスは、外部 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 アカウント内の) 特定のユーザーにバケットへのアクセスを許可する必要がある場合は、条件 ブロックに次のステートメントを含めてください。

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

例:

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

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

関連情報

VPC エンドポイント

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ