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