本页面介绍如何将 Cloud Key Management Service 加密密钥与 Cloud Storage 搭配使用,包括在存储桶上设置默认密钥以及将密钥添加到个别对象。Cloud KMS 加密密钥是“客户管理的加密密钥”(CMEK)。此类密钥通过 Cloud KMS 创建和管理,并作为软件密钥存储或存储在外部。
准备工作
在 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 Storage 存储桶中的对象:
获取与包含 Cloud Storage 存储桶的项目关联的服务代理的电子邮件地址。执行此步骤时,如果服务代理当前不存在,则会自动创建。
为服务代理分配 Cloud KMS 密钥
要使用 CMEK,您必须授权与您的存储桶关联的 Cloud Storage 服务代理使用 Cloud KMS 密钥进行加密和解密:
控制台
- 在 Trusted Cloud 控制台中,前往密钥管理页面。
点击包含您要使用的密钥的密钥环的名称。
选中所需密钥对应的复选框。
右侧窗格中的权限标签变为可用。
在添加主账号对话框中,指定要授予访问权限的 Cloud Storage 服务代理的电子邮件地址。
在选择角色下拉列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter。
点击添加。
如需了解如何在 Trusted 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
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.s3ns-system.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 密钥:
控制台
- 在 Trusted Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,点击所需存储桶的名称。
在存储桶详情页面中,点击配置标签页。
点击与加密类型条目关联的铅笔图标。
设置或移除存储桶的默认 Cloud KMS 密钥。
如果存储桶当前未使用 Cloud KMS 密钥,请选择客户管理的密钥单选按钮,然后在关联的下拉菜单中选择一个可用密钥。
如果存储桶当前使用 Cloud KMS 密钥,请在下拉菜单中更改 Cloud KMS 密钥,或选择 Google Cloud-powered encryption key 单选按钮来移除 Cloud KMS 密钥。
点击保存。
如需了解如何在 Trusted 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
以下示例在存储桶上设置默认的客户管理的加密密钥:
以下示例从存储桶中移除默认的客户管理的密钥:
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.s3nsapis.fr/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.s3nsapis.fr/BUCKET_NAME?encryptionConfig"
其中:
XML_FILE_NAME
是您在第 2 步中创建的 XML 文件的路径。BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。
查看存储桶的默认密钥
如需查看存储桶当前设置的默认 Cloud KMS 密钥,请执行以下操作:
控制台
- 在 Trusted Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,点击所需存储桶的名称。
在存储桶详情页面中,点击配置标签页。
存储分区的当前默认密钥显示在加密密钥字段中。
如需了解如何在 Trusted 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
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.s3nsapis.fr/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.s3nsapis.fr/BUCKET_NAME?encryptionConfig"
其中,
BUCKET_NAME
是您要查看其密钥的存储桶的名称,例如my-bucket
。响应如下例所示:
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
使用 Cloud KMS 密钥加密对象
您可以使用 Cloud KMS 密钥加密单个对象。如果您要使用与存储桶上设置的默认密钥不同的密钥,或者您没有在存储桶上设置默认密钥,则此功能非常有用。用于加密对象的密钥资源的名称存储在对象的元数据中。
控制台
Trusted 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
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.s3nsapis.fr/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.s3nsapis.fr/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 密钥:
控制台
Trusted 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
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.s3nsapis.fr/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 密钥,请执行以下操作:
控制台
- 在 Trusted 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
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.s3nsapis.fr/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.s3nsapis.fr/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 密钥的使用情况。