1. 概览
Confidential Space 支持安全的多方数据共享和协作,同时让组织能够保留其数据的机密性。这意味着,组织可以在相互协作的同时,仍能控制自己的数据并保护其免遭未经授权的访问。
Confidential Space 可用于以下场景:您希望通过汇总和分析敏感数据(通常受监管)来获得相互价值,同时保留对这些数据的完全控制权。借助 Confidential Space,组织可以通过汇总和分析敏感数据(例如个人身份信息 [PII]、受保护健康信息 [PHI]、知识产权和加密密钥)获得相互价值,同时保留对这些数据的完全控制权。
所需条件
- 一个 Google Cloud Platform 项目
- 一个浏览器,例如 Chrome 或 Firefox
- 具备 Google Compute Engine(代码库)、机密虚拟机、容器和远程代码库的基础知识
- Cloud KMS 基本知识(Codelab)
- 服务账号、工作负载身份联合和属性条件的基础知识。
学习内容
- 如何配置运行 Confidential Space 所需的 Cloud 资源
- 如何在运行 Confidential Space 虚拟机映像的机密虚拟机中运行工作负载
- 如何根据工作负载代码的属性(what)、机密空间环境(where)以及运行工作负载的账号(who)授权访问受保护资源。
在本 Codelab 中,您将为 Primus 银行和 Secundus 银行设置一个 Confidential Space,以便确定它们的共同客户,而无需彼此共享完整的账号列表。这涉及以下步骤:
- 第 1 步:为 Primus 银行和 Secundus 银行设置所需的云资源。这些云资源包括 Primus 银行和 Secundus 银行的 Cloud Storage 存储分区、KMS 密钥、工作负载身份池和服务账号。Primus Bank 和 Secundus Bank 将其客户数据存储在 Cloud Storage 存储分区中,并使用 Cloud Key Management Service 密钥对数据进行加密。
- 第 2 步:创建将由工作负载虚拟机使用的服务账号。Secundus Bank 将成为工作负载的运营商,并启动工作负载虚拟机。Primus Bank 将编写工作负载代码。
- 第 3 步:创建一个工作负载,其中包含两个 CLI 命令,一个用于统计指定地理位置的客户数量,另一个用于查找 Primus 银行和 Secundus 银行的共同客户。该工作负载将由 Primus Bank 编写,并打包为 Docker 映像。此 Docker 映像将发布到 Artifact Registry。
- 第 4 步:为工作负载授权。Primus Bank 会使用工作负载身份池,根据运行工作负载的人员、工作负载的用途以及工作负载的运行位置等属性,授权工作负载访问其客户数据。
- 第 5 步:在工作负载运行时,它会提供包含工作负载和环境声明的认证验证器服务令牌,以请求访问数据协作者(Primus Bank 和 Secundus Bank)的云资源。如果令牌中的工作负载衡量声明与 Primus 银行和 Secundus 银行的工作负载身份池中的属性条件相符,则会返回有权访问相应云资源的服务账号访问令牌。只有在 Confidential Space 中运行的工作负载才能访问这些云资源。
- 第 5(a) 步:运行第一个工作负载,用于统计特定地理位置的 Primus Bank 客户数量。对于此工作负载,Primus Bank 将是数据协作者和工作负载作者,它将向在 Confidential Space 中运行的工作负载提供加密的客户名单。Secundus Bank 将成为工作负载操作员,并将在 Confidential Space 中运行工作负载。
- 第 5(b) 步:运行第二个工作负载,用于查找 Primus 银行和 Secundus 银行的共同客户。对于此工作负载,Primus Bank 和 Secundus Bank 都是数据协作者。它们会将加密的客户名单提供给在 Confidential Space 中运行的工作负载。Secundus Bank 将再次成为工作负载运营商。此工作负载也需要 Secundus Bank 授权,因为该工作负载还需要访问 Secundus Bank 的加密客户名单,以便查找共同客户。在本例中,Secundus Bank 会根据运行工作负载的人员、工作负载的用途以及工作负载的运行位置等属性(如 Primus Bank 在第 4 步中所述),授权该工作负载访问其客户数据。
2. 设置 Cloud 资源
准备工作
- 使用以下命令克隆 此代码库,以获取此 Codelab 中所需的脚本。
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- 更改此 Codelab 的目录。
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- 为您的项目启用结算功能。
- 为这两个项目都启用 Confidential Computing API 和以下 API。
gcloud services enable \
cloudapis.googleapis.com \
cloudkms.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- 使用以下命令为资源名称设置变量,如下所述。您可以使用这些变量(例如
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'
)替换资源名称 - 您可以在 Primus 项目中使用现有云资源名称设置以下变量。如果设置了该变量,则系统会使用 Primus 项目中的相应现有云资源。如果未设置该变量,系统会根据 project-name 生成云资源名称,并在以下操作中创建新的 cloud-resource:
| 用于存储 Primus Bank 客户数据文件的存储分区。 |
| Primus Bank 的工作负载身份池 (WIP),用于验证声明。 |
| Primus Bank 的工作负载身份池提供程序,其中包含要用于由认证验证服务签名的令牌的授权条件。 |
| Primus Bank 的服务账号, |
| 用于加密 Primus Bank 存储在 |
| 用于为 Primus Bank 创建加密密钥 |
| 将推送工作负载 Docker 映像的 artifact 代码库。 |
- 您可以使用 Secundus 项目中的现有云资源名称设置以下变量。如果设置了该变量,则系统会使用 Secundus 项目中的相应现有云资源。如果未设置变量,系统会根据 project-name 生成云资源名称,并在以下操作中创建新的 cloud-resource:
| 用于存储 Secundus 银行客户数据文件的存储分区 |
| Secundus Bank 的工作负载身份池 (WIP),用于验证声明。 |
| Secundus Bank 的工作负载身份池提供方,其中包含要用于由证明验证服务签名的令牌的授权条件。 |
| Secundus Bank 的服务账号, |
| 用于加密 Secundus Bank 存储在 |
| 用于为 Secundus Bank 创建加密密钥 |
| 用于存储工作负载结果的存储分区。 |
| 工作负载容器映像名称。 |
| 工作负载容器映像的标记。 |
| 有权访问运行工作负载的 Confidential 虚拟机的服务账号。 |
- 此 Codelab 中使用了一些工件,如下所述:
primus_customer_list.csv
:包含 Primus Bank 客户数据的文件。此处提供了本 Codelab 中使用的示例文件。secundus_customer_list.csv
:包含 Secundus Bank 客户数据的文件。此处提供了本 Codelab 中使用的示例文件。- 您需要对这两个项目拥有以下权限:
- 对于
$PRIMUS_PROJECT_ID
,您需要拥有 Cloud KMS Admin、Storage Admin、Artifact Registry Administrator、Service Account Admin、IAM Workload Identity Pool Admin 角色。 - 对于
$SECUNDUS_PROJECT_ID
,您需要具备 Compute Admin、Storage Admin、Service Account Admin、Cloud KMS Admin、IAM Workload Identity Pool Admin、Security Admin(可选)角色。 - 运行以下脚本,根据资源名称的项目 ID 将其余变量名称设置为值。
source config_env.sh
为 Primus Bank 设置云资源
Primus Bank 需要以下云资源。运行以下脚本,为 Primus Bank 设置资源:
- 用于存储 Primus Bank 加密客户数据文件的 Cloud Storage 存储分区 (
$PRIMUS_INPUT_STORAGE_BUCKET
)。 - KMS 中的加密密钥 (
$PRIMUS_ENC_KEY
) 和密钥环 ($PRIMUS_ENC_KEYRING
),用于加密 Primus Bank 的客户数据文件。 - Workload Identity 池 (
$PRIMUS_WORKLOAD_IDENTITY_POOL
),用于根据其提供方下配置的属性条件验证声明。 - 附加到上述工作负载身份池 (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) 的服务账号 ($PRIMUS_SERVICE_ACCOUNT
) 有权使用 KMS 密钥解密数据(使用roles/cloudkms.cryptoKeyDecrypter
角色)、从云端存储分区读取数据(使用objectViewer
角色),以及将服务账号连接到工作负载身份池(使用roles/iam.workloadIdentityUser
)。
./setup_primus_bank_resources.sh
为 Secundus Bank 设置云资源
Secundus Bank 需要以下云资源。运行此脚本以设置 Secundus Bank 资源。在此过程中,系统会创建以下资源:
- 用于存储 Secundus Bank 加密客户数据文件的 Cloud Storage 存储分区 (
$SECUNDUS_INPUT_STORAGE_BUCKET
)。 - KMS 中的加密密钥 (
$SECUNDUS_ENC_KEY
) 和密钥环 ($SECUNDUS_ENC_KEYRING
),用于加密 Secundus Bank 的数据文件。 - Workload Identity 池 (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
),用于根据其提供方下配置的属性条件验证声明。 - 附加到上述工作负载身份池 (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) 的服务账号 ($SECUNDUS_SERVICE_ACCOUNT
) 有权使用 KMS 密钥解密数据(使用roles/cloudkms.cryptoKeyDecrypter
角色)、从 Cloud Storage 存储分区读取数据(使用objectViewer
角色),以及将服务账号连接到工作负载身份池(使用roles/iam.workloadIdentityUser
角色)。 - Cloud Storage 存储分区 (
$SECUNDUS_RESULT_STORAGE_BUCKET
),用于存储 Secundus Bank 执行的工作负载结果。
./setup_secundus_bank_resources.sh
3. 创建工作负载
创建工作负载服务账号
现在,您将为工作负载创建一个服务账号,并为其授予所需的角色和权限(如下所述)。运行以下脚本,在 Secundus Bank 项目中创建工作负载服务账号。运行工作负载的虚拟机将使用此服务账号。
此工作负载服务账号 ($WORKLOAD_SERVICE_ACCOUNT
) 将具有以下角色:
- 将
confidentialcomputing.workloadUser
角色授予工作负载服务账号。这样,用户账号便可生成认证令牌。 - 向工作负载服务账号授予
logging.logWriter
角色权限。这样一来,除了串行控制台之外,Confidential Space 环境还可以将日志写入 Cloud Logging,因此在虚拟机终止后,日志仍可供使用。 objectViewer
用于从$PRIMUS_INPUT_STORAGE_BUCKET
Cloud Storage 存储分区读取数据。objectViewer
用于从$SECUNDUS_INPUT_STORAGE_BUCKET
Cloud Storage 存储分区读取数据。objectAdmin
将工作负载结果写入$SECUNDUS_RESULT_STORAGE_BUCKET
Cloud Storage 存储分区。
./create_workload_service_account.sh
创建工作负载
在此步骤中,您将为此 Codelab 中使用的工作负载创建一个 Docker 映像。该工作负载是一个简单的 GoLang 应用,具有以下特点:
- 统计指定地理位置的客户数量。
- 从 Primus 银行和 Secundus 银行各自存储在 Cloud Storage 存储分区中的客户名单中,查找 Primus 银行和 Secundus 银行的共同客户。
运行以下脚本,创建一个执行以下步骤的工作负载:
- 创建 Primus Bank 拥有的 Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY
),以便在其中发布工作负载。 - 生成代码,并使用所需的资源名称对其进行更新。此 Codelab 中使用的作业负载代码可在此处找到。
- 构建代码并将其打包到 Docker 映像中。您可以在此处找到相应的 Dockerfile。
- 将 Docker 映像发布到 Primus Bank 拥有的 Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
)。 - 向服务账号
$WORKLOAD_SERVICE_ACCOUNT
授予对 Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
) 的读取权限。
./create_workload.sh
4. 授权和运行工作负载
为工作负载授权
Primus Bank 希望根据以下资源的属性授权工作负载访问其客户数据:
- 什么:已验证的代码
- 位置:安全的环境
- Who:受信任的运营商
Primus 使用工作负载身份联合来根据这些要求强制执行访问权限政策。
借助工作负载身份联合,您可以指定属性条件。这些条件会限制哪些身份可以使用工作负载身份池 (WIP) 进行身份验证。您可以将 Attestation Verifier Service 作为工作负载身份池提供方添加到 WIP,以显示测量结果并强制执行政策。
工作负载身份池已在之前的云资源设置步骤中创建。现在,Primus Bank 将创建新的 OIDC 工作负载身份池提供方。指定的 --attribute-condition
会授权访问工作负载容器。它需要:
- 内容:上传到
$PRIMUS_ARTIFACT_REPOSITORY
代码库的最新$WORKLOAD_IMAGE_NAME
。 - 条件:Confidential Space 可信执行环境在完全受支持的 Confidential Space VM 映像上运行。
- 谁:Secundus Bank
$WORKLOAD_SERVICE_ACCOUNT
服务账号。
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
与为 Primus Bank 创建的 WIP 类似,Secundus Bank 希望根据以下条件授权工作负载访问其客户数据:
- 内容:工作负载。
- 位置:Confidential Space 环境。
- “谁”:运行工作负载的账号 (
$WORKLOAD_SERVICE_ACCOUNT
)。
Primus Bank 使用包含图片标记的 image_reference
声明来确定是否应授予访问权限。他们控制着远程代码库,因此可以确保仅标记不会泄露数据的图片。
相比之下,Secundus Bank 无法控制其获取图片的代码库,因此无法安全地做出该假设。而是选择根据工作负载的 image_digest
授予对该工作负载的访问权限。与 image_reference
不同,Primus Bank 无法将 image_digest
更改为指向其他图片,只能指向 Secundus Bank 在上一步中审核的图片。
在创建工作负载身份池提供程序之前,我们会收集工作负载容器映像的 image_digest
,以便在提供程序的属性条件中使用。
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
运行工作负载
在此步骤中,Secundus Bank 将在 Confidential Space 上运行工作负载。此工作负载将从 Primus 的工作负载身份池和 Secundus 的工作负载身份池获取访问令牌,以分别读取和解密 Primus Bank 和 Secundus Bank 的客户数据。
系统会使用元数据标志传递所需的 TEE 实参。工作负载容器的参数使用标志的“tee-cmd
”部分传递。工作负载执行结果将发布到 $SECUNDUS_RESULT_STORAGE_BUCKET
。
运行第一个工作负载
在首次执行工作负载时,该工作负载将根据工作负载容器参数中提供的位置统计 Primus Bank 的客户数量。如下所示,第一个工作负载将执行“count-location
”命令,并将结果存储在 $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
中。
gcloud compute instances create ${WORKLOAD_VM1} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""
查看结果
在 Secundus 项目中,查看第一个工作负载的结果。等待 3 到 5 分钟,让工作负载完成执行,并在云端存储分区中显示结果。
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
结果应为 3
,因为这是 primus_customer_list.csv
文件中列出的来自西雅图的人数!
运行第二个工作负载
在执行第二个工作负载时,我们将找到 Primus Bank 和 Secundus Bank 的共同客户。如下所示,第二个工作负载将执行“list-common-customers
”命令,并将结果存储在 $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count
中。
gcloud compute instances create ${WORKLOAD_VM2} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
查看结果
在 Secundus 项目中,查看第二个工作负载的结果。等待 3 到 5 分钟,让工作负载完成执行,并在云端存储分区中显示结果。
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
结果应如下所示,因为这些是 Primus 银行和 Secundus 银行的共同客户。
输出:
Eric
Clinton
Ashley
Cooper
运行未经授权的工作负载
Primus Bank 允许 Secundus Bank 访问其数据的合同到期。因此,Primus Bank 更新了其属性条件,以允许使用其新合作伙伴 Tertius Bank 的服务账号的虚拟机。
Primus Bank 修改了 Workload Identity 池提供程序
在 $PRIMUS_PROJECT_ID
中,更新 Attestation Verifier 身份提供方的属性条件,以便在新的地理位置授权工作负载。
- 将项目设置为 $PRIMUS_PROJECT_ID。
gcloud config set project $PRIMUS_PROJECT_ID
- 使用以下命令导出 Tertius Bank 的 GCP 项目 ID。Primus Bank 稍后会使用此 ID 更新工作负载身份池提供方的属性条件。Primus 银行不会停止授权 Secundus 银行工作负载服务账号。现在,它将允许 Tertius Bank 工作负载服务账号。
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- 更新工作负载身份池中的 OIDC 提供程序。此处将
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
更改为'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.
。现在,系统将授权 Tertius Bank 的工作负载服务账号,而不是 Secundus Bank 的工作负载服务账号。
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
重新运行工作负载
当 Secundus Bank 尝试运行原始工作负载时,会失败。如需查看错误,请删除原始结果文件和虚拟机实例,然后尝试再次运行工作负载。
删除现有结果文件和虚拟机实例
- 将项目设置为
$SECUNDUS_PROJECT_ID
项目。
gcloud config set project $SECUNDUS_PROJECT_ID
- 删除结果文件。
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- 删除机密虚拟机实例。
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
运行未经授权的工作负载:
gcloud compute instances create ${WORKLOAD_VM2} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE}\
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
查看错误
您会看到错误 (The given credential is rejected by the attribute condition
),而不是工作负载的结果。
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
类似地,如果 Primus Bank 秘密修改工作负载以将 Secundus Bank 的整个客户名单发送到 Primus Bank 拥有的存储分区,那么该尝试将会失败,因为恶意工作负载的摘要将不同于在 Secundus Bank 的工作负载身份池中授权的映像摘要。
5. 清理
此处提供了一个脚本,可用于清理我们在此 Codelab 中创建的资源。在此清理过程中,系统将删除以下资源:
- 输入 Primus Bank 的 Cloud Storage 存储分区 (
$PRIMUS_INPUT_STORAGE_BUCKET)
。 - Primus Bank 的服务账号 (
$PRIMUS_SERVICE_ACCOUNT
)。 - Primus Bank 的 artifact 注册表,用于存储映像签名 (
$PRIMUS_COSIGN_REPOSITORY
)。 - Primus Bank 的工作负载身份池(
$PRIMUS_WORKLOAD_IDENTITY_POOL
)。 - Secundus Bank 的工作负载服务账号 (
$WORKLOAD_SERVICE_ACCOUNT
)。 - 输入 Secundus Bank 的 Cloud Storage 存储分区 (
$SECUNDUS_INPUT_STORAGE_BUCKET)
。 - Secundus Bank 的服务账号 (
$SECUNDUS_SERVICE_ACCOUNT
)。 - Secundus Bank 的工件注册表,用于存储映像签名 (
$SECUNDUS_COSIGN_REPOSITORY
)。 - Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) 的工作负载身份池。 - Secundus Bank 的工作负载服务账号 (
$WORKLOAD_SERVICE_ACCOUNT
)。 - 工作负载计算实例。
- Secundus Bank 的结果存储分区 (
$SECUNDUS_RESULT_STORAGE_BUCKET
)。 - Primus Bank 的 artifact 仓库 (
$PRIMUS_ARTIFACT_REPOSITORY
)。
./cleanup.sh
如果您已完成探索,请考虑删除您的项目。
- 前往 Cloud Platform 控制台。
- 选择要关停的项目,然后点击顶部的“删除”:这会安排删除该项目。
恭喜
恭喜,您已成功完成此 Codelab!
您了解了如何使用 Confidential Space 保护共享数据并确保其机密性。
后续操作
查看下列类似 Codelab…