本页面介绍了如何创建、停用和删除与项目中的服务账号关联的基于哈希的消息身份验证代码 (HMAC)。
准备工作
在 Cloud Storage 中使用此功能之前,您必须满足以下要求:
确保拥有的权限足以支持在所选项目中使用 HMAC 密钥:
如果您拥有该项目,那么您很可能已具备必要的权限。
您应对该项目拥有前缀为
storage.hmacKeys
的 IAM 权限。如需了解如何获取具有这些权限的角色(例如 Storage HMAC Key Admin),请参阅使用 IAM 权限。
您的项目应包含一个您要为其创建 HMAC 密钥的服务账号。如果您目前还没有服务账号,请参阅创建服务账号。
对 HMAC 密钥身份验证停用了
restrictAuthTypes
限制条件。如需了解如何检查和停用限制条件,请参阅创建和管理组织政策。
创建 HMAC 密钥
如需为服务账号创建 HMAC 密钥,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 设置页面。
选择互操作标签页。
点击 add_box 为服务账号创建密钥。
选择要与 HMAC 密钥相关联的服务账号。
点击创建密钥。
如需了解如何在 Google Cloud 控制台中获取有关失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用 hmac create
命令:
gcloud storage hmac create SERVICE_ACCOUNT_EMAIL
其中,SERVICE_ACCOUNT_EMAIL
是与您的服务账号相关联的电子邮件地址,例如 service-7550275089395@my-pet-project.iam.gserviceaccount.com
。
如果成功,响应会包含 HMAC 密钥资源,包括 accessId
和 secret
的值。
客户端库
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Terraform
您可以使用 Terraform 资源创建 HMAC 密钥。此示例还包含用于创建服务账号的资源。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过POST
hmacKeys 请求调用 JSON API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/projects/PROJECT_IDENTIFIER/hmacKeys?serviceAccountEmail=SERVICE_ACCOUNT_EMAIL"
其中:
PROJECT_IDENTIFIER
是与您要创建的密钥相关联的项目的 ID 或编号。例如my-pet-project
。SERVICE_ACCOUNT_EMAIL
是与您的服务账号相关联的电子邮件地址。例如service-7550275089395@my-pet-project.iam.gserviceaccount.com
。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过POST
HMAC Key 请求调用 XML API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/?Action=CreateAccessKey&UserName=SERVICE_ACCOUNT_EMAIL"
其中,
SERVICE_ACCOUNT_EMAIL
是与您的服务账号相关联的电子邮件地址,例如service-7550275089395@my-pet-project.iam.gserviceaccount.com
。
获取 HMAC 密钥信息
如需列出项目的 HMAC 密钥并获取密钥的相关信息,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 设置页面。
选择互操作标签页。
具有关联 HMAC 密钥的服务账号显示在服务账号 HMAC 部分的服务账号的访问密钥子部分中。
点击特定服务账号的名称可查看与其关联的 HMAC 密钥以及这些密钥的状态。
命令行
使用
hmac list
命令列出项目中的 HMAC 密钥:gcloud storage hmac list
如果成功,该命令会返回 HMAC 密钥访问 ID 的列表、每个密钥的状态以及与每个密钥关联的服务账号。
使用
hmac describe
命令检索特定密钥的元数据:gcloud storage hmac describe KEY_ACCESS_ID
其中,
KEY_ACCESS_ID
是所需密钥的访问 ID。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例检索与项目关联的 HMAC 密钥列表:
以下示例检索特定 HMAC 密钥的信息:
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过LIST
hmacKeys 请求调用 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/projects/PROJECT_IDENTIFIER/hmacKeys"
其中,
PROJECT_IDENTIFIER
是与您要列出的密钥相关联的项目的 ID 或编号。例如my-pet-project
。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过GET
HMAC Key 请求调用 XML API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/?Action=ListAccessKeys&UserName=SERVICE_ACCOUNT_EMAIL"
其中,
SERVICE_ACCOUNT_EMAIL
是与您的服务账号相关联的电子邮件地址,例如service-7550275089395@my-pet-project.iam.gserviceaccount.com
。
更新 HMAC 密钥的状态
如需切换 HMAC 密钥的活跃或非活跃状态,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 设置页面。
选择互操作标签页。
在服务账号的访问密钥子部分中,点击与要更新其状态的 HMAC 密钥关联的服务账号的名称。
点击要更新的密钥的状态。
如果要将密钥的状态从“非活跃”更改为“活跃”,请在随后出现的窗口中点击停用。
如果要将密钥的状态从“活跃”更改为“非活跃”,则无需执行其他步骤。
命令行
使用 hmac update
命令:
gcloud storage hmac update ACCESS_KEY_ID STATE
其中:
ACCESS_KEY_ID
是与您要更新的密钥相关联的访问 ID。STATE
是--activate
或--deactivate
。
如果成功,该命令会返回更新后的 HMAC 密钥元数据。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例会停用 HMAC 密钥:
以下示例会激活 HMAC 密钥:
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个包含以下信息的 JSON 文件:
{"state": "STATE"}
其中
STATE
是所需的密钥状态。例如INACTIVE
。使用
cURL
,通过PUT
hmacKeys 请求调用 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/projects/PROJECT_IDENTIFIER/hmacKeys/ACCESS_KEY_ID"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。PROJECT_IDENTIFIER
是与您要更新的密钥相关联的项目的 ID 或编号。例如my-pet-project
。ACCESS_KEY_ID
是与您要更新的密钥相关联的访问 ID。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过POST
HMAC Key 请求调用 XML API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/?Action=UpdateAccessKey&AccessKeyId=ACCESS_KEY_ID&Status=STATUS"
其中:
ACCESS_KEY_ID
是与您要更新的密钥相关联的访问 ID。STATUS
是所需的密钥状态。例如Inactive
。
更改 HMAC 密钥的状态时,状态更改最多需要 3 分钟才能传播到 Cloud Storage 系统。因此,在停用 HMAC 密钥后,您应等待至少 3 分钟,然后再删除该密钥。
删除 HMAC 密钥
HMAC 密钥必须处于非活跃状态才能将其删除。 如需删除处于非活跃状态的 HMAC 密钥,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 设置页面。
选择互操作标签页。
在服务账号的访问密钥子部分中,点击与要删除的 HMAC 密钥关联的服务账号的名称。
点击与要删除的密钥关联的垃圾箱图标。
在随后出现的对话框中,输入访问密钥 ID 的前 10 个字符(与窗口中提供的相同)。
点击删除。
命令行
使用 hmac delete
命令:
gcloud storage hmac delete ACCESS_KEY_ID
其中,ACCESS_KEY_ID
是与您要删除的密钥相关联的访问 ID。
如果成功,该命令不会返回响应。
客户端库
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 API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过DELETE
hmacKeys 请求调用 JSON API:curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/projects/PROJECT_IDENTIFIER/hmacKeys/ACCESS_KEY_ID"
其中:
PROJECT_IDENTIFIER
是与您要删除的密钥相关联的项目的 ID 或编号。例如my-pet-project
。ACCESS_KEY_ID
是与您要删除的密钥相关联的访问 ID。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过POST
HMAC Key 请求调用 XML API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/?Action=DeleteAccessKey&AccessKeyId=ACCESS_KEY_ID"
其中,
ACCESS_KEY_ID
是与您要删除的密钥相关联的访问 ID。
后续步骤
- 如要从用户账号 HMAC 密钥转换为服务账号 HMAC 密钥,请遵循迁移指南。
- 在基于身份验证的请求中使用 HMAC 密钥。