身分與存取權管理

用量

這個頁面將概述 Identity and Access Management (IAM),以及如何用來控管 Cloud Storage 中的值區、代管資料夾和物件資源存取權。

總覽

您可以透過 IAM 控管哪些人有權存取 Trusted Cloud by S3NS 專案中的資源。資源包括 Cloud Storage 值區、值區內的受管理資料夾,以及儲存在值區內的物件,還有其他 Trusted Cloud 實體,例如 Compute Engine 執行個體

「主體」是指 IAM 的「權限授予對象」。主體可以是個別使用者、群組、網域,甚至廣泛涵蓋大眾。主體會獲派「角色」,透過角色授予的權限,在 Cloud Storage 及 Trusted Cloud 更廣的範圍中執行動作。每個角色具有一或多項「權限」。權限是 IAM 的基本單位:每種權限都能讓您執行特定動作。

例如,storage.objects.create 權限可讓您建立物件。像是「Storage 物件建立者」roles/storage.objectCreator這類角色都有這項權限,可授予在值區中建立物件的實用權限;「Storage 物件管理員」roles/storage.objectAdmin則授予處理物件的各種權限。

您在資源上設定的 IAM 角色集合稱為 IAM 政策。這些角色授予的存取權適用於政策設定的資源,以及該資源內含的任何資源。舉例來說,您可以對值區設定 IAM 政策,將該值區及其物件的控管權限授予一位使用者;您也可以在整個專案中設定 IAM 政策,授予其他使用者在該專案內查看所有值區中物件的權限。

如果您有 Trusted Cloud by S3NS 機構資源,也可以使用 IAM 拒絕政策拒絕存取資源。拒絕政策附加至資源後,政策中的主體就無法使用指定權限存取該資源或其中的任何子資源,無論主體具備何種角色均適用。拒絕政策會覆寫所有 IAM 允許政策。

權限

主體擁有權限後,即可對 Cloud Storage 中的值區、受管理資料夾或物件執行特定操作,舉例來說,storage.buckets.list 權限可讓主體列出專案中的值區。您無法直接授予主體權限,而是指派「角色」給他們,每個角色可能具備一或多項權限。

如需 Cloud Storage 適用的 IAM 權限參考清單,請參閱「Cloud Storage 適用的 IAM 權限」一文。

角色

角色由一或多個權限集合而成,舉例來說,Storage 物件檢視者 (roles/storage.objectViewer) 角色包含 storage.objects.getstorage.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 具有許多預先定義的角色,適用於多種常見的使用情況;您可能會想要定義自己的角色來包含您指定的權限組合。為了支援這方面的需求,身分與存取權管理提供了自訂角色

主體類型

主體類型有很多種,舉例來說,Trusted Cloud 帳戶代表一般類型,而 allAuthenticatedUsersallUsers 則是兩種特殊類型。如需 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 對設有條件的值區呼叫 getIamPolicysetIamPolicy 時,必須將 IAM 政策版本設為 3。
  • 由於 storage.objects.list 權限是在值區層級授予,因此您無法使用 resource.name 條件屬性,將物件列出存取權限制在值區中的部分物件。
  • 過期條件會保留在 IAM 政策中,直到您移除為止。

使用 Cloud Storage 工具

雖然 IAM 權限無法透過 XML API 設定,但具有 IAM 權限的使用者還是可以使用 XML API,以及所有其他可用來存取 Cloud Storage 的工具。

如需參考哪些 IAM 權限允許使用者使用不同 Cloud Storage 工具執行動作,請參閱 Cloud Storage 的 IAM 參考資料

後續步驟