数据协作者需要设置以下资源,以便工作负载可以访问其保密数据:
存储在 Google Cloud中的加密数据本身。
可以解密相应数据的服务账号。
使用工作负载身份池 (WIP) 进行证明验证。在工作负载获得 WIP 授权后,它可以模拟数据协作者项目中的服务账号来检索机密数据。
此外,数据协作者需要选择 Confidential Space 工作负载的结果存储位置,以及所呈现的数据是唯一数据还是共享数据。例如,您可以将同一结果输出到属于每个数据协作者的多个 Cloud Storage 存储分区。
存储数据
您可以使用任何可存储数据的 Google Cloud 服务来托管您的机密数据。例如,您可以使用以下某项服务:
您应确保这些数据在静态时已加密,无论是使用内置功能还是使用 Cloud Key Management Service (Cloud KMS) 等服务。
创建用于解密机密数据的服务账号
您可以通过服务账号向 Confidential Space 工作负载提供机密数据,并减少人工接触这些数据的机会。
例如,您可以使用 Cloud KMS 对 Cloud Storage 中的机密文件进行加密,然后创建有权访问相应数据和解密密钥的服务账号。
然后,您需要将该服务账号与 WIP 相关联。另一个项目中的授权 Confidential Space 工作负载随后可以使用该 WIP 来模拟解密数据的服务账号、检索解密后的数据并对其进行处理。
由于服务账号用来机密数据解密和处理,因此机密数据公开范围仅限于其所有者。由于工作负载在机密虚拟机中运行,因此其基于硬件的内存加密功能可确保您的数据在使用时保持非公开状态。此外,使用生产环境 Confidential Space 映像的工作负载虚拟机也会停用 SSH,这意味着在虚拟机运行期间,任何人都无法访问该虚拟机。
如需查看相关示例,请参阅创建您的第一个 Confidential Space 环境。
创建用于证明验证的 WIP 和提供程序
为了帮助保护数据免遭不受信任工作负载操作员的影响,Confidential Space 实现了证明流程,以检测对工作负载映像或其 TEE 的修改。该流程基于安全强化型虚拟机测量的启动和扩展运行时测量,并在虚拟可信平台模块 (vTPM) 设备中的受保护、仅扩展寄存器中捕获启动序列测量。
Confidential Space 证明服务生成 OpenID Connect (OIDC) 令牌,其中包括这些 vTPM 证明,其形式可以由 WIP 验证,而 WIP 根据作为特性条件添加到提供方的政策检查这些证明。这些令牌由 Google 签名(在过去一小时内),会自动刷新。
如果 WIP 授权工作负载,则工作负载可以模拟项目中的服务账号来解密和检索机密数据。
如需设置 WIP 和提供方,请完成以下说明:
将解密服务账号与 WIP 相关联,并授予
iam.workloadIdentityUser
角色。创建 OIDC 提供方,并提供以下详细信息:
颁发者 URI 为
https://confidentialcomputing.googleapis.com/
。https://sts.googleapis.com
的允许受众群体。提供方属性映射
google.subject
,值为assertion.sub
。用于验证工作负载证明的属性条件。如需了解可用的选项,请参阅创建证明政策。
创建证明政策
在创建 WIP 时,您需要添加属性条件,即工作负载必须通过的条件才能访问您的数据。对于 Confidential Space,这些特性条件构成了您的证明政策。
政策采用通用表达式语言 (CEL) 编写,并由一系列可使用 &&
运算符链接的断言组成。
以下举例说明了如何使用 gcloud CLI 将提供方与用于定义政策的 attribute-condition
选项添加到工作负载身份池:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
--location=global \
--workload-identity-pool=user-pool-name \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject=assertion.sub" \
--attribute-condition="assertion.submods.container.image_digest =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"
在此示例中,尝试模拟关联到工作负载身份池的服务账号的外部身份,必须证明以下详细信息,且其值与政策值匹配:
工作负载容器的映像摘要
关联到工作负载虚拟机的服务账号的地址
该
CONFIDENTIAL_SPACE
是在虚拟机上运行的软件,具有所有内置安全保证。生产 Confidential Space 映像支持特性
证明断言
下表详细介绍了构建证明政策的可用断言。它们可以验证 Confidential Space 映像、工作负载容器和虚拟机做出的断言。
图片断言
断言 | 类型 | 说明 |
---|---|---|
互动对象:
|
已定义的字符串 |
验证 Confidential Space 映像是调试版本还是生产版本。 有效值包括:
示例以下代码验证是否使用了调试版本的 Confidential Space 映像:
以下代码验证是否使用了生产版本的 Confidential Space 映像:
|
assertion.submods.confidential_space.support_attributes |
字符串数组 |
验证 TEE 的安全版本是否为生产 Confidential Space 映像。调试 Confidential Space 映像没有设置支持特性。 有三种支持特性:
示例以下代码验证是否使用了稳定版本的 Confidential Space 映像:
|
assertion.swname |
已定义的字符串 |
验证在证明实体上运行的软件。值始终为 示例
|
assertion.swversion |
字符串数组 |
验证 Confidential Space 映像的软件版本。建议使用 示例
|
容器断言
断言 | 类型 | 说明 |
---|---|---|
互动对象:
|
字符串数组 |
验证工作负载映像中使用的 CMD 命令和参数。 示例以下代码验证了工作负载映像的 CMD 是否未被覆盖:
以下代码验证
|
互动对象:
|
JSON 对象 |
验证环境变量及其值是否已明确传递给容器。 示例以下代码验证了环境变量
|
互动对象:
|
字符串 |
验证工作负载 operator 是否覆盖了容器中的环境变量。 示例以下代码用于验证工作负载运算符是否未替换
以下代码可验证工作负载运算符是否覆盖了任何环境变量:
|
assertion.submods.container.image_digest |
字符串 |
验证工作负载容器的映像摘要。指定此条件可让多方就允许访问其数据的授权工作负载达成共识。 示例
|
assertion.submods.container.image_id |
字符串 |
验证工作负载容器的映像 ID。 示例
|
互动对象:
|
字符串 |
验证在 Confidential Space 映像上运行的工作负载容器的位置。 示例
|
互动对象:
|
JSON 对象 |
验证映像是否具有特定签名或是否由公钥和签名算法签名。指定此条件可让多方就允许访问其数据的授权工作负载达成共识。 断言可以包含以下元素:
示例
|
互动对象:
|
已定义的字符串 |
验证工作负载停止时容器启动器的重启政策。 有效值包括:
示例
|
虚拟机断言
断言 | 类型 | 说明 |
---|---|---|
互动对象:
|
字符串数组 |
验证指定的服务账号是否已关联到运行工作负载的虚拟机,或者是否已使用虚拟机元数据中的 示例
|
assertion.hwmodel |
字符串 |
验证底层机密计算技术。支持的平台如下:
示例
|
互动对象:
|
布尔值 |
验证证明实体上的监控状态。 示例
|
assertion.submods.gce.instance_id |
字符串 |
验证虚拟机实例 ID。 示例
|
assertion.submods.gce.instance_name |
字符串 |
验证虚拟机实例的名称。 示例
|
assertion.submods.gce.project_id |
字符串 |
验证虚拟机是否正在运行具有指定项目 ID 的 Google Cloud 项目。 示例
|
assertion.submods.gce.project_number |
字符串 |
验证虚拟机是否在具有指定项目编号的 Google Cloud 项目中运行。 示例
|
互动对象:
|
字符串 |
验证虚拟机是否正在指定可用区中运行。 示例
|