2016-08-11 100 views
0

我目前有一个名为mets-logos的桶。它目前有这个桶策略,它允许任何人使用GetObjects。AWS S3桶策略限制获取一组IP地址?

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "AddPerm", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mets-logos/*" 
     } 
    ] 
} 

我希望只允许来自IP白名单的GetObjects。以下是我试过,但它不工作(外IP仍然可以得到对象)

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "AddPerm", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mets-logos/*", 
      "Condition": { 
       "IpAddress": { 
        "aws:SourceIp": [ 
         "100.77.17.80/32", 
         "100.77.26.210/32", 
        ] 
       } 
      } 
     } 
    ] 
} 

方的问题:如果我的桶的政策是正确的,我需要等待AWS来反映这种变化,还是应该它会立即反映出来吗?

+0

你试图阻止一个范围或只是这2个IP? – error2007s

+0

我只允许这两个IP。没有其他人 –

回答

1

尝试添加拒绝,但有例外一起,就像这样:

{ 
    "Version":"2012-10-17", 
    "Id":"S3PolicyId1", 
    "Statement": 
    [ 
     { 
      "Sid"  : "IPAllow", 
      "Effect" : "Deny", 
      "Principal": "*", 
      "Action" : "s3:GetObject", 
      "Resource" : "arn:aws:s3:::mets-logos/*", 
      "Condition": { 
       "IpAddress" : { 
        "aws:SourceIp": "0.0.0.0/0" 
       }, 
       "NotIpAddress": { 
        "aws:SourceIp": "100.77.17.80/32" 
       }, 
       "NotIpAddress": { 
        "aws:SourceIp": "100.77.26.210/32" 
       } 
      } 
     } 
    ] 
} 

此明确拒绝访问的所有IP地址,但允许您白名单进行GetObject两个地址。

我可以看到,如果您在IAM凭据下访问S3,但您希望进一步控制存储桶级别的访问权限,这将非常有用。此策略中的Deny将覆盖现有的IAM用户策略。


要回答您的问题,策略更改会立即生效。

0

访问S3存储桶受S3存储桶策略和连接到访问存储桶的主体的IAM访问策略的管理。

因此,IAM访问策略可能会“推翻”S3存储桶策略。

你的S3存储桶政策说:“允许,如果IP是这样的,等等”。但是桶策略中没有任何内容表示“不允许任何人”。

如果您访问存储桶的IAM用户/角色允许存储桶(或*)上的s3:GetObject,则该策略允许他们访问存储桶。

如果IAM用户/角色没有明确的“允许”“s3:GetObject”(或“s3:*”),那么您的策略将起作用。

为防止用户/角色被允许访问存储桶,被限制为IP地址,则需要将策略更改为“拒绝”不在允许的IP地址中的任何人。在桶策略中明确的“拒绝”将否决IAM用户/角色策略中的任何“允许”。

试试这个政策。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "DenyAllButFromAllowedIp", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mets-logos/*", 
      "Condition": { 
       "NotIpAddress": { 
        "aws:SourceIp": [ 
         "100.77.17.80/32", 
         "100.77.26.210/32", 
        ] 
       } 
      } 
     } 
    ] 
}