2016-02-06 69 views
0

我想定義一個限制訪問特定用戶的S3存儲桶級策略(例如使用Cognito ID)。爲什麼在桶策略中不能使用如下所示的Condition塊?某些「條件」在AWS S3桶策略中不允許?

{ 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Principal": "*", 
     "Condition": { 
      "StringEquals":{ 
       "cognito-identity.amazonaws.com:aud":[ 
        "us-east-1:12345678-abcd-abcd-abcd-123456790ab", 
        "us-east-1:98765432-dcba-dcba-dcba-123456790ab" 
       ] 
      } 
     }, 
     "Action":"s3:ListBucket", 
     "Resource":"arn:aws:s3:::my-bucket-name" 
     } 
    ] 
} 

當我嘗試,我得到errror:
策略有一個無效的條件關鍵詞 - cognito-identity.amazonaws.com:aud

但此塊工作正常(減去本金)在用戶級策略中。我試圖理解規則是什麼,所以我不必盲目嘗試做出更改並「看看有什麼作用」。

要成爲可以從桶政策(例如資源URL內)引用${cognito-identity.amazonaws.com:sub};但我不能把它當作條件鍵(如上面的例子)。

因此:桶策略的規則與其他策略不同嗎?這是記錄在某處嗎?我特別喜歡這裏一個權威來源的指針,因爲我懷疑我可能錯過了一些重要的文檔。

回答

0

看起來您似乎無法在存儲桶級別策略中添加基於cognito-id的條件,但是可以通過將策略添加到身份池auth角色來實現。

假設您希望身份池中的每個用戶都能夠讀取被壓縮但只有特定用戶寫入的內容。這可以通過以下策略來實現。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::<bucketname>/*" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:PutObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::<bucketname>/*" 
      ], 
      "Condition": { 
       "StringEquals": { 
        "cognito-identity.amazonaws.com:sub": [ 
         "<cognito id1>", 
         "<conito id2>" 
        ] 
       } 
      } 
     } 
    ] 
} 
+0

我已經更新了我的帖子有一個完整的失敗的例子(即當我粘貼到一個S3桶政策 - 並更改名稱鬥匹配有問題的水桶 - 它失敗,出現錯誤贈送) 。從桶策略中* *可以參考'$ {cognito-identity.amazonaws.com:sub}';但我不能把它當作條件鍵(如上面的例子)。 – Bosh

+0

抱歉誤解你的問題我編輯了答案 – fmog

+1

謝謝 - 我也發現了這個解決方法。但我試圖理解*爲什麼*限制,以及它是否記錄在某處。我覺得我可能會錯過一些原則。 – Bosh

相關問題