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。

如果您對以上任何一種成員類型授予特定角色,則具有指定專案指定權限的所有成員都會獲派您選取的角色。舉例來說,假設您要對具有專案 my-example-projectViewer 角色的所有成員授予其中一個值區的 roles/storage.objectCreator 角色,就應給予成員 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 with 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 角色的成員;而正是這個值區角色能允許 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
需要協助嗎?請前往我們的支援網頁