本页面介绍如何将自己的加密密钥(称为 CSEK)用于 Cloud Storage。如需了解 Cloud Storage 中的其他加密选项,请参阅数据加密选项。
生成您自己的加密密钥
您可以通过许多方法来生成 Base64 编码的 AES-256 加密密钥。以下是一些示例:
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
使用加密密钥上传
要使用客户提供的加密密钥上传对象,请执行以下操作:
控制台
Google Cloud 控制台不能用于使用客户提供的加密密钥上传对象。请改用 Google Cloud CLI 或客户端库。
命令行
将 gcloud storage cp
命令与 --encryption-key
标志结合使用:
gcloud storage cp SOURCE_DATA gs://BUCKET_NAME/OBJECT_NAME --encryption-key=YOUR_ENCRYPTION_KEY
其中:
SOURCE_DATA
是您要加密的数据的来源位置。这可以是cp
命令支持的任何来源位置。例如,本地文件(如Desktop/dogs.png
)或其他 Cloud Storage 对象(如gs://my-bucket/pets/old-dog.png
)。BUCKET_NAME
是此复制命令的目标存储桶的名称。例如my-bucket
。OBJECT_NAME
是最终的加密对象的名称。例如pets/new-dog.png
。YOUR_ENCRYPTION_KEY
是您要用于加密上传对象的 AES-256 密钥。
客户端库
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
,通过POST
Object 请求调用 JSON API:curl -X POST --data-binary @OBJECT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ "https://storage.googleapis.com/upload/storage/v1/b/BUCKET_NAME/o?uploadType=media&name=OBJECT_NAME"
其中:
OBJECT
是要上传的对象的路径,例如Desktop/dogs.png
。OBJECT_CONTENT_TYPE
是该对象的内容类型,例如image/png
。YOUR_ENCRYPTION_KEY
是用于加密上传对象的 AES-256 密钥。HASH_OF_YOUR_KEY
是 AES-256 密钥的 SHA-256 哈希值。BUCKET_NAME
是对象要上传到的目标存储桶的名称。例如my-bucket
。OBJECT_NAME
是要上传的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
如需详细了解特定于加密的标头,请参阅加密请求标头。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以使用 OAuth 2.0 Playground 创建访问令牌,并将其包含在
Authorization
标头中。使用
cURL
,通过PUT
OBJECT 请求调用 XML API:curl -X -i PUT --data-binary @OBJECT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
其中:
OBJECT
是要上传的对象的路径,例如Desktop/dogs.png
。OBJECT_CONTENT_TYPE
是该对象的内容类型,例如image/png
。YOUR_ENCRYPTION_KEY
是用于加密上传对象的 AES-256 密钥。HASH_OF_YOUR_KEY
是 AES-256 密钥的 SHA-256 哈希值。BUCKET_NAME
是对象要上传到的目标存储桶的名称。例如my-bucket
。OBJECT_NAME
是要上传的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
如需详细了解特定于加密的标头,请参阅加密请求标头。
下载已加密的对象
要下载存储在 Cloud Storage 中的加密对象(使用客户提供的加密密钥加密),请执行以下操作:
控制台
Google Cloud 控制台不能用于下载使用客户提供的加密密钥加密的对象。请改用 Google Cloud CLI 或客户端库。
命令行
将 gcloud storage cp
命令与 --decryption-keys
标志结合使用:
gcloud storage cp gs://BUCKET_NAME/OBJECT_NAME OBJECT_DESTINATION --decryption-keys=YOUR_ENCRYPTION_KEY
其中:
BUCKET_NAME
是包含要下载的对象的存储桶名称,例如my-bucket
。OBJECT_NAME
是要下载的对象的名称。例如pets/dog.png
。OBJECT_DESTINATION
是您要保存您的对象的位置。例如Desktop
。YOUR_ENCRYPTION_KEY
是上传对象时用于加密对象的 AES-256 密钥。
客户端库
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
,通过GET
Object 请求调用 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ -o "SAVE_TO_LOCATION" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?alt=media"
其中:
YOUR_ENCRYPTION_KEY
是您用于加密对象的 AES-256 密钥。HASH_OF_YOUR_KEY
是 AES-256 密钥的 SHA-256 哈希值。SAVE_TO_LOCATION
是您要保存您的对象的位置。例如Desktop/dog.png
。BUCKET_NAME
是您要从中下载对象的存储桶的名称。例如my-bucket
。OBJECT_NAME
是要下载的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
如需详细了解特定于加密的标头,请参阅加密请求标头。
XML API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以使用 OAuth 2.0 Playground 创建访问令牌,并将其包含在
Authorization
标头中。使用
cURL
,通过GET
OBJECT 请求调用 XML API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ -o "SAVE_TO_LOCATION" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
其中:
YOUR_ENCRYPTION_KEY
是您用于加密对象的 AES-256 密钥。HASH_OF_YOUR_KEY
是 AES-256 密钥的 SHA-256 哈希值。SAVE_TO_LOCATION
是您要保存您的对象的位置。例如Desktop/dog.png
。BUCKET_NAME
是您要从中下载对象的存储桶的名称。例如my-bucket
。OBJECT_NAME
是要下载的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
如需详细了解特定于加密的标头,请参阅加密请求标头。
轮替加密密钥
要轮替客户提供的加密密钥,请执行以下操作:
控制台
Google Cloud 控制台不能用于轮替客户提供的加密密钥。请改用 Google Cloud CLI 或客户端库。
命令行
使用带有相应标志的 gcloud storage objects update
命令:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --encryption-key=NEW_KEY --decryption-keys=OLD_KEY
其中:
BUCKET_NAME
是您要轮替其密钥的对象所在存储桶的名称。例如my-bucket
。OBJECT_NAME
是您要轮替其密钥的对象的名称。例如pets/dog.png
。NEW_KEY
是客户提供的新加密密钥,您需要使用该密钥来加密对象。OLD_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
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。使用
cURL
,通过POST
Object 请求调用 JSON API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Length: 0" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: NEW_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_NEW_KEY" \ -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"
其中:
NEW_ENCRYPTION_KEY
是用于加密对象的新 AES-256 密钥。HASH_OF_NEW_KEY
是新 AES-256 密钥的 SHA-256 哈希值。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
。
如需详细了解特定于加密的标头,请参阅加密请求标头。
XML API
XML API 不支持通过重写对象轮替客户提供的加密密钥。如需使用 XML API 将新的客户提供的密钥应用到对象,您应该:
后续步骤
详细了解客户提供的加密密钥。