本页面介绍了如何设置存储桶的 Identity and Access Management (IAM) 政策,以便您可以控制对这些存储桶中的对象和托管式文件夹的访问权限。
如果您要查找其他访问权限控制方法,请参阅以下资源:
如需了解如何更精细地控制对象组,请参阅设置和管理托管式文件夹的 IAM 政策。
如需了解控制存储桶中个别对象的访问权限的其他方法,请参阅访问控制列表。
如需详细了解如何控制 Cloud Storage 资源的访问权限,请参阅访问权限控制概览。
所需的角色
如需获得设置和管理存储桶的 IAM 政策所需的权限,请让管理员向您授予存储桶的 Storage Admin (roles/storage.admin
) IAM 角色。
此角色包含以下权限,这些权限是设置和管理存储桶的 IAM 政策所需的权限:
storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
storage.buckets.update
storage.buckets.list
- 仅当您计划使用 Google Cloud 控制台执行本页面上的任务时,才需要此权限。
您还可以通过自定义角色获得这些权限。
将主账号添加到存储桶级层政策中
如需查看与 Cloud Storage 关联的角色列表,请参阅 IAM 角色。如需了解可授予 IAM 角色的实体,请参阅主账号标识符。
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要为主账号授予角色的存储桶的名称。
选择页面顶部附近的权限标签。
点击 add_box 授予访问权限按钮。
系统会显示“添加主账号”对话框。
在新主账号字段中,输入需要访问您存储桶的一个或多个身份。
从选择角色下拉菜单中选择一个或多个角色。 您选择的角色将显示在窗格中,其中包含对角色授予的权限的简短说明。
点击保存。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用 buckets add-iam-policy-binding
命令:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=PRINCIPAL_IDENTIFIER --role=IAM_ROLE
其中:
BUCKET_NAME
是您要为主账号授予对其访问权限的存储桶的名称。例如my-bucket
。PRINCIPAL_IDENTIFIER
标识您要授予存储桶访问权限的身份。例如user:[email protected]
。如需查看主账号标识符格式的列表,请参阅主账号标识符。IAM_ROLE
是您要向主账号授予的 IAM 角色,例如roles/storage.objectViewer
。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个包含以下信息的 JSON 文件:
{ "bindings":[ { "role": "IAM_ROLE", "members":[ "PRINCIPAL_IDENTIFIER" ] } ] }
其中:
IAM_ROLE
是您要授予的 IAM 角色。例如roles/storage.objectViewer
。PRINCIPAL_IDENTIFIER
标识您要授予存储桶访问权限的身份。例如user:[email protected]
。如需查看主账号标识符格式的列表,请参阅主账号标识符。
使用
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/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。BUCKET_NAME
是您要为主账号授予对其访问权限的存储桶的名称。例如my-bucket
。
查看存储桶的 IAM 政策
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要查看其政策的存储桶的名称。
在存储桶详情页面中,点击配置标签页。
应用于存储桶的 IAM 政策显示在权限部分中。
可选:使用过滤条件栏过滤结果。
如果按主账号进行搜索,结果中将显示主账号所获得的每个角色。
命令行
gcloud storage buckets get-iam-policy gs://BUCKET_NAME
其中 BUCKET_NAME
是您要查看 IAM 政策的存储桶的名称。例如 my-bucket
。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
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/iam"
其中
BUCKET_NAME
是您要查看 IAM 政策的存储桶的名称。例如my-bucket
。
从存储桶级层政策中移除主账号
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要从中移除主账号角色的存储桶的名称。
在存储桶详情页面中,点击配置标签页。
应用于存储桶的 IAM 政策显示在权限部分中。
在按主账号查看标签页中,选中要移除的主账号的复选框。
点击移除访问权限按钮。
在出现的叠加窗口中,点击确认。
如需了解如何在 Google Cloud 控制台中获取有关失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用 buckets remove-iam-policy-binding
命令:
gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME --member=PRINCIPAL_IDENTIFIER --role=IAM_ROLE
其中:
BUCKET_NAME
是您要撤销其访问权限的存储桶的名称,例如my-bucket
。PRINCIPAL_IDENTIFIER
标识您要撤销访问权限的身份。例如user:[email protected]
。如需查看主账号标识符格式的列表,请参阅主账号标识符。IAM_ROLE
是您要撤销的 IAM 角色。例如roles/storage.objectViewer
。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
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/iam"
其中
BUCKET_NAME
是您要查看 IAM 政策的存储桶的名称。例如my-bucket
。创建一个包含您在上一步中检索的政策的 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/iam"
其中:
JSON_FILE_NAME
是您在第 3 步中创建的文件的路径。BUCKET_NAME
是您要移除对其访问权限的存储桶的名称,例如my-bucket
。
在存储桶上使用 IAM Conditions
以下各个部分介绍如何在存储桶中添加和移除 IAM Conditions。如需查看存储桶的 IAM Conditions,请参阅查看存储桶的 IAM 政策。如需详细了解如何将 IAM Conditions 与 Cloud Storage 搭配使用,请参阅 Conditions。
您必须先对存储桶启用统一存储桶级层访问权限,然后才能添加条件。
为存储桶设置新条件
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要为其添加新条件的存储桶的名称。
在存储桶详情页面中,点击配置标签页。
应用于存储桶的 IAM 政策显示在权限部分中。
点击 + 授予访问权限。
对于新主账号,填写您要向其授予存储桶访问权限的主账号。
对于您要应用条件的每个角色:
选择要授予主账号的角色。
点击添加条件,以打开修改条件表单。
填写条件的标题。说明字段为选填字段。
使用条件构建器直观地构建条件,或使用条件编辑器标签页输入 CEL 表达式。
点击保存可返回添加主账号表单。如需添加多个角色,请点击添加其他角色。
点击保存。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
创建用于定义条件的 JSON 或 YAML 文件,包括条件的
title
和条件的基于特性的逻辑expression
,还可以选择包括条件的description
。将
buckets add-iam-policy-binding
命令与--condition-from-file
标志结合使用:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=PRINCIPAL_IDENTIFIER --role=IAM_ROLE --condition-from-file=CONDITION_FILE
其中:
BUCKET_NAME
是您要为主账号授予对其访问权限的存储桶的名称。例如my-bucket
。PRINCIPAL_IDENTIFIER
标识应用条件的身份。例如user:[email protected]
。如需查看主账号标识符格式的列表,请参阅主账号标识符。IAM_ROLE
是您要向主账号授予的 IAM 角色,例如roles/storage.objectViewer
。CONDITION_FILE
是您在上一步中创建的文件。
或者,您可以使用 --condition
标志直接在命令中添加条件,而不是使用 --condition-from-file
标志。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
GET getIamPolicy
请求将存储桶的 IAM 政策保存到临时 JSON 文件中:curl \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' > tmp-policy.json
其中
BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。在文本编辑器中编辑
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 Conditions 的存储桶来说,该值需要为 3。IAM_ROLE
是应用条件的角色。例如roles/storage.objectViewer
。PRINCIPAL_IDENTIFIER
标识应用条件的身份。例如user:[email protected]
。如需查看主账号标识符格式的列表,请参阅主账号标识符。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/iam"
其中
BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。
从存储桶中移除条件
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击要从中移除条件的存储桶的名称。
在存储桶详情页面中,点击配置标签页。
应用于存储桶的 IAM 政策显示在权限部分中。
点击与条件相关联的主账号对应的修改图标 edit。
在显示的修改访问权限叠加层中,点击您希望删除的条件的名称。
在显示的修改条件叠加层中,点击删除,然后点击确认。
点击保存。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用
buckets get-iam-policy
命令将存储桶的 IAM 政策保存到临时 JSON 文件中。gcloud storage buckets get-iam-policy gs://BUCKET_NAME > tmp-policy.json
在文本编辑器中编辑
tmp-policy.json
文件以从 IAM 政策中移除条件。使用
buckets set-iam-policy
为存储桶设置修改后的 IAM 政策。gcloud storage buckets set-iam-policy gs://BUCKET_NAME tmp-policy.json
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
GET getIamPolicy
请求将存储桶的 IAM 政策保存到临时 JSON 文件中:curl \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' > tmp-policy.json
其中
BUCKET_NAME
是您要授予其访问权限的存储桶的名称。例如my-bucket
。在文本编辑器中编辑
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/iam"
其中
BUCKET_NAME
是您要修改其 IAM 政策的存储桶的名称。例如my-bucket
。
最佳做法
您应设置为主账号授予必需的访问权限所需的最低权限角色。例如,如果团队成员只需要读取存储在存储桶中的对象,请为其授予 Storage Object Viewer (roles/storage.objectViewer
) 角色,而不是 Storage Object Admin (roles/storage.objectAdmin
) 角色。同样,如果团队成员需要完全控制存储桶中的对象而非存储桶本身,请为其授予 Storage Object Admin (roles/storage.objectAdmin
) 角色,而不是 Storage Admin (roles/storage.admin
) 角色。
后续步骤
- 了解如何公开共享您的数据。
- 查看具体的共享和协作示例。
- 了解使用 IAM 时的最佳做法。
- 了解如何为存储桶使用角色建议。
- 如需排查与 IAM 角色和权限相关的失败操作的问题,请参阅问题排查。