Cloud Identity and Access Management

這個頁面將概述 Cloud Identity and Access Management (Cloud IAM),以及如何用來控管 Cloud Storage 中的值區和物件存取權。如要瞭解如何設定及管理 Cloud Storage 值區和專案的 Cloud IAM 權限,請參閱使用 Cloud IAM 權限一文。如要進一步瞭解其他控管值區和物件存取權的方式,請參閱存取權控制總覽

這個頁面將著重介紹與 Cloud Storage 具體相關的 Cloud IAM 面向。如需 Cloud IAM 及其一般功能的相關詳細說明,請參閱開發人員專用的 Cloud Identity and Access Management 指南,特別是管理 Cloud IAM 政策一節。

總覽

Cloud Identity and Access Management (Cloud IAM) 可讓您控管誰有權存取 Google Cloud Platform 專案內的「資源」。資源包括 Cloud Storage 值區和儲存在值區內的物件,以及其他 GCP 實體如 Compute Engine 執行個體

您套用到資源的這套存取權規則就稱為 Cloud IAM 政策。將 Cloud IAM 政策套用到您的專案,可以定義使用者能對專案內物件或值區採取哪些動作。將 Cloud IAM 政策套用到單一值區,可以定義使用者能對特定值區或其中的物件採取哪些動作。

舉例來說,您可以建立單一值區的 Cloud IAM 政策,將該值區的控管權限授予一位使用者;同時,您還可以新增另一個使用者至全專案的 Cloud IAM 政策,授予該使用者在您專案內查看所有值區中物件的權限。

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

例如,storage.objects.create 權限允許您建立物件。像 roles/storage.objectCreatorroles/storage.objectAdmin 這類角色都有這項權限。在前項角色中,這是唯一權限;後項角色則包含多項權限組合。如果您將特定值區的 roles/storage.objectCreator 角色指派給某位成員,對方就只能在該值區中建立物件。如果您將值區的 roles/storage.objectAdmin 角色指派給另一位成員,則對方可以執行其他工作,例如刪除物件,但仍僅限於在該值區內。如果這兩個使用者僅獲派以上角色,就無法得知您的專案中是否存在其他值區。如果您將 roles/storage.objectAdmin 角色指派給第三名成員,但權限涵蓋範圍是專案,而非單一值區,則對方可以存取專案中任何值區裡的任何物件。

搭配 Cloud Storage 使用 Cloud IAM 可讓您輕鬆限制成員權限,而不用個別修改每個值區或物件權限。

權限

擁有權限的成員可以對 Cloud Storage 中的值區或物件執行特定操作,例如,storage.buckets.list 權限允許成員列出您專案中的值區。您不能直接將權限授予成員,而是該指派內建一或多個權限的角色

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

角色

角色由一或多個權限集合而成,例如 roles/storage.objectViewer 便包含 storage.objects.getstorage.objects.list 權限。您可以指派角色給成員,好讓成員能對專案內的值區和物件執行特定操作。

如需 Cloud Storage 適用的 Cloud IAM 角色參考清單,請參閱適用於 Cloud Storage 的 Cloud IAM 角色一文。

專案層級角色和值區層級角色

在值區層級授予角色不會影響您在專案層級授予的任何現有角色,反之亦同。因此,您可以利用兩個層級的精細程度來自訂權限。舉例來說,假設您想要授予的權限,是能讓使用者讀取任何值區內的物件,但只能在某個特定值區建立物件。為此,請在專案層級授予 roles/storage.objectViewer 角色,讓使用者能讀取專案中任何值區內所儲存的任何物件,並在值區層級授予特定值區的 roles/storage.objectCreator 角色,好讓同一名使用者只能在該值區建立物件。

部分角色可同時用於專案層級和值區層級。在專案層級使用這類角色時,其中包含的權限將套用到專案的所有值區和物件;在值區層級使用時,權限將只會套用到值區及其中的物件。像 roles/storage.adminroles/storage.objectViewerroles/storage.objectCreator 都屬於這類角色。

有些角色則只能套用至一個層級。例如,您只能在專案層級套用 Viewer 角色,只能在值區層級套用 roles/storage.legacyObjectOwner 角色。

與 ACL 的關係

「舊版值區」Cloud IAM 角色和 值區 ACL 同時使用:新增或移除「舊版值區」角色時,與值區相關聯的 ACL 將反映您的變更。同樣地,變更值區專用 ACL 也會更新值區對應的「舊版值區」角色。

舊版值區角色 同等 ACL
roles/storage.legacyBucketReader 值區讀取者
roles/storage.legacyBucketWriter 值區寫入者
roles/storage.legacyBucketOwner 值區擁有者

所有其他值區層級的 Cloud IAM 角色及所有專案層級的 Cloud IAM 角色,都是獨立於 ACL 運作。舉例來說,如果您提供使用者 Storage 物件檢視者角色,ACL 將維持不變。這代表您可以使用值區層級的 Cloud IAM 角色,提供值區內所有物件的廣泛存取權,並使用精細的物件 ACL 來自訂值區內特定物件的存取權。

用來變更 ACL 的 Cloud IAM 權限

您可以使用 Cloud IAM 來授予成員變更物件 ACL 所需的權限。下列的 storage.buckets 權限可讓使用者處理值區 ACL 和預設物件 ACL:.get.getIamPolicy.setIamPolicy.update

同樣地,下列的 storage.objects 權限可讓使用者處理物件 ACL:.get.getIamPolicy.setIamPolicy.update

