本頁面提供 Identity and Access Management (IAM) 的總覽,以及如何使用 IAM 控制 Cloud Storage 中 bucket、代管資料夾和物件資源的存取權。
如要瞭解其他 Cloud Storage 存取權控管方式,請參閱「存取權控管總覽」。
如要進一步瞭解 IAM 及其功能,請參閱「Identity and Access Management」。
總覽
您可以透過 IAM 控管哪些人能存取 Google Cloud 專案中的資源。資源包括 Cloud Storage bucket、bucket 內的代管資料夾、儲存在 bucket 內的物件,以及 Compute Engine 執行個體等其他 Google Cloud 實體。
主體是 IAM 的「對象」。主體可以是個別使用者、群組、網域,甚至是全體大眾。主體會獲派角色,因此能在 Cloud Storage 和 Google Cloud 中執行動作。每個角色都是一或多個權限的集合。權限是 IAM 的基本單位:每項權限都可讓您執行特定動作。
例如,storage.objects.create 權限可讓您建立物件。Storage 物件建立者 (roles/storage.objectCreator) 和 Storage 物件管理員 (roles/storage.objectAdmin) 等角色都具備這項權限。前者可授予在 bucket 中建立物件的權限,後者則可授予多種操作物件的權限。
您在資源上設定的 IAM 角色集合稱為 IAM「政策」。這些角色授予的存取權適用於政策設定的資源,以及該資源內含的任何資源。舉例來說,您可以為值區設定 IAM 政策,授予使用者該值區及其物件的管理控制權。您也可以為整個專案設定 IAM 政策,讓其他使用者能查看該專案中任何 bucket 內的物件。
您也可以使用 IAM 拒絕政策拒絕資源存取權。將拒絕政策附加至資源後,無論主體具備何種角色,都無法使用指定權限存取資源或其中的任何子資源。拒絕政策會覆寫所有 IAM 允許政策。
權限
主體必須具備權限,才能對 Cloud Storage 中的值區、受管理資料夾或物件執行特定操作。舉例來說,storage.buckets.list 權限可讓主體列出專案中的 bucket。您不會直接授予主體權限,而是授予角色,角色內含一或多個權限。
如要查看適用於 Cloud Storage 的 IAM 權限參考清單,請參閱「Cloud Storage 的 IAM 權限」。
角色
角色由一或多個權限集合而成,舉例來說,Storage 物件檢視者 (roles/storage.objectViewer) 角色包含 storage.objects.get 和 storage.objects.list 權限。將角色授予主體後,主體就能對專案中的 bucket、代管資料夾和物件執行動作。
如需 Cloud Storage 適用的 IAM 角色參考清單,請參閱「Cloud Storage 的 IAM 角色」。
在專案、bucket 或受管理的資料夾層級授予角色
您可以在專案、bucket 或受管理的資料夾層級,將角色授予主體。這些角色授予的權限會累加套用至整個資源階層。您可以在資源階層的不同層級授予角色,讓權限模型更精細。
舉例來說,假設您想授予使用者授權,允許他們讀取專案中任何 bucket 的物件,但只能在 bucket A 建立物件。如要達成這個目標,您可以將專案的 Storage 物件檢視者 (roles/storage.objectViewer) 角色授予使用者,讓使用者讀取專案中任何 bucket 儲存的物件,並將 bucket A 的 Storage 物件建立者 (roles/storage.objectCreator) 角色授予使用者,讓使用者只能在該 bucket 中建立物件。
部分角色可用於資源階層的所有層級,在專案層級使用時,其中包含的權限會套用至專案中的所有 bucket、資料夾和物件。在 bucket 層級使用時,權限只會套用至特定 bucket,以及其中的資料夾和物件。這類角色的例子包括 Storage 管理員 (roles/storage.admin) 角色、Storage 物件檢視者 (roles/storage.objectViewer) 角色,以及 Storage 物件建立者 (roles/storage.objectCreator) 角色。
有些角色則只能套用至一個層級。舉例來說,您只能在 bucket 層級或代管資料夾層級,套用 Storage 舊版物件擁有者 (roles/storage.legacyObjectOwner) 角色。可控管 IAM 拒絕政策的 IAM 角色,只能在組織層級套用。
與 ACL 的關係
除了 IAM 之外,如果 bucket 未啟用統一 bucket 層級存取權功能,bucket 和物件可以使用舊版存取控管系統,也就是存取控管清單 (ACL)。一般來說,您應避免使用 ACL,並為 bucket 啟用統一 bucket 層級存取權。本節說明如果允許 bucket 和其中物件使用 ACL,應注意的事項。
舊版 Bucket IAM 角色會與Bucket ACL 搭配運作: 當您新增或移除舊版 Bucket 角色時,與 Bucket 相關聯的 ACL 會反映您的變更。同樣地,變更 bucket 專屬的 ACL 會更新 bucket 的對應舊版 Bucket IAM 角色。
| 舊版值區角色 | 同等 ACL |
|---|---|
Storage 舊版 Bucket 讀取者 (roles/storage.legacyBucketReader) |
值區讀取者 |
Storage 舊版 Bucket 寫入者 (roles/storage.legacyBucketWriter) |
值區寫入者 |
Storage 舊版值區擁有者 (roles/storage.legacyBucketOwner) |
值區擁有者 |
所有其他值區層級 IAM 角色 (包括舊版物件 IAM 角色) 都是獨立於 ACL 運作。同樣地,所有專案層級的 IAM 角色都獨立於 ACL 運作。舉例來說,如果您將 Storage 物件檢視者 (roles/storage.objectViewer) 角色授予使用者,ACL 仍會維持不變。
由於物件 ACL 與 IAM 角色各自獨立運作,因此不會出現在 IAM 政策的階層中。評估誰有權存取物件時,除了檢查專案層級和 bucket 層級的 IAM 政策,也請務必檢查物件的 ACL。
IAM 拒絕政策與 ACL 的比較
IAM 拒絕政策適用於 ACL 授予的存取權。舉例來說,如果您建立拒絕政策,拒絕主體對專案的 storage.objects.get 權限,則即使主體獲得個別物件的 READER 權限,也無法查看該專案中的物件。
變更 ACL 的 IAM 權限
您可以使用 IAM,授予主體變更物件 ACL 的必要權限。下列 storage.buckets 權限可讓使用者使用 bucket ACL 和預設物件 ACL:.get、.getIamPolicy、.setIamPolicy 和 .update。
同樣地,下列的 storage.objects 權限可讓使用者處理物件 ACL:.get、.getIamPolicy、.setIamPolicy 和 .update。
自訂角色
雖然 IAM 有許多預先定義的角色,涵蓋常見用途,但您可能想定義自己的角色,其中包含您指定的權限組合。為了支援這方面的需求,身分與存取權管理提供了自訂角色。
主體類型
主體類型有很多種,舉例來說,Google Cloud 帳戶代表一般類型,而 allAuthenticatedUsers 和 allUsers 則是兩種專門類型。如需 IAM 中的主體類型清單,請參閱「主體 ID」。如要進一步瞭解主體,請參閱「IAM 主體」。
便利性值
Cloud Storage 支援便利值,這是一組特殊主體,可專門套用至 IAM bucket 政策。一般來說,應避免在正式環境中使用便利值,因為這需要授予基本角色,而我們不建議在正式環境中這麼做。
便利值是兩部分的 ID,由基本角色和專案 ID 組成:
projectOwner:PROJECT_IDprojectEditor:PROJECT_IDprojectViewer:PROJECT_ID
便利值是授予基本角色的主體與 IAM 角色之間的橋樑:授予便利值的 IAM 角色,實際上也會授予指定專案 ID 的指定基本角色的所有主體。
舉例來說,假設 jane@example.com 和 john@example.com 擁有專案「my-example-project」的「檢視者」基本角色 (roles/viewer),且您在該專案中有名為「my-bucket」的 bucket。如果您將 my-bucket 的 Storage 物件建立者 (roles/storage.objectCreator) 角色授予便利值 projectViewer:my-example-project,則 jane@example.com 和 john@example.com 都會取得與 my-bucket 的 Storage 物件建立者角色相關聯的權限。
您可以授予及撤銷 bucket 的便利值存取權,但請注意,在特定情況下,Cloud Storage 會自動套用這些值。詳情請參閱「Cloud Storage 中基本角色的可修改行為」。
條件
IAM 條件可讓您設定條件,控管如何授予或拒絕主體的權限。Cloud Storage 支援下列類型的條件屬性:
resource.name:根據 bucket 或物件名稱授予或拒絕 bucket 和物件的存取權。您也可以使用resource.type授予 bucket 或物件的存取權,但這麼做與使用resource.name的效果大致相同。以下範例條件會將 IAM 設定套用至所有具有相同前置字串的物件:resource.name.startsWith('projects/_/buckets/BUCKET_NAME/objects/OBJECT_PREFIX')日期/時間:設定權限到期日。
request.time < timestamp('2019-01-01T00:00:00Z')
這些條件運算式是使用一般運算語言 (CEL) 子集的邏輯陳述式。您可以在 bucket 的 IAM 政策角色繫結中指定條件。
請注意下列限制:
- 您必須先在 bucket 啟用統一 bucket 層級存取權,才能在 bucket 層級新增條件。雖然專案層級允許條件,但您應將專案中的所有 bucket 遷移至統一 bucket 層級存取權,以免 Cloud Storage ACL 覆寫專案層級 IAM 條件。您可以套用統一 bucket 層級存取權限制,為專案中的所有新 bucket 啟用統一 bucket 層級存取權。
- 您可以在 IAM 允許政策條件中,將代管資料夾指定為資源。在 IAM 拒絕政策條件中,代管資料夾不得指定為資源。IAM 拒絕政策條件只能使用標記設定,而標記不支援代管資料夾。
- IAM 拒絕政策只能套用至專案、資料夾和組織資源。無法套用至 bucket 或代管資料夾。
- 使用 JSON API 呼叫
getIamPolicy和setIamPolicy時,如果 bucket 設有條件,您必須將 IAM 政策版本設為 3。 - 由於
storage.objects.list權限是在 bucket 層級授予,因此您無法使用resource.name條件屬性,限制物件清單存取權,僅允許存取 bucket 中的部分物件。 - 過期的條件會保留在 IAM 政策中,直到您移除為止。
使用 Cloud Storage 工具
雖然無法透過 XML API 設定 IAM 權限,但獲派 IAM 權限的使用者仍可使用 XML API,以及任何其他工具存取 Cloud Storage。
如要瞭解哪些 IAM 權限允許使用者透過不同的 Cloud Storage 工具執行動作,請參閱「Cloud Storage 的 IAM 參考資料」。
後續步驟
- 瞭解如何搭配使用 IAM 與 Cloud Storage。
- 查看 Cloud Storage 的 IAM 參考資料表。
- 瞭解使用 IAM 的最佳做法。
- 管理所有資源的 IAM 政策。 Google Cloud