限制S3存储桶对VPC的访问

Lel*_*uge 19 policy amazon-s3 amazon-web-services

我正在尝试应用以下策略以限制my_bucket对特定VPC的访问.

  1. 当我尝试将其应用为存储桶策略时,我得到了一个Policy has an invalid condition key - ec2:Vpc.我该如何纠正?

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Deny",
         "Principal": {
            "AWS": "*"
         },
         "Action":"*",
         "Resource":"arn:aws:s3:::my_bucket/*",
         "Condition":{
            "StringNotEquals":{
               "ec2:Vpc":"arn:aws:ec2:region:account:vpc/vpc-ccccccc"
            }
         }
      }
   ]
}

Run Code Online (Sandbox Code Playgroud)

Edd*_*die 37

我刚刚开始工作了.我不得不做两件事.1)在S3存储桶上创建存储桶策略,2)创建"VPC端点"

我的S3存储桶策略看起来像这样(当然放入您的存储桶名称和VPC标识符):

{
    "Version": "2012-10-17",
    "Id": "Policy1234567890123",
    "Statement": [
        {
            "Sid": "Stmt1234567890123",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my_bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-12345678"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

S3存储桶还具有存储桶策略之外的一些权限,以允许从AWS控制台进行访问.执行上述操作无法访问.要获得访问权限,我还必须转到AWS控制台 - > VPC - >端点,然后创建端点.我将新创建的端点附加到该帐户目前唯一的路由策略(已连接所有子网),并且我使用了默认策略

{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

创建端点后,我能够使用wget正确的URL 从我的VPC中的任何EC2实例读取S3存储桶.我仍然可以从AWS控制台访问存储桶.但是如果我尝试从VPC外部访问URL,我会被禁止403.因此,对S3存储桶的访问仅限于单个VPC,就像您要查找的那样.

这显然是一个新功能.有关更多信息,请参阅此AWS博客条目.

  • 谢啦!写得很好,正是我需要的。愿您的牛排永远做得完美。 (2认同)

JJC*_*JJC 8

有两件事让我印象深刻,并且可能对埃迪的精彩回答有所帮助:

首先,您将无法在 S3 AWS 控制台中查看您的存储桶(甚至在设置上述策略后修改其策略),除非您还授予 AWS 用户操作存储桶的权限。 为此,请找到您的 AWS 帐号(显示在此处的右上角),然后将此语句添加到存储桶策略语句列表中:

    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::YOUR_AWS_ACCOUNT_NUMBER:root"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::my_bucket",
            "arn:aws:s3:::my_bucket/*"
        ]
    },
Run Code Online (Sandbox Code Playgroud)

其次,如果您有多个 VPC(例如 vpc-XXXXXX 和 vpc-YYYYYY)可供访问,则 Eddie 的答案中的语句需要调整为如下所示(请注意“Allow”、“StringEquals”和 sourceVpc 列表)价值观:

... 
"Effect": "Allow",
...
"Condition": {
    "StringEquals": {
        "aws:sourceVpc": [
            "vpc-XXXXXXXX",
            "vpc-YYYYYYYY"
        ]
    }
Run Code Online (Sandbox Code Playgroud)