自訂角色

Cloud IAM 具有許多預先定義的角色,適用於多種常見的使用情況;您可能會想要定義自己的角色來包含您指定的權限組合。Cloud IAM 提供自訂角色就是為了支援這方面的需求。

成員類型

成員類型有很多種,例如,Google 帳戶和 Google 群組代表兩種一般常見的類型,而 allAuthenticatedUsersallUsers 是兩種特殊類型。如需 Cloud IAM 中的成員類型清單,請參閱與身分有關的概念一節。除了其中列出的類型外,Cloud IAM 還支援以下成員類型,可以明確套用至您的 Cloud Storage 值區 Cloud IAM 政策:

  • projectOwner:[PROJECT_ID]
  • projectEditor:[PROJECT_ID]
  • projectViewer:[PROJECT_ID]

其中,[PROJECT_ID] 是特定專案的 ID。

如果您對以上任何一種成員類型授予特定角色,那麼具有指定專案指定權限的所有成員都會獲派您選取的角色。舉例來說,假設您想將您其中一個值區的 roles/storage.objectCreator 角色,授予具備 my-example-project 專案 Viewer 角色的所有成員,那麼您就該授予成員 projectViewer:my-example-project 該值區的 roles/storage.objectCreator 角色。

使用 Cloud Storage 工具

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

如需參考哪些 Cloud IAM 權限允許使用者使用不同 Cloud Storage 工具執行動作,請參閱 Cloud IAM 與 Cloud ConsoleCloud IAM 與 gsutilCloud IAM 與 JSON,以及 Cloud IAM 與 XML

最佳做法

就像其他管理設定,Cloud IAM 也需要積極管理才能發揮作用。在將值區或物件提供給其他使用者存取之前,請務必確定您已經知道要和誰共用值區或物件,以及要指派什麼角色給這些人。經過一段時間,專案管理、使用模式和機構擁有權可能都會異動,而您就需要修改值區和專案的 Cloud IAM 設定,尤其在大型機構或是為大型使用者群組管理 Cloud Storage 時更是如此。當您評估及規劃存取控制設定時,請牢記下列最佳做法:

  • 授予權限時請遵循最小許可權原則

    最小許可權原則是適用於授予權限或權利的安全性指南。所謂根據最小許可權原則授予存取權,意思是只授予可供使用者完成指定工作的最小權限。例如,如果您想與某人共用檔案,那麼請授予他們 storage.objectReader 角色而不是 storage.admin 角色。

  • 避免授予具 setIamPolicy 權限的角色給您不認識的人。

    授予 setIamPolicy 權限可讓使用者變更權限並控管資料。唯有當您想委派對物件及值區的管理控制權時,才使用具 setIamPolicy 權限的角色。

  • 授權給匿名使用者時請格外小心。

    唯有在網際網路上所有人都可讀取和分析您的資料時,才可以使用 allUsersallAuthenticatedUsers 成員類型。儘管這些範圍對部分應用程式和某些情況來說很有用,但我們不建議將某些權限 (例如 setIamPolicyupdatecreatedelete) 授予給所有使用者。

  • 瞭解 Cloud Storage 中的 Viewer/Editor/Owner 專案角色

    Viewer/Editor/Owner 專案層級角色可有效在 Cloud Storage 內授予符合其名稱的存取權;不過此功能是透過間接方式,以值區及物件層級額外提供的存取權,搭配 Cloud Storage 專用的成員類型來達成。雖然前述存取權是由系統依預設新增,但您仍可予以撤銷。

    舉例來說,Viewer 角色本身只會授予成員 storage.buckets.list 權限,但依據預設,新值區會將 roles/storage.legacyBucketReader 角色授予給專案中具 角色的所有成員。而正是這個值區角色能允許 Viewer 查看值區。此外,值區有 projectPrivate 的預設物件 ACL,這代表新增至值區的物件預設將獲得 projectPrivate ACL。而正是這個 ACL 能允許 Viewer 查看物件。

    同樣地,EditorOwner 專案角色本身的 Cloud Storage 存取權有限,但具有這些角色的成員則能獲得新值區的 roles/storage.legacyBucketOwner,並透過 projectPrivate ACL 獲得物件擁有權。

    請注意,由於部分值區和物件存取權無法讓 Viewer/Editor/Owner 專案角色沿用,因此您可以撤銷成員預期能獲得的存取權。

  • 避免設定可能導致值區和物件無法存取的權限。

    如果沒有任何使用者具有讀取權限,值區或物件就會變成無法存取。值區的所有 Cloud IAM 權限都遭到移除時,就可能會發生這種情況。或者,當物件擁有者退出專案,且當下沒有任何能授予物件存取權的值區或專案層級 Cloud IAM 政策,也可能會發生這種情況。在這兩種情況下,您只要在專案層級指派適當的角色 (例如 roles/storage.admin) 給自己或另一成員,就可以重新取得存取權。請注意,這麼做會授予專案中「所有」值區及物件的存取權,因此待您為受影響的值區或專案重設好存取權後,就可考慮撤銷角色

  • 確認您已委派值區的管理控制權。

    根據預設,擁有專案層級 Owner 角色的成員,是唯一在新建立的值區具有 roles/legacyBucketOwner 角色的實體。建議您隨時都保留至少兩位具有 Owner 角色的成員,這樣即使小組成員離開群組,還有其他成員可以繼續管理值區。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Storage
需要協助嗎?請前往我們的支援網頁