S3授權通過測試所有的政府部門,在用戶,桶和對象的「上下文」的請求。
參見How Amazon S3 Authorizes a Request。
該文檔在第一次閱讀時感到困惑,但它確實給出了有關多個策略發生的更好的意義。
有幾點要記住:
- 用戶沒有自己的水桶。 帳戶自己的存儲桶和帳戶自己的用戶。
- 如果用戶創建存儲桶,擁有該用戶的帳戶始終擁有該存儲桶。
- 如果用戶創建一個對象,擁有該用戶的帳戶始終擁有該對象 - 即使該對象創建的存儲桶由不同的帳戶擁有。
等等,什麼?
如果我的帳戶爲您的用戶授予在我的存儲桶中創建對象的權限,那麼您實際上會擁有該對象。除非您允許我閱讀,否則我無法閱讀。既然它存在於我的存儲桶中,並且我正在付錢來存儲它,我可以刪除它,但除非您允許我訪問它,否則這絕對是我可以對該對象執行的所有操作。
因此,有三個級別的權限允許用戶被允許執行的操作(IAM策略),允許對其存儲桶及其對象(存儲桶策略和ACL)以及事物帳戶允許對他們擁有的對象(對象ACL)進行處理。
的默認操作是隱含的否認,但任何我的帳戶有權力允許可以通過允許它在任何一個地方是允許的,只要它沒有明確拒絕,在其他地方。顯式拒絕將永遠否認,無一例外。
啓示模型:
- 我的用戶,我鬥,我的目標只需要一個授權;訪問可以在三個地方中的任何一個地方授予,只需要在一個地方授予訪問權限,因爲我的帳戶擁有所有資源......所以我可以在IAM策略,存儲桶策略或對象中執行此操作。
- 我的用戶,你的水桶需要兩筆贈款 - 我讓我的用戶在IAM政策,和你必須讓我的YOUT桶政策的用戶。未經您的同意,我無權在您的存儲桶中執行任何操作,並且您沒有權限允許我的用戶在未經我同意的情況下執行操作。
- ,可以讓我在我的水桶對象通過任一對象ACL或通過桶政策公開可讀,但不是IAM政策,因爲IAM政策適用於用戶,「大家」是不是我的IAM用戶之一。
所以,S3需要becase的權限模型的補助多個來源。如果你沒有做任何交叉賬戶,其中一些並不明顯,因爲你不知道一些可能的組合。
我的選擇是對我的桶的政策需要稍加註意。用戶可以在IAM中獲得訪問權限,公共對象在對象級別公開(您可以在存儲桶策略中執行此操作,但我更喜歡在對象級別顯式執行此操作),因此存儲桶策略的用途有限 - 有時存在存儲桶策略規則拒絕除列表以外的所有IP地址的訪問,通常情況下存儲桶策略拒絕沒有AES-256的上載(因此您不能「忘記」加密對象),有時存在用於與CloudFront進行互操作的原始訪問身份規則...但我很少定製桶政策,因爲這是我的設計理念。
我認爲其中一個原因是因爲基於資源的策略是在基於身份的策略添加之前..而AWS不能只將它們合併爲一個。謝謝Sudo! –