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

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

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

必要的角色

如要取得設定及管理代管資料夾 IAM 政策所需的權限,請要求管理員為您授予含有代管資料夾的值區的儲存空間資料夾管理員 (roles/storage.folderAdmin) IAM 角色。

這個角色具備下列權限,可設定及管理受管理資料夾的 IAM 政策:

  • storage.managedFolders.getIamPolicy

  • storage.managedFolders.setIamPolicy

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

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

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

控制台

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

    前往「Buckets」(值區) 頁面

  2. 在值區清單中,找出您要為受管理資料夾設定 IAM 政策的值區,然後按一下該值區的名稱。

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

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

  4. 按一下「編輯存取權」

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

  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 是值區名稱,其中包含您要套用 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 是值區名稱,其中包含您要套用 IAM 政策的受管理資料夾。例如:my-bucket

    • MANAGED_FOLDER_NAME 是您要授予主體存取權的受管理資料夾名稱。例如:my-managed-folder/

查看受管理資料夾的 IAM 政策

控制台

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

    前往「Buckets」(值區) 頁面

  2. 在值區清單中,找出您要查看 IAM 政策的受管理資料夾所屬值區,然後按一下該值區的名稱。

  3. 在「Bucket details」(值區詳細資料) 頁面中,按一下「Folder browser」(資料夾瀏覽器) 窗格中,要查看 IAM 政策的受管理資料夾旁的「更多選項」圖示

  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 是值區名稱,其中包含您要查看其 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 是值區名稱,其中包含您要查看 IAM 政策的受管理資料夾。例如:my-bucket

    • MANAGED_FOLDER_NAME 是您要查看其 IAM 政策的受管理資料夾名稱。例如:my-managed-folder/

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

控制台

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

    前往「Buckets」(值區) 頁面

  2. 在值區清單中,找出您要查看 IAM 政策的受管理資料夾所屬值區,然後按一下該值區的名稱。

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

  4. 按一下「編輯存取權」

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

  6. 按一下「刪除」圖示 即可刪除主體。

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 是包含您要撤銷存取權受管理資料夾的值區名稱。例如: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 是包含您要撤銷存取權受管理資料夾的值區名稱。例如: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 是包含您要撤銷存取權受管理資料夾的值區名稱。例如:my-bucket

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

在代管資料夾上使用 IAM 條件

以下各節說明如何在受管理資料夾中新增及移除 IAM 條件。如要查看受管理資料夾的 IAM 條件,請參閱「查看受管理資料夾的 IAM 政策」。如要進一步瞭解如何搭配使用 IAM 條件和 Cloud Storage,請參閱條件

您必須先在值區中啟用統一值區層級存取權,才能在代管資料夾中新增條件。

為代管資料夾設定新條件

指令列

  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 是包含受管理資料夾的值區名稱,您要授予主體存取權。例如: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 是包含要設定 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"
    }

    其中:

    • VERSIONIAM 政策版本,對於設有 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 是包含要設定 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 要求,將受管理資料夾的 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 是包含您要變更存取權的受管理資料夾的值區名稱。例如: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 是包含您要變更存取權的受管理資料夾的值區名稱。例如:my-bucket

    • MANAGED_FOLDER_NAME 是您要變更存取權的受管理資料夾名稱。例如:my-managed-folder/

針對專案使用 IAM

如需在專案層級以上授予及撤銷 IAM 角色的指南,請參閱「管理專案、受管理資料夾和機構的存取權」。

最佳做法

將所需存取權授予主體時,請儘可能為他們設定最低權限。舉例來說,如果小組成員只需要查看值區中的受管理資料夾,請授予 Storage 物件管理員 (roles/storage.objectAdmin) 角色,而非 Storage 資料夾管理員 (roles/storage.folderAdmin) 角色。同樣地,如果小組成員需要值區中受管理資料夾的完整控制權,請授予「Storage Folder Admin」(儲存空間資料夾管理員) (roles/storage.folderAdmin) 角色,而非「Storage Admin」(儲存空間管理員) (roles/storage.admin) 角色。

後續步驟