2

我已经生成了以下策略,但它仍然允许所有其他 ec2 实例访问我的存储桶。我应该对此政策做出哪些改变?我想要的是我的存储桶只能被我提到的实例访问,而不是任何其他实例

{
  "Id": "Policy1507871740101",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1507871738318",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket/*,
      "Principal": {
        "AWS":"arn:aws:ec2:region:userid:instance/instanceid"
      }
    }
  ]
}
4

2 回答 2

1

您不能指定实例 ID,但可以在 S3 策略中指定 IP 地址。

但是,您还有另一个问题。如果您的 EC2 实例已经可以访问 S3,那么您要么已将存储桶设为公开,要么已为​​实例分配了授予权限的角色。首先回顾一下。首先找到您的安全漏洞。

以下是 S3 使用 IP 地址授予或拒绝访问的示例策略:

    {
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
         "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
      } 
    } 
  ]
}
于 2017-10-13T17:03:15.520 回答
0

只是为了更清楚:如前所述,您应该:

  • 删除存储桶策略
  • 改为创建 EC2 角色
  • 将该角色附加到您想要访问的实例
  • 编辑角色策略

示例如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::bucket_name/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::bucket_name"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::"
        }
    ]
}

随意编辑第一条语句以添加/删除必要的操作。

于 2017-10-13T20:42:23.113 回答