本文档介绍了如何配置 Cloud Storage 存储桶中新对象允许或限制的加密方法。您可以配置存储桶,以强制或限制在存储分区内创建的任何新对象使用标准加密(Google 默认加密)、客户管理的加密密钥 (CMEK) 或客户提供的加密密钥 (CSEK)。
例如,为了满足有关加密密钥管理的合规性要求,您可以要求所有新对象都使用标准加密或 CMEK 进行加密,并限制使用客户提供的加密密钥。
如需详细了解可用的加密方法,请参阅数据加密选项。
对于创建新对象的所有操作(例如上传对象、复制对象、组合对象和恢复软删除对象),Cloud Storage 都会强制执行加密配置。
准备工作
如需获得为存储桶配置加密强制执行所需的权限,请让您的管理员为您授予存储桶的 Storage Admin (roles/storage.admin) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含为存储桶配置加密强制执行所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需为存储桶配置加密强制执行,您需要具备以下权限:
-
创建新存储桶时设置配置:
storage.buckets.create -
更新现有分桶的配置:
storage.buckets.update -
如果您使用 Google Cloud 控制台执行本页面上的步骤,请执行以下操作:
-
storage.buckets.get -
storage.buckets.list
-
创建强制使用加密类型的存储桶
您可以在创建新存储桶时,指定允许或限制用于存储桶中对象的加密方法。
如果您为存储桶设置了默认 Cloud KMS 密钥,则还必须允许使用 CMEK 或客户提供的加密密钥进行加密。
控制台
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
- 点击 创建。
在创建存储桶页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:
-
在开始使用部分中,执行以下操作:
-
在选择数据存储位置部分中,执行以下操作:
-
在选择数据存储方式部分中,执行以下操作:
-
在针对数据密集型工作负载优化存储部分中,执行以下操作:
-
如需启用分层命名空间,请选择在此存储桶上启用分层命名空间。
- 如需启用 Rapid Cache,请选择启用 Rapid Cache,然后按以下步骤操作:
-
如需创建缓存,请点击配置。
-
在随即显示的配置缓存设置对话框中,点击所列区域旁边的下拉箭头,然后选择要创建缓存的可用区。
-
点击完成。
-
-
-
在选择如何控制对对象的访问权限部分中,选择存储桶是否强制执行禁止公开访问,然后为存储桶对象选择统一的存储桶级访问权限。
-
在选择如何保护对象数据部分中,执行以下操作:
-
在数据保护下,选择您要为存储桶设置的任何选项。
-
如需更改软删除在删除对象后保留对象的时间,请选中软删除政策复选框,然后选择设置自定义保留时长选项。然后,指定要保留已删除对象的时长。
如需停用软删除(例如,如果存储桶主要包含短期临时数据),请取消选中软删除政策复选框。
-
如需选择如何加密对象数据,请点击标有数据加密的 展开箭头,然后执行以下操作:
- 在默认加密密钥类型部分中,选择相应存储桶的默认加密密钥。如果您选择 Cloud KMS 密钥,请提供 Cloud Key Management Service 密钥。
- 在加密强制执行规则部分中,针对密钥类型,选择允许或限制哪些加密类型用于存储桶中的新对象。
-
-
点击创建。
gcloud
创建一个包含以下信息的 JSON 文件:
{ "gmekEnforcement": {"restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE"}, "cmekEnforcement": {"restrictionMode": "CMEK_RESTRICTION_MODE"}, "csekEnforcement": {"restrictionMode": "CSEK_RESTRICTION_MODE"} }
替换以下内容:
-
STANDARD_ENCRYPTION_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用标准加密(Google 默认加密)。支持以下值:NotRestricted:新对象可以使用标准加密。FullyRestricted:新对象无法使用标准加密。
-
CMEK_RESTRICTION_MODE:在此存储桶中创建对象时是否允许使用 CMEK 进行加密。支持以下值:NotRestricted:新对象可以使用 CMEK。FullyRestricted:新对象无法使用 CMEK。
-
CSEK_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用客户提供的加密密钥进行加密。支持以下值:NotRestricted:新对象可以使用客户提供的加密密钥。FullyRestricted:新对象无法使用客户提供的加密密钥。
您必须允许至少一种加密类型。如果您省略了特定加密类型的强制执行配置,则默认允许该加密类型。
-
使用带有
--encryption-enforcement-file标志的gcloud storage buckets create命令:gcloud storage buckets create gs://BUCKET_NAME \ --encryption-enforcement-file=ENCRYPTION_ENFORCEMENT_FILE
替换以下内容:
BUCKET_NAME:相应存储桶的名称。ENCRYPTION_ENFORCEMENT_FILE:您在上一步中创建的 JSON 文件的路径。
客户端库
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 文件。如需查看完整的设置列表,请参阅 存储分区:插入文档。以下设置仅定义了存储桶名称和加密:
{ "name": "BUCKET_NAME", "encryption": { "googleManagedEncryptionEnforcementConfig": { "restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE" }, "customerManagedEncryptionEnforcementConfig": { "restrictionMode": "CMEK_RESTRICTION_MODE" }, "customerSuppliedEncryptionEnforcementConfig": { "restrictionMode": "CSEK_RESTRICTION_MODE" } } }
替换以下内容:
BUCKET_NAME:相应存储桶的名称。-
STANDARD_ENCRYPTION_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用标准加密(Google 默认加密)。支持以下值:NotRestricted:新对象可以使用标准加密。FullyRestricted:新对象无法使用标准加密。
-
CMEK_RESTRICTION_MODE:在此存储桶中创建对象时是否允许使用 CMEK 进行加密。支持以下值:NotRestricted:新对象可以使用 CMEK。FullyRestricted:新对象无法使用 CMEK。
-
CSEK_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用客户提供的加密密钥进行加密。支持以下值:NotRestricted:新对象可以使用客户提供的加密密钥。FullyRestricted:新对象无法使用客户提供的加密密钥。
您必须允许至少一种加密类型。如果您省略了特定加密类型的强制执行配置,则默认允许该加密类型。
使用
cURL,通过POSTBucket 请求调用 JSON API:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b?project=PROJECT_ID"
替换以下内容:
JSON_FILE_NAME:您在上一步中创建的 JSON 文件的路径。PROJECT_ID:存储桶所属项目的 ID 或编号。
XML API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。创建一个包含存储桶设置的 XML 文件。如需查看完整的设置列表,请参阅 XML:创建存储桶文档。以下设置仅定义了加密强制执行:
<CreateBucketConfiguration> <EncryptionConfiguration> <GoogleManagedEncryptionEnforcement> <RestrictionMode>STANDARD_ENCRYPTION_RESTRICTION_MODE</RestrictionMode> </GoogleManagedEncryptionEnforcement> <CustomerManagedEncryptionEnforcement> <RestrictionMode>CMEK_RESTRICTION_MODE</RestrictionMode> </CustomerManagedEncryptionEnforcement> <CustomerSuppliedEncryptionEnforcement> <RestrictionMode>CSEK_RESTRICTION_MODE</RestrictionMode> </CustomerSuppliedEncryptionEnforcement> </EncryptionConfiguration> </CreateBucketConfiguration>
替换以下内容:
-
STANDARD_ENCRYPTION_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用标准加密(Google 默认加密)。支持以下值:NotRestricted:新对象可以使用标准加密。FullyRestricted:新对象无法使用标准加密。
-
CMEK_RESTRICTION_MODE:在此存储桶中创建对象时是否允许使用 CMEK 进行加密。支持以下值:NotRestricted:新对象可以使用 CMEK。FullyRestricted:新对象无法使用 CMEK。
-
CSEK_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用客户提供的加密密钥进行加密。支持以下值:NotRestricted:新对象可以使用客户提供的加密密钥。FullyRestricted:新对象无法使用客户提供的加密密钥。
您必须允许至少一种加密类型。如果您省略了特定加密类型的强制执行配置,则默认允许该加密类型。
-
使用
cURL,通过PUTBucket 请求调用 XML API:curl -X PUT --data-binary @XML_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage./BUCKET_NAME"
替换以下内容:
XML_FILE_NAME:您在上一步中创建的 XML 文件的路径。PROJECT_ID:存储桶所属项目的 ID 或编号。BUCKET_NAME:相应存储桶的名称。
更新存储桶允许的加密类型
如需更新现有存储桶中允许用于新对象的加密方法,请完成以下步骤。
如果存储桶已设置默认 KMS 密钥,则您无法同时限制 CMEK 和客户提供的加密密钥,因为这样做会阻止新对象的创建。允许在此类存储桶上使用 CMEK 或 CSEK,或者从存储桶中移除默认 Cloud KMS 密钥。
控制台
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,点击相应存储桶的名称。
点击配置标签页。
在保护部分,点击 修改加密。
在加密强制执行规则部分中,针对密钥类型,选择要允许或限制存储桶中新对象的哪些加密类型。
点击保存。
gcloud
创建一个包含以下信息的 JSON 文件:
{ "gmekEnforcement": {"restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE"}, "cmekEnforcement": {"restrictionMode": "CMEK_RESTRICTION_MODE"}, "csekEnforcement": {"restrictionMode": "CSEK_RESTRICTION_MODE"} }
替换以下内容:
-
STANDARD_ENCRYPTION_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用标准加密(Google 默认加密)。支持以下值:NotRestricted:新对象可以使用标准加密。FullyRestricted:新对象无法使用标准加密。
-
CMEK_RESTRICTION_MODE:在此存储桶中创建对象时是否允许使用 CMEK 进行加密。支持以下值:NotRestricted:新对象可以使用 CMEK。FullyRestricted:新对象无法使用 CMEK。
-
CSEK_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用客户提供的加密密钥进行加密。支持以下值:NotRestricted:新对象可以使用客户提供的加密密钥。FullyRestricted:新对象无法使用客户提供的加密密钥。
您必须允许至少一种加密类型。如果您省略加密类型,系统会保留现有配置。
-
使用带有
--encryption-enforcement-file标志的gcloud storage buckets update命令:gcloud storage buckets update gs://BUCKET_NAME \ --encryption-enforcement-file=ENCRYPTION_ENFORCEMENT_FILE
替换以下内容:
BUCKET_NAME:相应存储桶的名称。ENCRYPTION_ENFORCEMENT_FILE:您在上一步中创建的 JSON 文件的路径。
更新后的配置最多可能需要两分钟才能生效。
客户端库
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": { "googleManagedEncryptionEnforcementConfig": { "restrictionMode": "STANDARD_ENCRYPTION_RESTRICTION_MODE" }, "customerManagedEncryptionEnforcementConfig": { "restrictionMode": "CMEK_RESTRICTION_MODE" }, "customerSuppliedEncryptionEnforcementConfig": { "restrictionMode": "CSEK_RESTRICTION_MODE" } } }
替换以下内容:
-
STANDARD_ENCRYPTION_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用标准加密(Google 默认加密)。支持以下值:NotRestricted:新对象可以使用标准加密。FullyRestricted:新对象无法使用标准加密。
-
CMEK_RESTRICTION_MODE:在此存储桶中创建对象时是否允许使用 CMEK 进行加密。支持以下值:NotRestricted:新对象可以使用 CMEK。FullyRestricted:新对象无法使用 CMEK。
-
CSEK_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用客户提供的加密密钥进行加密。支持以下值:NotRestricted:新对象可以使用客户提供的加密密钥。FullyRestricted:新对象无法使用客户提供的加密密钥。
您必须允许至少一种加密类型。如果您省略加密类型,系统会保留现有配置。
-
使用
cURL,通过PATCHBucket 请求调用 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./storage/v1/b/BUCKET_NAME?fields=encryption"
替换以下内容:
JSON_FILE_NAME:您在上一步中创建的 JSON 文件的路径。BUCKET_NAME:相应存储桶的名称。
更新后的配置最多可能需要两分钟才能生效。
XML API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。创建一个包含存储桶加密设置的 XML 文件。以下设置仅定义加密强制执行配置。
<EncryptionConfiguration> <GoogleManagedEncryptionEnforcement> <RestrictionMode>STANDARD_ENCRYPTION_RESTRICTION_MODE</RestrictionMode> </GoogleManagedEncryptionEnforcement> <CustomerManagedEncryptionEnforcement> <RestrictionMode>CMEK_RESTRICTION_MODE</RestrictionMode> </CustomerManagedEncryptionEnforcement> <CustomerSuppliedEncryptionEnforcement> <RestrictionMode>CSEK_RESTRICTION_MODE</RestrictionMode> </CustomerSuppliedEncryptionEnforcement> </EncryptionConfiguration>
替换以下内容:
-
STANDARD_ENCRYPTION_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用标准加密(Google 默认加密)。支持以下值:NotRestricted:新对象可以使用标准加密。FullyRestricted:新对象无法使用标准加密。
-
CMEK_RESTRICTION_MODE:在此存储桶中创建对象时是否允许使用 CMEK 进行加密。支持以下值:NotRestricted:新对象可以使用 CMEK。FullyRestricted:新对象无法使用 CMEK。
-
CSEK_RESTRICTION_MODE:在相应存储桶中创建对象时,是否允许使用客户提供的加密密钥进行加密。支持以下值:NotRestricted:新对象可以使用客户提供的加密密钥。FullyRestricted:新对象无法使用客户提供的加密密钥。
您必须允许至少一种加密类型。
-
使用
cURL通过范围限定为?encryptionConfig的PUTBucket 请求调用 XML API:curl -X PUT --data-binary @XML_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage./BUCKET_NAME?encryptionConfig"
替换以下内容:
XML_FILE_NAME:您在上一步中创建的 XML 文件的路径。BUCKET_NAME:相应存储桶的名称。
更新后的配置最多可能需要两分钟才能生效。
查看存储桶的加密设置
如需查看存储桶允许的加密方法,请参阅获取存储桶元数据。