在受管理資料夾中設定及管理 IAM 政策

本頁面說明如何為代管資料夾設定 Identity and Access Management (IAM) 政策,以便精細控管 bucket 內特定物件群組的存取權。

如要瞭解其他存取控管方法,請參閱下列資源:

必要的角色

如要取得設定及管理代管資料夾 IAM 政策所需的權限,請要求管理員授予您代管資料夾所屬 bucket 的「Storage 資料夾管理員」(roles/storage.folderAdmin) IAM 角色。

這個角色包含下列權限,可用於設定及管理代管資料夾的 IAM 政策:

  • storage.managedFolders.getIamPolicy

  • storage.managedFolders.setIamPolicy

您也可以透過自訂角色取得這些權限。

如要瞭解如何授予 bucket 的角色,請參閱「在 bucket 上設定及管理 IAM 政策」。

設定代管資料夾的身分與存取權管理政策

控制台

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 在 bucket 清單中,點選含有要設定 IAM 政策的受管理資料夾的 bucket 名稱。

  3. 前往「Bucket details」(值區詳細資料) 頁面,在「Folder browser」(資料夾瀏覽器) 窗格中,找出要設定 IAM 政策的受管理資料夾,然後點選旁邊的「更多選項」圖示 。

    如要控管資料夾或模擬資料夾的存取權,請按照「建立代管資料夾」一文的步驟,啟用資料夾或模擬資料夾的管理功能。

  4. 按一下「編輯權限」。

  5. 在「Permissions for MANAGED_FOLDER_NAME」(MANAGED_FOLDER_NAME 的權限) 窗格中,按一下「Add principal」(新增主體)。

  6. 在「New principals」(新增主體) 欄位中,輸入要授予存取權的主體。如要進一步瞭解可加入的主體,請參閱「主體 ID」。

  7. 在「指派角色」部分,使用「選取角色」下拉式選單,指定要授予主體的存取層級。

  8. 按一下 [儲存]。

指令列

  1. 建立包含下列資訊的 JSON 檔案:

    {
      "bindings":[
        {
          "role": "IAM_ROLE",
          "members":[
            "PRINCIPAL_IDENTIFIER"
          ]
        }
      ]
    }

    其中:

    • IAM_ROLE 是您要授予的 IAM 角色。例如:roles/storage.objectViewer。

    • PRINCIPAL_IDENTIFIER 會識別您要將代管資料夾存取權授予誰。例如:user:jeffersonloveshiking@gmail.com。如需主體 ID 格式清單,請參閱「主體 ID」。

  2. 使用 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

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 建立包含下列資訊的 JSON 檔案:

    {
      "bindings":[
        {
          "role": "IAM_ROLE",
          "members":[
            "PRINCIPAL_IDENTIFIER"
          ]
        }
      ]
    }

    其中:

    • IAM_ROLE 是您要授予的 IAM 角色。例如:roles/storage.objectViewer。

    • PRINCIPAL_IDENTIFIER 識別要授予代管資料夾存取權的對象。例如:user:jeffersonloveshiking@gmail.com。如需主體 ID 格式清單,請參閱「主體 ID」。

  3. 使用 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 政策

控制台

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 在 bucket 清單中,點選含有要查看 IAM 政策的代管資料夾的 bucket 名稱。

  3. 在「Bucket details」(值區詳細資料) 頁面中,前往「Folder browser」(資料夾瀏覽器) 窗格,找到要查看 IAM 政策的代管資料夾,然後點選旁邊的「More options」(更多選項) 圖示 。

  4. 按一下「編輯權限」。

「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

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 使用 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/。

從代管資料夾政策中移除主體

控制台

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 在 bucket 清單中,點選含有要查看 IAM 政策的代管資料夾的 bucket 名稱。

  3. 在「Bucket details」(值區詳細資料) 頁面中,前往「Folder browser」(資料夾瀏覽器) 窗格,找到要移除主體的代管資料夾,然後點選旁邊的「More options」(更多選項) 圖示 。

  4. 按一下「編輯權限」。

  5. 在「Permissions for FOLDER_NAME」(FOLDER_NAME 的權限) 窗格中,於「Filter」(篩選器) 欄位輸入主體名稱。

  6. 按一下「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

其中:

  • BUCKET_NAME 是 bucket 名稱,當中含有您要撤銷存取權的代管資料夾。例如:my-bucket。

  • MANAGED_FOLDER_NAME 是要移除 IAM 政策的代管資料夾名稱。例如:my-managed-folder/。

  • PRINCIPAL_IDENTIFIER 可識別要撤銷存取權的使用者。例如,user:jeffersonloveshiking@gmail.com。如需主體 ID 格式清單,請參閱「主體 ID」。

  • IAM_ROLE 是您要撤銷的 IAM 角色。例如:roles/storage.objectViewer。

REST API

JSON

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 取得套用至受管理資料夾的現有政策。方法是使用 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/。

  3. 建立 JSON 檔案,並加入上一步擷取的政策。

  4. 編輯 JSON 檔案,從政策中移除主體。

  5. 使用 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 層級存取權,才能為代管資料夾新增條件。

為代管資料夾設定新條件

指令列

  1. 建立 JSON 或 YAML 檔案來定義條件,包括條件的 title、條件的屬性型邏輯 expression,以及條件的 description (選用)。

    請注意,Cloud Storage 僅支援 expression 中的日期/時間、資源類型和資源名稱屬性。

  2. 使用 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

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 使用 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 條件的受管理資料夾名稱。

  3. 在文字編輯器中編輯 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。

  4. 使用 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 條件的受管理資料夾名稱。

移除代管資料夾的條件

指令列

  1. 使用 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
  2. 在文字編輯器中編輯 tmp-policy.json 檔案,從 IAM 政策中移除條件。

  3. 使用 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

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 使用 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/。

  3. 在文字編輯器中編輯 tmp-policy.json 檔案,從 IAM 政策中移除條件。

  4. 使用 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) 角色。

後續步驟