2017-05-18 120 views
2

我有一個IAM角色被附加到微服務,以限制基於用戶代理的S3文件夾訪問。微服務父帳戶和存儲桶擁有者是相同的。AWS政策評估

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-test/service/${aws:useragent}/*" 
      ] 
     }, 
     { 
      "Sid": "AllowListingOfUserFolder", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Effect": "Allow", 
      "Resource": [ 
       "arn:aws:s3:::bucket-test" 
      ], 
      "Condition": { 
       "StringLike": { 
        "s3:prefix": [ 
         "service/${aws:useragent}/*" 
        ] 
       } 
      } 
     } 
    ] 
} 

相同的S3存儲桶有一個默認的ACL,其中的帳戶有R/W對象和權限。

由於ACL和IAM策略,我不明白這個策略是如何評估的。例如,具有上述角色的用戶通過用戶代理micro-abucket-test/service/micro-b/new_object發出put_object請求。這是否定的否定?爲什麼?

+0

我查看了那些文檔。仍然不回答是否明確/隱含否認,或允許和爲什麼。 –

+0

政策從來不是一個隱含的東西。根據定義,策略總是*顯式*。 *評估所有*政策。如果有另一項允許超出本政策允許範圍的政策,則此政策沒有任何用處。隱含的唯一缺點是在沒有適用的顯式允許的情況下存在的默認隱式拒絕。 –

回答

1

基於AWS Policy evaluation logic

當一個請求時,在AWS服務決定給定的請求是否應該被允許或拒絕。評估邏輯遵循以下規則:

  1. 默認情況下,所有請求均被拒絕。 (通常,使用帳戶資源的賬戶憑證 的請求始終允許使用 。)
  2. 顯式允許覆蓋此默認值。
  3. 顯式拒絕覆蓋任何允許。

現在,如果我們看一下S3 access policy language documentation

影響 -什麼當用戶請求的特定動作,這可以是允許或拒絕的效果會。 如果您沒有明確授予對(允許)資源的訪問權限,則訪問將被隱式拒絕。您還可以明確拒絕對資源的訪問,爲了確保用戶無法訪問資源,即使其他政策授予訪問權限,也可以這樣做。

現在指定Conditions in S3 policy documentation

訪問策略語言允許您授予權限時指定的條件。 Condition元素(或條件塊)允許您指定策略生效的條件。

從這3個,特別是最後一個,我們可以說,你的情況是「條件允許」,因爲「條件元素,可以指定條件時,政策生效」這裏的您的保單中的條件是「允許」。

編輯: 下面是AWS另一個有趣的博客上"How does authorization work with multiple access control mechanisms?"

每當AWS主要問題到S3的請求,授權決策取決於所有IAM策略,S3存儲聯合策略,以及適用的S3 ACL。

根據最低權限原則,決定將默認 設置爲DENY,並且顯式的DENY總是勝過ALLOW。例如,如果 IAM策略授予訪問對象的權限,S3存儲桶策略 拒絕訪問該對象,並且沒有S3 ACL,則將拒絕訪問 。同樣,如果沒有方法指定允許,那麼 請求將被默認拒絕。只有在沒有方法指定DENY 並且一個或多個方法指定允許請求時才允許。