设置和管理托管式文件夹的 IAM 政策

本页面介绍了如何设置托管式文件夹Identity and Access Management (IAM) 政策,以便您可以针对存储桶中的特定对象组进行精细访问权限控制。

如果您要查找其他访问权限控制方法,请参阅以下资源:

所需的角色

如需获得设置和管理托管式文件夹的 IAM 政策所需的权限,请让您的管理员为您授予包含托管式文件夹的存储桶的 Storage Folder Admin (roles/storage.folderAdmin) IAM 角色。

此角色可提供以下权限,这些权限是设置和管理代管式文件夹的 IAM 政策所必需的:

  • storage.managedfolders.getIamPolicy

  • storage.managedfolders.setIamPolicy

您还可以通过自定义角色获得这些权限。

如需了解如何授予存储桶的角色,请参阅设置和管理存储桶的 IAM 政策

为代管式文件夹设置 IAM 政策

控制台

  1. 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。

    进入“存储桶”

  2. 在存储桶列表中,点击要设置 IAM 政策的托管文件夹所属的存储桶的名称。

  3. 存储桶详情页面中,点击要设置 IAM 政策的托管文件夹旁边的文件夹浏览器窗格中的更多选项图标

    如果要控制其访问权限的文件夹是模拟文件夹,请按照创建托管文件夹中的步骤操作,首先将模拟文件夹转换为托管文件夹。

  4. 点击修改访问权限

  5. MANAGED_FOLDER_NAME 的权限窗格中,点击添加主账号

  6. 新的主账号字段中,输入要授予其访问权限的主账号。如需详细了解您可以添加的主账号,请参阅主账号标识符

  7. 分配角色部分,使用选择角色下拉列表指定要向主账号授予的访问权限级别。

  8. 点击保存

命令行

  1. 创建一个包含以下信息的 JSON 文件:

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

    其中:

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

    • PRINCIPAL_IDENTIFIER 标识您要授予代管式文件夹访问权限的人员。例如 user:jane@gmail.com。如需查看主账号标识符格式的列表,请参阅主账号标识符

  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 标头生成访问令牌。

    或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在 Authorization 标头中。

  2. 创建一个包含以下信息的 JSON 文件:

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

    其中:

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

    • PRINCIPAL_IDENTIFIER 标识您要授予代管式文件夹访问权限的人员。例如 user:jane@gmail.com。如需查看主账号标识符格式的列表,请参阅主账号标识符

  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 存储桶页面。

    进入“存储桶”

  2. 在存储桶列表中,点击要查看其 IAM 政策的托管文件夹所属的存储桶的名称。

  3. 存储桶详情页面中,点击要查看其 IAM 政策的托管文件夹旁边的文件夹浏览器窗格中的更多选项图标

  4. 点击修改访问权限

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 标头生成访问令牌。

    或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在 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 存储桶页面。

    进入“存储桶”

  2. 在存储桶列表中,点击要查看其 IAM 政策的托管文件夹所属的存储桶的名称。

  3. 存储桶详情页面中,点击要移除主账号的托管文件夹旁边的文件夹浏览器窗格中的更多选项图标

  4. 点击修改访问权限

  5. FOLDER_NAME 的权限窗格的过滤条件字段中,输入主账号的名称。

  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:jane@gmail.com。如需查看主账号标识符格式的列表,请参阅主账号标识符

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

REST API

JSON

  1. 安装并初始化 gcloud CLI,以便为 Authorization 标头生成访问令牌。

    或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在 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 Conditions 与 Cloud Storage 搭配使用,请参阅 Conditions

您必须先对存储桶启用统一存储桶级访问权限,然后才能向代管式文件夹添加条件。

为代管式文件夹设置新条件

命令行

  1. 创建用于定义条件的 JSON 或 YAML 文件,包括条件的 title和条件的基于特性的逻辑 expression,还可以选择包括条件的 description

    请注意,Cloud Storage 仅支持在 expression 中包含日期/时间资源类型资源名称特性。

  2. 使用带有 --condition-from-file 标志的 gcloud storage managed-folders add-iam-policy-binding 命令

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:jane@gmail.com。如需查看主账号标识符格式的列表,请参阅主账号标识符

  • IAM_ROLE 是您要向主账号授予的 IAM 角色,例如 roles/storage.objectViewer

  • CONDITION_FILE 是您在上一步中创建的文件。

或者,您可以使用 --condition 标志直接在命令中添加条件,而不是使用 --condition-from-file 标志。

REST API

JSON

  1. 安装并初始化 gcloud CLI,以便为 Authorization 标头生成访问令牌。

    或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在 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:jane@gmail.com。如需查看主账号标识符格式的列表,请参阅主账号标识符

    • 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 标头生成访问令牌。

    或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在 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 Object Admin (roles/storage.objectAdmin) 角色,而不是 Storage Folder Admin (roles/storage.folderAdmin) 角色。同样,如果团队成员需要完全控制存储桶中的托管式文件夹,请为其授予 Storage Folder Admin (roles/storage.folderAdmin) 角色,而不是 Storage Admin (roles/storage.admin) 角色。

后续步骤