身分與存取權管理

用量

本頁面提供 Identity and Access Management (IAM) 的總覽,以及如何使用 IAM 控制 Cloud Storage 中 bucket、代管資料夾和物件資源的存取權。

總覽

您可以透過 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_ID
  • projectEditor:PROJECT_ID
  • projectViewer: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 參考資料」。

後續步驟