本页介绍了如何将手动创建的 Cloud Key Management Service 加密密钥与 Cloud Storage 搭配使用,包括在存储分区上设置默认密钥以及将密钥添加到个别对象。Cloud KMS 加密密钥是“客户管理的加密密钥” (CMEK)。此类密钥通过 Cloud KMS 创建和管理,并作为软件密钥存储在 HSM 集群中或存储在外部。
如果您想改用 Cloud KMS Autokey 功能按需生成用于保护 Cloud Storage 存储分区及其中的对象的密钥环和密钥,请参阅将 Autokey 与 Cloud Storage 资源结合使用。如需比较 CMEK 与 Cloud KMS(搭配 Autokey 和 Google 默认加密)的适用性,请参阅 CMEK 与 Google 拥有和 Google 管理的密钥的比较。
准备工作
在 Cloud Storage 中使用此功能之前,您必须:
为存储加密密钥的项目启用 Cloud KMS API。
对存储加密密钥的项目拥有足够的权限:
如果您拥有将存储密钥的项目,则您很可能具备必要的权限。
如果您计划创建新的加密密钥环和密钥,则应具备
cloudkms.keyRings.create
和cloudkms.cryptoKeys.create
权限。无论您是计划使用新的密钥环和密钥还是现有的密钥环和密钥,您都应对将用于加密的密钥具有
cloudkms.cryptoKeys.setIamPolicy
权限。此权限可让您为 Cloud Storage 服务代理提供 Cloud KMS 密钥的访问权限。
以上权限包含在 Cloud KMS Admin 角色中。
如需了解如何获取此角色或其他 Cloud KMS 角色,请参阅将 IAM 与 Cloud KMS 搭配使用。
拥有 Cloud KMS 密钥环,并且该密钥环中至少包含一个密钥。
密钥环必须与您要加密的数据位于同一位置,但可以位于不同项目中。如需了解可用的 Cloud KMS 位置,请参阅 Cloud KMS 位置。
具备足够的权限来处理 Cloud Storage 存储桶中的对象:
获取与包含 Cloud Storage 存储桶的项目关联的服务代理的电子邮件地址。执行此步骤时,如果服务代理当前不存在,则会自动创建。
为服务代理分配 Cloud KMS 密钥
要使用 CMEK,您必须授权与您的存储桶关联的 Cloud Storage 服务代理使用 Cloud KMS 密钥进行加密和解密:
控制台
- 在 Google Cloud 控制台中打开 Cloud Key Management Service 密钥浏览器。
打开 Cloud KMS 密钥浏览器 点击包含您要使用的密钥的密钥环的名称。
选中所需密钥对应的复选框。
右侧窗格中的权限标签变为可用。
在添加主账号对话框中,指定要授予访问权限的 Cloud Storage 服务代理的电子邮件地址。
在选择角色下拉列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter。
点击添加。
如需了解如何在 Google Cloud 控制台中获取有关失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用带有 --authorize-cmek
标志的 gcloud storage service-agent
命令,向与您的存储桶关联的服务代理授予使用 Cloud KMS 密钥加密和解密对象的权限:
gcloud storage service-agent --project=PROJECT_STORING_OBJECTS --authorize-cmek=KEY_RESOURCE
其中:
PROJECT_STORING_OBJECTS
是包含您要加密或解密的对象的项目的 ID 或编号,例如my-pet-project
。KEY_RESOURCE
是您的 Cloud KMS 密钥资源。
客户端库
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
标头生成访问令牌。创建一个包含以下信息的 JSON 文件:
{ "policy": { "bindings": { "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter", "members": "serviceAccount:SERVICE_AGENT_EMAIL_ADDRESS" }, } }
其中,
SERVICE_AGENT_EMAIL_ADDRESS
是与您的服务代理相关联的电子邮件地址,例如service-7550275089395@gs-project-accounts.iam.gserviceaccount.com
。使用
cURL
通过POST setIamPolicy
请求调用 Cloud KMS API:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://cloudkms.googleapis.com/v1/KEY_RESOURCE:setIamPolicy"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的 JSON 文件的路径。KEY_RESOURCE
是您的 Cloud KMS 密钥资源。
XML API
您不能使用 XML API 将 Cloud KMS 分配给服务代理。请改用其他 Cloud Storage 工具,例如 gcloud CLI。
使用默认加密密钥
设置存储桶的默认密钥
要添加、更改或移除在将对象写入存储桶时默认使用的 Cloud KMS 密钥:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击所需存储桶的名称。
在存储桶详情页面中,点击配置标签页。
点击与加密类型条目关联的铅笔图标。
设置或移除存储桶的默认 Cloud KMS 密钥。
如果存储桶当前未使用 Cloud KMS 密钥,请选择客户管理的密钥单选按钮,然后在关联的下拉菜单中选择一个可用密钥。
如果存储桶当前使用 Cloud KMS 密钥,请更改下拉菜单中的 Cloud KMS 密钥,或选择 Google 管理的密钥单选按钮来移除 Cloud KMS 密钥。
点击保存。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用带有相应标志的 gcloud storage buckets update
命令:
gcloud storage buckets update gs://BUCKET_NAME FLAG
其中:
BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。FLAG
是存储桶上默认密钥的所需设置。请采用以下某种格式:--default-encryption-key=
和 Cloud KMS 密钥资源(如果要添加或更改默认密钥)。--clear-default-encryption-key
(如果您想移除存储桶上的默认密钥)。
如果成功,响应将如下所示:
Updating gs://my-bucket/... Completed 1
客户端库
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
标头生成访问令牌。创建一个包含以下信息的 JSON 文件:
{ "encryption": { "defaultKmsKeyName": "KEY_RESOURCE" } }
其中,
KEY_RESOURCE
是您的 Cloud KMS 密钥资源。要从存储桶中移除默认的 Cloud KMS 密钥,请在 JSON 文件中使用以下代码:
{ "encryption": { "defaultKmsKeyName": null } }
使用
cURL
,通过PATCH
Bucket 请求调用 JSON API:curl -X PATCH --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?fields=encryption"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的 JSON 文件的路径。BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个包含以下信息的 XML 文件:
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
其中,
KEY_RESOURCE
是您的 Cloud KMS 密钥资源。要从存储桶中移除默认的 Cloud KMS 密钥,请在 XML 文件中使用以下内容:
<EncryptionConfiguration></EncryptionConfiguration>
使用
cURL
,通过PUT
Bucket 请求和encryptionConfig
查询字符串参数调用 XML API:curl -X PUT --data-binary @XML_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
其中:
XML_FILE_NAME
是您在第 2 步中创建的 XML 文件的路径。BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。
查看存储桶的默认密钥
如需查看存储桶当前设置的默认 Cloud KMS 密钥,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击所需存储桶的名称。
在存储桶详情页面中,点击配置标签页。
存储桶的当前默认密钥显示在加密密钥字段中。
如需了解如何在 Google Cloud 控制台中获取有关失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用带有 --format
标志的 gcloud storage buckets describe
命令:
gcloud storage buckets describe gs://BUCKET_NAME --format="default(default_kms_key)"
其中,BUCKET_NAME
是您要查看其密钥的存储桶的名称,例如 my-bucket
。
如果成功,响应将如下所示:
default_kms_key: KEY_RESOURCE
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看默认 KMS 密钥,请按照说明来显示存储桶的元数据,并在响应中查找默认 KMS 密钥字段。REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
,通过包含所需fields
的GET
Bucket 请求调用 JSON API:curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
其中,
BUCKET_NAME
是您要查看其密钥的存储桶的名称,例如my-bucket
。响应如下例所示:
{ "encryption" : { "defaultKmsKeyName": "KEY_RESOURCE" }, }
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
,通过包含encryption
查询参数的GET
Bucket 请求调用 XML API:curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
其中,
BUCKET_NAME
是您要查看其密钥的存储桶的名称,例如my-bucket
。响应如下例所示:
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
使用 Cloud KMS 密钥加密对象
您可以使用 Cloud KMS 密钥加密单个对象。如果您要使用与存储桶上设置的默认密钥不同的密钥,或者您没有在存储桶上设置默认密钥,则此功能非常有用。用于加密对象的密钥资源的名称存储在对象的元数据中。
控制台
Google Cloud 控制台不能用于按对象指定 Cloud KMS 密钥。请改用 gcloud CLI 或客户端库。
命令行
将 gcloud storage cp
命令与 --encryption-key
标志结合使用:
gcloud storage cp SOURCE_DATA gs://BUCKET_NAME/OBJECT_NAME --encryption-key=KEY_RESOURCE
其中:
SOURCE_DATA
是您要加密的数据的来源位置。这可以是cp
命令支持的任何来源位置。例如:gs://my-bucket/pets/old-dog.png
。BUCKET_NAME
是此复制命令的目标存储桶的名称。例如my-bucket
。OBJECT_NAME
是最终的加密对象的名称。例如pets/new-dog.png
。KEY_RESOURCE
是您要用于加密对象的 Cloud KMS 密钥资源。
客户端库
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
标头生成访问令牌。将对象的数据添加到请求正文。
使用
cURL
,通过POST
Object 请求调用 JSON API:curl -X POST --data-binary @OBJECT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ "https://storage.googleapis.com/upload/storage/v1/b/BUCKET_NAME/o?uploadType=media&name=OBJECT_NAME&kmsKeyName=KEY_RESOURCE"
其中:
OBJECT
是要上传的对象的路径,例如Desktop/dog.png
。OBJECT_CONTENT_TYPE
是该对象的内容类型,例如image/png
。BUCKET_NAME
是对象要上传到的存储桶的名称。例如my-bucket
。OBJECT_NAME
是要上传的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。KEY_RESOURCE
是 Cloud KMS 密钥资源。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。将对象的数据添加到请求正文。
使用
cURL
,通过PUT
Object 请求调用 XML API:curl -X PUT --data-binary @OBJECT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-kms-key-name: KEY_RESOURCE" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
其中:
OBJECT
是要上传的对象的路径,例如Desktop/dog.png
。OBJECT_CONTENT_TYPE
是该对象的内容类型,例如image/png
。BUCKET_NAME
是对象要上传到的存储桶的名称。例如my-bucket
。OBJECT_NAME
是要上传的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。KEY_RESOURCE
是您的 Cloud KMS 密钥资源。
从客户提供的密钥轮替为 Cloud KMS 密钥
如果您的对象使用客户提供的加密密钥进行加密,您可以通过重写对象,将对象轮替成使用 Cloud KMS 密钥:
控制台
Google Cloud 控制台不能用于按对象更改加密密钥。请改用 gcloud CLI 或客户端库。
命令行
使用带有相应标志的 gcloud storage objects update
命令:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --encryption-key=KMS_KEY --decryption-keys=CSEK_KEY
其中:
BUCKET_NAME
是您要轮替其密钥的对象所在存储桶的名称。例如my-bucket
。OBJECT_NAME
是您要轮替其密钥的对象的名称。例如pets/dog.png
。KMS_KEY
是您要用于加密对象的 Cloud KMS 密钥资源。CSEK_KEY
是对象上使用的当前客户提供的加密密钥。
客户端库
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
标头生成访问令牌。使用
cURL
,通过POST
Object 请求调用 JSON API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Length: 0" \ -H "x-goog-copy-source-encryption-algorithm: AES256" \ -H "x-goog-copy-source-encryption-key: OLD_ENCRYPTION_KEY" \ -H "x-goog-copy-source-encryption-key-sha256: HASH_OF_OLD_KEY" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME/rewriteTo/b/BUCKET_NAME/o/OBJECT_NAME?kmsKeyName=KEY_RESOURCE"
其中:
OLD_ENCRYPTION_KEY
是用于加密对象的当前 AES-256 密钥。HASH_OF_OLD_KEY
是 AES-256 密钥的当前 SHA-256 哈希值。BUCKET_NAME
是包含相关对象的存储桶的名称。例如my-bucket
。OBJECT_NAME
是您要轮替其密钥的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。KEY_RESOURCE
是 Cloud KMS 密钥资源。
XML API
XML API 不支持通过重写对象从客户提供的加密密钥轮替到 Cloud KMS 密钥。如需使用 XML API 执行此类轮替,您应执行以下操作:
。
确定用于加密对象的密钥
要查找用于加密对象的 Cloud KMS 密钥,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击包含所需对象的存储桶的名称。
此时会打开存储桶详情页面,其中“对象”标签页已选中。
导航到可能位于文件夹中的对象。
在加密列中,将鼠标悬停在所需对象的条目上。
密钥名称和版本采用以下格式显示:
LOCATION/KEY_RING_NAME/KEY_NAME/KEY_VERSION
命令行
使用带有 --format
标志的 gcloud storage objects describe
命令:
gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME --format="default(kms_key)"
其中:
BUCKET_NAME
是包含加密对象的存储桶的名称,例如my-bucket
。OBJECT_NAME
是加密对象的名称,例如pets/dog.png
。
如果成功,响应将如下所示:
kms_key: projects/my-pet-project/locations/LOCATION_NAME/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/VERSION_NUMBER
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看与对象关联的 KMS 密钥,请按照相关说明显示对象的元数据并在响应中查找 KMS 密钥名称字段。Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看与对象关联的 KMS 密钥,请按照相关说明显示对象的元数据并在响应中查找 KMS 密钥名称字段。Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看与对象关联的 KMS 密钥,请按照相关说明显示对象的元数据并在响应中查找 KMS 密钥名称字段。Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看与对象关联的 KMS 密钥,请按照相关说明显示对象的元数据并在响应中查找 KMS 密钥名称字段。PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看与对象关联的 KMS 密钥,请按照相关说明显示对象的元数据并在响应中查找 KMS 密钥名称字段。Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如需查看与对象关联的 KMS 密钥,请按照相关说明显示对象的元数据并在响应中查找 KMS 密钥名称字段。REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
,通过GET
Object 请求调用 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?fields=kmsKeyName"
其中:
BUCKET_NAME
是包含加密对象的存储桶的名称,例如my-bucket
。OBJECT_NAME
是加密对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。使用
cURL
,通过GET
Object 请求调用 XML API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?encryption"
其中:
BUCKET_NAME
是包含加密对象的存储桶的名称,例如my-bucket
。OBJECT_NAME
是加密对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
解密对象
系统会自动解密使用 Cloud KMS 密钥加密的对象,前提是相关服务代理有权访问该密钥。如需了解详情,请参阅使用 CMEK 的服务代理。
后续步骤
- 详细了解 Cloud Storage 中的 CMEK。
- 了解 Cloud Storage 中提供的其他加密选项。
- 轮替 Cloud KMS 密钥。
- 浏览可与 Cloud KMS 搭配使用的其他产品。
- 了解
restrictNonCmekServices
和restrictCmekCryptoKeyProjects
组织政策限制条件,以便更好地控制 Cloud KMS 密钥的使用情况。