本页面介绍如何将自己的加密密钥(称为 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标头生成访问令牌。使用
cURL,通过POSTObject 请求调用 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标头生成访问令牌。使用
cURL通过PUTOBJECT 请求调用 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标头生成访问令牌。使用
cURL,通过GETObject 请求调用 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标头生成访问令牌。使用
cURL通过GETOBJECT 请求调用 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标头生成访问令牌。使用
cURL,通过POSTObject 请求调用 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 将新的客户提供的密钥应用到对象,您应该:
后续步骤
详细了解客户提供的加密密钥。