2016-08-11 94 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", 
        ] 
       } 
      } 
     } 
    ] 
}