本頁面說明如何為代管資料夾設定 Identity and Access Management (IAM) 政策,以便精細控管 bucket 內特定物件群組的存取權。
如要瞭解其他存取控管方法,請參閱下列資源:
如要瞭解如何控管整個 bucket 及其內物件的存取權,請參閱「設定及管理 bucket 的 IAM 政策」。
如要以其他方式控管值區中個別物件的存取權,請參閱「存取控管清單」。
如要進一步瞭解如何控管 Cloud Storage 資源的存取權,請參閱「存取控管總覽」。
必要的角色
如要取得設定及管理代管資料夾 IAM 政策所需的權限,請要求管理員授予您代管資料夾所屬 bucket 的「Storage 資料夾管理員」(roles/storage.folderAdmin) IAM 角色。
這個角色包含下列權限,可用於設定及管理代管資料夾的 IAM 政策:
storage.managedFolders.getIamPolicystorage.managedFolders.setIamPolicy
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予 bucket 的角色,請參閱「在 bucket 上設定及管理 IAM 政策」。
設定代管資料夾的身分與存取權管理政策
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選含有要設定 IAM 政策的受管理資料夾的 bucket 名稱。
前往「Bucket details」(值區詳細資料) 頁面,在「Folder browser」(資料夾瀏覽器) 窗格中,找出要設定 IAM 政策的受管理資料夾,然後點選旁邊的「更多選項」圖示 。
如要控管資料夾或模擬資料夾的存取權,請按照「建立代管資料夾」一文的步驟,啟用資料夾或模擬資料夾的管理功能。
按一下「編輯權限」。
在「Permissions for
MANAGED_FOLDER_NAME」(MANAGED_FOLDER_NAME的權限) 窗格中,按一下「Add principal」(新增主體)。在「New principals」(新增主體) 欄位中,輸入要授予存取權的主體。如要進一步瞭解可加入的主體,請參閱「主體 ID」。
在「指派角色」部分,使用「選取角色」下拉式選單,指定要授予主體的存取層級。
按一下 [儲存]。
指令列
建立包含下列資訊的 JSON 檔案:
{ "bindings":[ { "role": "IAM_ROLE", "members":[ "PRINCIPAL_IDENTIFIER" ] } ] }
其中:
使用
gcloud storage managed-folders set-iam-policy指令:gcloud storage managed-folders set-iam-policy gs://BUCKET_NAME/MANAGED_FOLDER_NAME POLICY_FILE
其中:
BUCKET_NAME是 bucket 名稱,其中包含要套用 IAM 政策的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要套用 IAM 政策的受管理資料夾名稱。例如:my-managed-folder/。POLICY_FILE是您在步驟 1 建立的 JSON 檔案路徑。
REST API
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立包含下列資訊的 JSON 檔案:
{ "bindings":[ { "role": "IAM_ROLE", "members":[ "PRINCIPAL_IDENTIFIER" ] } ] }
其中:
使用
cURL來透過PUT setIamPolicy要求呼叫呼叫 JSON API:curl -X PUT --data-binary @POLICY_FILE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"
其中:
POLICY_FILE是您在上一步建立的 JSON 政策檔案路徑。BUCKET_NAME是 bucket 的名稱,其中包含要套用 IAM 政策的受管理資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要授予主體存取權的受管理資料夾名稱。例如:my-managed-folder/。
查看代管資料夾的 IAM 政策
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選含有要查看 IAM 政策的代管資料夾的 bucket 名稱。
在「Bucket details」(值區詳細資料) 頁面中,前往「Folder browser」(資料夾瀏覽器) 窗格,找到要查看 IAM 政策的代管資料夾,然後點選旁邊的「More options」(更多選項) 圖示 。
按一下「編輯權限」。
「Permissions for FOLDER_NAME」(FOLDER_NAME 的權限) 窗格會顯示代管資料夾的權限,包括主體、角色、繼承的角色和 IAM 條件。
指令列
使用 gcloud storage managed-folder get-iam-policy 指令:
gcloud storage managed-folders get-iam-policy gs://BUCKET_NAME/MANAGED_FOLDER_NAME
其中:
BUCKET_NAME是 bucket 的名稱,其中包含您要查看 IAM 政策的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要查看 IAM 政策的代管資料夾名稱。例如:my-managed-folder/。
REST API
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL來透過GET getIamPolicy要求呼叫呼叫 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"
其中:
BUCKET_NAME是 bucket 名稱,其中包含您要查看 IAM 政策的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要查看 IAM 政策的代管資料夾名稱。例如:my-managed-folder/。
從代管資料夾政策中移除主體
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選含有要查看 IAM 政策的代管資料夾的 bucket 名稱。
在「Bucket details」(值區詳細資料) 頁面中,前往「Folder browser」(資料夾瀏覽器) 窗格,找到要移除主體的代管資料夾,然後點選旁邊的「More options」(更多選項) 圖示 。
按一下「編輯權限」。
在「Permissions for
FOLDER_NAME」(FOLDER_NAME的權限) 窗格中,於「Filter」(篩選器) 欄位輸入主體名稱。按一下「Delete」(刪除) 圖示 ,刪除主體。
Cloud Storage 會從受管理資料夾中刪除主體。
指令列
使用 gcloud storage managed-folder remove-iam-policy-binding 指令:
gcloud storage managed-folders remove-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=PRINCIPAL_IDENTIFIER --role=IAM_ROLE
其中:
REST API
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。取得套用至受管理資料夾的現有政策。方法是使用
cURL透過GET getIamPolicy要求呼叫 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"
其中:
BUCKET_NAME是 bucket 名稱,當中含有您要撤銷存取權的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要移除 IAM 政策的代管資料夾名稱。例如:my-managed-folder/。
建立 JSON 檔案,並加入上一步擷取的政策。
編輯 JSON 檔案,從政策中移除主體。
使用
cURL來透過PUT setIamPolicy要求呼叫呼叫 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"
其中:
JSON_FILE_NAME是您在步驟 3 建立的檔案路徑。BUCKET_NAME是指包含要撤銷存取權的受管理資料夾的 bucket 名稱。例如:my-bucket。MANAGED_FOLDER_NAME是要移除 IAM 政策的代管資料夾名稱。例如:my-managed-folder/。
對代管資料夾使用 IAM 條件
以下各節說明如何在受管理資料夾中新增及移除 IAM 條件。如要查看代管資料夾的 IAM 條件,請參閱「查看代管資料夾的 IAM 政策」。如要進一步瞭解如何搭配使用 IAM 條件和 Cloud Storage,請參閱「條件」。
受管理資料夾可指定為 IAM 允許政策條件中的資源,但無法指定為 IAM 拒絕政策條件中的資源。拒絕條件只會辨識資源標記函式,且標記無法附加至受管理資料夾。
您必須先在 bucket 啟用統一 bucket 層級存取權,才能為代管資料夾新增條件。
為代管資料夾設定新條件
指令列
建立 JSON 或 YAML 檔案來定義條件,包括條件的
title、條件的屬性型邏輯expression,以及條件的description(選用)。使用
gcloud storage managed-folders add-iam-policy-binding指令,並加上--condition-from-file旗標:
gcloud storage managed-folders add-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=PRINCIPAL_IDENTIFIER --role=IAM_ROLE --condition-from-file=CONDITION_FILE
其中:
BUCKET_NAME是 bucket 名稱,內含您要授予主體存取權的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要授予主體存取權的代管資料夾名稱。例如:my-managed-folder/。PRINCIPAL_IDENTIFIER則會指出條件適用的對象。例如,user:jeffersonloveshiking@gmail.com。如需主體 ID 格式清單,請參閱「主體 ID」。IAM_ROLE是您要授予主體的 IAM 角色。例如:roles/storage.objectViewer。CONDITION_FILE是您在上一個步驟中建立的檔案。
或者,您也可以使用 --condition 旗標 (而非 --condition-from-file 旗標),直接在指令中加入條件。
REST API
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
GET getIamPolicy要求,將受管理資料夾的 IAM 政策儲存至暫時的 JSON 檔案:curl \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAMEiam' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' > tmp-policy.json
其中:
BUCKET_NAME是 bucket 的名稱,其中包含要設定 IAM 條件的代管資料夾。MANAGED_FOLDER_NAME是要設定 IAM 條件的受管理資料夾名稱。
在文字編輯器中編輯
tmp-policy.json檔案,在 IAM 政策的繫結中新增條件:{ "version": VERSION, "bindings": [ { "role": "IAM_ROLE", "members": [ "PRINCIPAL_IDENTIFIER" ], "condition": { "title": "TITLE", "description": "DESCRIPTION", "expression": "EXPRESSION" } } ], "etag": "ETAG" }其中:
VERSION是IAM 政策版本,如果代管資料夾設有 IAM 條件,則必須為 3。IAM_ROLE是適用條件的角色。例如:roles/storage.objectViewer。PRINCIPAL_IDENTIFIER識別條件的適用對象。例如:user:jeffersonloveshiking@gmail.com。如需主體 ID 格式清單,請參閱「主體 ID」。TITLE是條件的標題。例如:expires in 2019。DESCRIPTION是條件的選用說明。例如:Permission revoked on New Year's。EXPRESSION是以屬性為基礎的邏輯運算式。例如:request.time < timestamp(\"2019-01-01T00:00:00Z\")。如需更多運算式範例,請參閱條件屬性參考資料。Cloud Storage 僅支援「日期/時間」、「資源類型」和「資源名稱」屬性。
請勿修改
ETAG。使用
PUT setIamPolicy要求,在值區中設定修改後的 IAM 政策:curl -X PUT --data-binary @tmp-policy.json \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFoldersMANAGED_FOLDER_NAME/iam"
其中:
BUCKET_NAME是 bucket 的名稱,其中包含要設定 IAM 條件的代管資料夾。MANAGED_FOLDER_NAME是要設定 IAM 條件的受管理資料夾名稱。
移除代管資料夾的條件
指令列
使用
gcloud storage managed-folders get-iam-policy指令,將代管資料夾的 IAM 政策儲存至暫時 JSON 檔案。gcloud storage managed-folders get-iam-policy gs://BUCKET_NAME/MANAGED_FOLDER_NAME > tmp-policy.json
在文字編輯器中編輯
tmp-policy.json檔案,從 IAM 政策中移除條件。使用
gcloud storage managed-folders set-iam-policy指令在代管資料夾中設定修改後的 IAM 政策。gcloud storage managed-folders set-iam-policy gs://BUCKET_NAME/MANAGED_FOLDER_NAME tmp-policy.json
REST API
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
GET getIamPolicy要求,將代管資料夾的身分與存取權管理政策儲存至暫時 JSON 檔案:curl \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAMEiam' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' > tmp-policy.json
其中:
BUCKET_NAME是 bucket 名稱,當中含有您要變更存取權的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要變更存取權的代管資料夾名稱。例如:my-managed-folder/。
在文字編輯器中編輯
tmp-policy.json檔案,從 IAM 政策中移除條件。使用
PUT setIamPolicy要求,在代管資料夾中設定修改後的 IAM 政策:curl -X PUT --data-binary @tmp-policy.json \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAMEiam"
其中:
BUCKET_NAME是 bucket 名稱,當中含有您要變更存取權的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要變更存取權的受管理資料夾名稱。例如:my-managed-folder/。
在專案中使用 IAM
如要瞭解如何在專案層級以上授予及撤銷 IAM 角色,請參閱「管理專案、代管資料夾和組織的存取權」。
最佳做法
請盡可能設定最低角色,授予主體所需存取權。舉例來說,如果團隊成員只需要查看 bucket 中的受管理資料夾,請授予 Storage 物件管理員 (roles/storage.objectAdmin) 角色,而非 Storage 資料夾管理員 (roles/storage.folderAdmin) 角色。同樣地,如果團隊成員需要完全控管 bucket 中的受管理資料夾,請授予「Storage 資料夾管理員」(roles/storage.folderAdmin) 角色,而非「Storage 管理員」(roles/storage.admin) 角色。
後續步驟
瞭解如何公開共用您的資料。
請參閱分享與協作範例。
瞭解使用 IAM 的最佳做法。
如要排解與 IAM 角色和權限相關的作業失敗問題,請參閱「疑難排解」。