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