仅限访问特定ec2实例的s3存储桶

时间:2017-10-13 05:22:18

标签: amazon-s3 amazon-ec2 s3-bucket

我已经生成了以下策略,但它仍然允许所有其他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"
      }
    }
  ]
}

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分: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:::"
        }
    ]
}

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