数据协作者需要设置以下资源,以便工作负载能够访问其机密数据:
加密数据本身,存储在 Google Cloud中。
可以解密相应数据的服务账号。
使用工作负载身份池进行认证验证(在开发中)。在 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 和提供方,请完成以下说明:
将解密服务账号与具有
iam.workloadIdentityUser
角色的 WIP 相关联。创建 OIDC 提供方,并提供以下详细信息:
https://confidentialcomputing.googleapis.com/
的颁发者 URI。允许的受众群体为
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 项目中运行。 示例
|
与以下各项互动:
|
字符串 |
验证虚拟机是否正在指定可用区中运行。 示例
|