本页面介绍了如何设置托管式文件夹的 Identity and Access Management (IAM) 政策,以便您可以针对存储桶中的特定对象组进行精细访问权限控制。
如果您要查找其他访问权限控制方法,请参阅以下资源:
如需了解如何控制对整个存储桶及其中对象的访问权限,请参阅设置和管理存储桶的 IAM 政策。
如需了解控制存储桶中个别对象的访问权限的其他方法,请参阅访问控制列表。
如需详细了解如何控制 Cloud Storage 资源的访问权限,请参阅访问权限控制概览。
所需的角色
如需获得设置和管理托管式文件夹的 IAM 政策所需的权限,请让您的管理员为您授予包含托管式文件夹的存储桶的 Storage Folder Admin (roles/storage.folderAdmin
) IAM 角色。
此角色可提供以下权限,这些权限是设置和管理代管式文件夹的 IAM 政策所必需的:
storage.managedfolders.getIamPolicy
storage.managedfolders.setIamPolicy
您还可以通过自定义角色获得这些权限。
如需了解如何授予存储桶的角色,请参阅设置和管理存储桶的 IAM 政策。
为代管式文件夹设置 IAM 政策
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要设置 IAM 政策的托管文件夹所属的存储桶的名称。
在存储桶详情页面中,点击要设置 IAM 政策的托管文件夹旁边的文件夹浏览器窗格中的更多选项图标
。如果您想控制文件夹或模拟文件夹中的访问权限,请按照创建托管式文件夹中的步骤操作,以便对文件夹或模拟文件夹启用管理功能。
点击修改访问权限。
在
MANAGED_FOLDER_NAME
的权限窗格中,点击添加主账号 。在新的主账号字段中,输入要授予其访问权限的主账号。如需详细了解您可以添加的主账号,请参阅主账号标识符。
在分配角色部分,使用选择角色下拉列表指定要向主账号授予的访问权限级别。
点击保存。
命令行
创建一个包含以下信息的 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
是您要为其应用 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" ] } ] }
其中:
IAM_ROLE
是您要授予的 IAM 角色。例如roles/storage.objectViewer
。PRINCIPAL_IDENTIFIER
标识您要授予代管式文件夹访问权限的人员。例如user:jane@gmail.com
。如需查看主账号标识符格式的列表,请参阅主账号标识符。
使用
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 政策
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要查看其 IAM 政策的托管文件夹所属的存储桶的名称。
在存储桶详情页面中,点击要查看其 IAM 政策的托管文件夹旁边的文件夹浏览器窗格中的更多选项图标
。点击修改访问权限。
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
安装并初始化 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
是您要查看其 IAM 政策的代管式文件夹所属的存储桶的名称。例如my-bucket
。MANAGED_FOLDER_NAME
是您要查看其 IAM 政策的托管式文件夹的名称。例如my-managed-folder/
。
从托管文件夹政策中移除主账号
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要查看其 IAM 政策的托管文件夹所属的存储桶的名称。
在存储桶详情页面中,点击要移除主账号的托管文件夹旁边的文件夹浏览器窗格中的更多选项图标
。点击修改访问权限。
在
FOLDER_NAME
的权限窗格的过滤条件字段中,输入主账号的名称。点击删除图标
以删除主账号。
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
是您要撤消其访问权限的代管式文件夹所属的存储桶的名称。例如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
是您要撤消其访问权限的代管式文件夹所属的存储桶的名称。例如my-bucket
。MANAGED_FOLDER_NAME
是您要移除其 IAM 政策的托管式文件夹的名称。例如my-managed-folder/
。
为代管式文件夹使用 IAM 条件
以下部分介绍了如何为代管式文件夹添加和移除 IAM 条件。如需查看代管式文件夹的 IAM 条件,请参阅查看代管式文件夹的 IAM 政策。如需详细了解如何将 IAM Conditions 与 Cloud Storage 搭配使用,请参阅 Conditions。
您必须先对存储桶启用统一存储桶级访问权限,然后才能向代管式文件夹添加条件。
为代管式文件夹设置新条件
命令行
创建用于定义条件的 JSON 或 YAML 文件,包括条件的
title
和条件的基于特性的逻辑expression
,还可以选择包括条件的description
。使用带有
--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
安装并初始化 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
是您要为其设置 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: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
。使用
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 条件的代管式文件夹的名称。
从代管式文件夹中移除条件
命令行
使用
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
请求将代管式文件夹的 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/
。
在文本编辑器中编辑
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
是您要更改其访问权限的代管式文件夹所属的存储桶的名称。例如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
) 角色。