1. Visão geral
O Confidential Space oferece compartilhamento e colaboração de dados seguros entre várias partes, permitindo que as organizações preservem a confidencialidade dos dados. Isso significa que as organizações podem colaborar entre si, mantendo o controle sobre os dados e protegendo-os contra acesso não autorizado.
O Confidential Space permite agregar e analisar dados sensíveis, muitas vezes regulamentados, para gerar valor mútuo, mantendo o controle total sobre eles. Com o Confidential Space, as organizações podem agregar e analisar dados sensíveis, como informações de identificação pessoal (PII), informações protegidas de saúde (PHI), propriedade intelectual e secrets criptográficos, mantendo o controle total sobre eles.
O que é necessário
- Um projeto do Google Cloud Platform
- Um navegador, como o Chrome ou o Firefox
- Conhecimento básico do Google Compute Engine ( codelab), VM confidencial, contêineres e repositórios remotos
- Conhecimento básico do Cloud KMS ( codelab)
- Conhecimento básico de contas de serviço, federação de identidade da carga de trabalho e condições de atributo.
O que você vai aprender
- Como configurar os recursos do Cloud necessários para executar o Confidential Space
- Como executar a carga de trabalho em uma VM confidencial com a imagem da VM do Confidential Space
- Como autorizar o acesso a recursos protegidos com base nos atributos do código da carga de trabalho (o quê), no ambiente do Confidential Space (onde) e na conta que está executando a carga de trabalho (quem).
Neste codelab, você vai configurar um espaço confidencial entre o Primus e o Secundus Bank para determinar os clientes em comum sem compartilhar listas completas de contas. Isso envolve as seguintes etapas:
- Etapa 1: configurar os recursos de nuvem necessários para os bancos Primus e Secundus. Esses recursos incluem buckets do Cloud Storage, chaves do KMS, pools de identidade da carga de trabalho e contas de serviço para os bancos Primus e Secundus. O Primus Bank e o Secundus Bank armazenam os dados dos clientes em buckets do Cloud Storage e criptografam os dados usando chaves do Cloud Key Management Service.
- Etapa 2: crie uma conta de serviço de carga de trabalho que será usada pela VM de carga de trabalho. O Secundus Bank, que será o operador da carga de trabalho, vai iniciar a VM da carga de trabalho. O Primus Bank estaria criando o código da carga de trabalho.
- Etapa 3: crie uma carga de trabalho que inclua dois comandos da CLI, um para contar os clientes do local fornecido e outro para encontrar clientes comuns do Primus e do Secundus Bank. A carga de trabalho seria criada pelo Primus Bank e empacotada como uma imagem do Docker. Essa imagem do Docker será publicada no Artifact Registry.
- Etapa 4: autorizar uma carga de trabalho. O Primus Bank usaria um pool de identidades da carga de trabalho para autorizar cargas de trabalho a acessar os dados dos clientes com base em atributos de quem está executando a carga de trabalho, o que ela faz e onde ela está sendo executada.
- Etapa 5: quando a carga de trabalho for executada, ela vai solicitar acesso aos recursos de nuvem dos colaboradores de dados (Primus Bank e Secundus Bank) oferecendo um token do serviço de verificação de atestado com declarações de carga de trabalho e ambiente. Se as declarações de medição da carga de trabalho no token corresponderem à condição de atributo nos pools de identidade da carga de trabalho dos bancos Primus e Secundus, ele vai retornar o token de acesso da conta de serviço com permissão para acessar os recursos de nuvem respectivos. Os recursos da nuvem só poderão ser acessados pela carga de trabalho em execução no Confidential Space.
- Etapa 5a: execute a primeira carga de trabalho, que conta os clientes do Primus Bank de locais específicos. Para essa carga de trabalho, o Primus Bank seria um colaborador de dados e autor de carga de trabalho, fornecendo a lista de clientes criptografada para a carga de trabalho em execução no Confidential Space. O Secundus Bank seria um operador de carga de trabalho e executaria a carga de trabalho em um Confidential Space.
- Etapa 5(b): execute a segunda carga de trabalho, que encontra os clientes comuns dos bancos Primus e Secundus. Para essa carga de trabalho, o Primus Bank e o Secundus Bank seriam colaboradores de dados. Eles fornecem as listas de clientes criptografadas para a carga de trabalho em execução no Confidential Space. O Secundus Bank seria novamente um operador de carga de trabalho. Essa carga de trabalho também seria autorizada pelo Secundus Bank, porque ela precisa acessar as listas de clientes criptografadas do banco para encontrar os clientes em comum. Nesse caso, o Secundus Bank autorizaria a carga de trabalho a acessar os dados dos clientes com base nos atributos de quem está executando a carga de trabalho, o que ela faz e onde ela está sendo executada, conforme mencionado na etapa 4 para o Primus Bank.

2. Configurar recursos do Cloud
Antes de começar
- Clone este repositório usando o comando abaixo para receber os scripts necessários usados como parte deste codelab.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Mude o diretório deste codelab.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- Verifique se você definiu as variáveis de ambiente necessárias do projeto, conforme mostrado abaixo. Para mais informações sobre como criar um projeto do GCP, consulte este codelab. Consulte este link para saber como recuperar o ID do projeto e a diferença entre ele, o nome e o número do projeto.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- Ative o faturamento dos projetos.
- Ative a API Confidential Computing e as seguintes APIs nos dois projetos.
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
- Defina as variáveis para nomes de recursos conforme mencionado abaixo usando este comando. É possível substituir os nomes de recursos usando estas variáveis (por exemplo,
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'). - É possível definir as seguintes variáveis com nomes de recursos de nuvem existentes no projeto do Primus. Se a variável estiver definida, o recurso de nuvem correspondente do projeto Primus será usado. Se a variável não estiver definida, o nome do recurso de nuvem será gerado com base em "project-name", e um novo recurso de nuvem será criado como parte do seguinte:
| O bucket que armazena o arquivo de dados de clientes do Primus Bank. |
| O pool de Identidade da carga de trabalho (WIP, na sigla em inglês) do Primus Bank que valida declarações. |
| Provedor de pool de identidades da carga de trabalho do Primus Bank, que inclui a condição de autorização para usar tokens assinados pelo serviço de verificação de atestado. |
| A conta de serviço do Primus Bank que o |
| A chave do KMS usada para criptografar os dados armazenados em |
| O keyring do KMS que será usado para criar a chave de criptografia |
| O repositório de artefatos em que a imagem Docker da carga de trabalho será enviada. |
- É possível definir as seguintes variáveis com nomes de recursos da nuvem no projeto Secundus. Se a variável estiver definida, o recurso de nuvem correspondente do projeto Secundus será usado. Se a variável não estiver definida, o nome do recurso de nuvem será gerado com base em "project-name", e um novo recurso de nuvem será criado como parte do seguinte:
| O bucket que armazena o arquivo de dados de clientes do Secundus Bank |
| O pool de Identidade da carga de trabalho (WIP) do Secundus Bank que valida declarações. |
| Provedor de pool de identidades da carga de trabalho do Secundus Bank, que inclui a condição de autorização para usar tokens assinados pelo serviço de verificação de atestado. |
| Conta de serviço do Secundus Bank que o |
| A chave do KMS usada para criptografar os dados armazenados em |
| O keyring do KMS usado para criar a chave de criptografia |
| O bucket que armazena os resultados da carga de trabalho. |
| O nome da imagem do contêiner da carga de trabalho. |
| A tag da imagem do contêiner da carga de trabalho. |
| A conta de serviço com permissão para acessar a VM confidencial que executa a carga de trabalho. |
- Há poucos artefatos usados como parte deste codelab, conforme mencionado abaixo:
primus_customer_list.csv: o arquivo que contém os dados do cliente do Primus Bank. Aqui está o arquivo de exemplo usado neste codelab.secundus_customer_list.csv: o arquivo que contém os dados do cliente do Secundus Bank. Aqui está o arquivo de exemplo usado neste codelab.- Você vai precisar de determinadas permissões para esses dois projetos:
- Para o
$PRIMUS_PROJECT_ID, você vai precisar de Administrador do Cloud KMS, Administrador do Storage, Administrador do Artifact Registry, Administrador da conta de serviço e Administrador do pool de Identidade da carga de trabalho do IAM. - Para o
$SECUNDUS_PROJECT_ID, você vai precisar de administrador do Compute, administrador do Storage, administrador da conta de serviço, administrador do Cloud KMS, administrador do pool de identidades da carga de trabalho do IAM e administrador de segurança (opcional). - Execute o script a seguir para definir os nomes de variáveis restantes como valores com base no ID do projeto para nomes de recursos.
source config_env.sh
Configurar recursos de nuvem para o Primus Bank
Os seguintes recursos de nuvem são necessários para o Primus Bank. Execute este script para configurar os recursos do Primus Bank:
- Bucket do Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET) para armazenar o arquivo de dados criptografados de clientes do Primus Bank. - Chave de criptografia (
$PRIMUS_ENC_KEY) e keyring ($PRIMUS_ENC_KEYRING) no KMS para criptografar o arquivo de dados do cliente do Primus Bank. - Pool de identidades da carga de trabalho (
$PRIMUS_WORKLOAD_IDENTITY_POOL) para validar declarações com base nas condições de atributos configuradas no provedor. - A conta de serviço (
$PRIMUS_SERVICE_ACCOUNT) anexada ao pool de identidades da carga de trabalho ($PRIMUS_WORKLOAD_IDENTITY_POOL) mencionado acima tem acesso para descriptografar dados usando a chave do KMS (com o papelroles/cloudkms.cryptoKeyDecrypter), ler dados do bucket do Cloud Storage (com o papelobjectViewer) e conectar a conta de serviço ao pool de identidades da carga de trabalho (com o papelroles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh
Configurar recursos de nuvem para o Secundus Bank
Para o Secundus Bank, os seguintes recursos de nuvem são necessários. Execute este script para configurar os recursos do Secundus Bank. Como parte dessas etapas, os recursos mencionados abaixo serão criados:
- Bucket do Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET) para armazenar o arquivo de dados criptografados de clientes do Secundus Bank. - Chave de criptografia (
$SECUNDUS_ENC_KEY) e keyring ($SECUNDUS_ENC_KEYRING) no KMS para criptografar o arquivo de dados do Secundus Bank. - Pool de identidades da carga de trabalho (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) para validar declarações com base nas condições de atributos configuradas no provedor. - A conta de serviço (
$SECUNDUS_SERVICE_ACCOUNT) anexada ao pool de identidades da carga de trabalho ($SECUNDUS_WORKLOAD_IDENTITY_POOL) mencionado acima tem acesso para descriptografar dados usando a chave do KMS (com o papelroles/cloudkms.cryptoKeyDecrypter), ler dados do bucket do Cloud Storage (com o papelobjectViewer) e conectar a conta de serviço ao pool de identidades da carga de trabalho (com o papelroles/iam.workloadIdentityUser). - Bucket do Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET) para armazenar o resultado da execução da carga de trabalho pelo Secundus Bank.
./setup_secundus_bank_resources.sh
3. Criar carga de trabalho
Criar conta de serviço da carga de trabalho
Agora, crie uma conta de serviço para a carga de trabalho com os papéis e as permissões necessários, conforme mencionado abaixo. Execute o seguinte script para criar uma conta de serviço de carga de trabalho no projeto do Secundus Bank. A VM que executa a carga de trabalho usaria essa conta de serviço.
Essa conta de serviço da carga de trabalho ($WORKLOAD_SERVICE_ACCOUNT) terá os seguintes papéis:
- Conceda o papel
confidentialcomputing.workloadUserà conta de serviço da carga de trabalho . Isso permite que a conta de usuário gere um token de comprovação. - Conceda o papel
logging.logWriterà permissão da conta de serviço da carga de trabalho. Isso permite que o ambiente do Confidential Space grave registros no Cloud Logging, além do console serial, para que os registros fiquem disponíveis após o encerramento da VM. objectViewerpara ler dados do bucket do Cloud Storage$PRIMUS_INPUT_STORAGE_BUCKET.objectViewerpara ler dados do bucket do Cloud Storage$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdminpara gravar o resultado da carga de trabalho no bucket$SECUNDUS_RESULT_STORAGE_BUCKETdo Cloud Storage.
./create_workload_service_account.sh
Criar carga de trabalho
Como parte desta etapa, você vai criar uma imagem do Docker para a carga de trabalho usada neste codelab. A carga de trabalho é um aplicativo GoLang simples que:
- Conta clientes em um local geográfico especificado.
- Encontra clientes em comum do Primus e do Secundus Bank nas listas de clientes armazenadas nos respectivos buckets do Cloud Storage.
Execute o script a seguir para criar uma carga de trabalho em que as seguintes etapas estão sendo realizadas:
- Crie um Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) de propriedade do Primus Bank em que a carga de trabalho será publicada. - Gere o código e atualize-o com os nomes de recursos necessários. O código da carga de trabalho usado neste codelab pode ser encontrado aqui.
- Crie o código e empacote-o em uma imagem do Docker. O Dockerfile correspondente pode ser encontrado aqui.
- Publique a imagem do Docker no Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) de propriedade do Primus Bank. - Conceda à conta de serviço
$WORKLOAD_SERVICE_ACCOUNTpermissão de leitura para o Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh
4. Autorizar e executar cargas de trabalho
Autorizar carga de trabalho
O Primus Bank quer autorizar cargas de trabalho a acessar os dados dos clientes com base nos atributos dos seguintes recursos:
- O quê: código verificado
- Onde: um ambiente seguro
- Quem: um operador confiável
O Primus usa a federação de identidade da carga de trabalho para aplicar uma política de acesso com base nesses requisitos.
Com a federação de identidade da carga de trabalho, é possível especificar condições de atributo. Essas condições restringem quais identidades podem ser autenticadas com o pool de identidades da carga de trabalho (WIP). É possível adicionar o serviço de verificação de atestado ao WIP como um provedor de pool de identidade da carga de trabalho para apresentar medições e aplicar a política.
O pool de identidades de carga de trabalho já foi criado como parte da etapa de configuração dos recursos da nuvem. Agora, o Primus Bank vai criar um novo provedor de pool de identidades de carga de trabalho do OIDC. O --attribute-condition especificado autoriza o acesso ao contêiner da carga de trabalho. Ela requer:
- O quê: o
$WORKLOAD_IMAGE_NAMEmais recente foi enviado por upload para o repositório$PRIMUS_ARTIFACT_REPOSITORY. - Onde: o ambiente de execução confiável do Confidential Space está sendo executado na imagem de VM do Confidential Space totalmente compatível.
- Quem: conta de serviço do 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"
Assim como o WIP criado para o Primus Bank, o Secundus Bank quer autorizar cargas de trabalho a acessar os dados dos clientes com base em:
- O quê: a carga de trabalho.
- Onde: o ambiente do Confidential Space.
- Quem: a conta (
$WORKLOAD_SERVICE_ACCOUNT) que está executando a carga de trabalho.
O Primus Bank usa a declaração image_reference, que inclui a tag de imagem, para determinar se deve autorizar o acesso. Eles controlam o repositório remoto e, portanto, podem garantir que apenas imagens que não vazam dados sejam marcadas.
Em comparação, o Secundus Bank não controla o repositório de onde a imagem está sendo extraída. Portanto, não é possível fazer essa suposição com segurança. Em vez disso, eles autorizam o acesso à carga de trabalho com base no image_digest dela. Ao contrário do image_reference, que o Primus Bank poderia mudar para apontar para uma imagem diferente, o image_digest não poderia se referir a uma imagem diferente daquela que o Secundus Bank auditou na etapa anterior.
Antes de criar provedores de pool de identidades de carga de trabalho, coletamos o image_digest da imagem do contêiner de carga de trabalho, que seria usado nas condições de atributo do provedor.
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"
Executar cargas de trabalho
Como parte dessa etapa, o Secundus Bank vai executar a carga de trabalho no Confidential Space. Essa carga de trabalho vai receber os tokens de acesso dos pools de identidades de carga de trabalho do Primus e do Secundus para ler e descriptografar os dados dos clientes do Primus Bank e do Secundus Bank, respectivamente.
Os argumentos obrigatórios do TEE são transmitidos usando a flag de metadados. Os argumentos do contêiner de carga de trabalho são transmitidos usando a parte "tee-cmd" da flag. O resultado da execução da carga de trabalho será publicado em $SECUNDUS_RESULT_STORAGE_BUCKET.
Executar a primeira carga de trabalho
Como parte da primeira execução da carga de trabalho, ela vai contar os clientes do Primus Bank do local fornecido nos argumentos do contêiner de carga de trabalho. Como mostrado abaixo, a primeira carga de trabalho vai executar o comando "count-location", e o resultado será armazenado em $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\"]""
Ver resultados
No projeto Secundus, confira os resultados da primeira carga de trabalho. Aguarde de 3 a 5 minutos para que a carga de trabalho conclua a execução e o resultado fique disponível no bucket do Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
O resultado deve ser 3, já que esse é o número de pessoas de Seattle listadas no arquivo primus_customer_list.csv.
Executar a segunda carga de trabalho
Como parte da segunda execução da carga de trabalho, vamos encontrar os clientes comuns do Primus Bank e do Secundus Bank. Como mostrado abaixo, a segunda carga de trabalho vai executar o comando "list-common-customers", e o resultado será armazenado em $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\"]""
Ver resultados
No projeto Secundus, confira os resultados da segunda carga de trabalho. Aguarde de 3 a 5 minutos para que a carga de trabalho conclua a execução e o resultado fique disponível no bucket do Cloud Storage.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
O resultado precisa ser a lista a seguir, já que esses são os clientes em comum entre o Primus e o Secundus Bank.
Saída:
Eric
Clinton
Ashley
Cooper
Executar carga de trabalho não autorizada
O contrato do Primus Bank que permite o acesso do Secundus Bank aos dados expira. Assim, o Primus Bank atualiza a condição de atributo para permitir VMs com a conta de serviço do novo parceiro, o Tertius Bank.
O Primus Bank modifica o provedor do pool de Identidade da carga de trabalho
No $PRIMUS_PROJECT_ID, atualize a condição do atributo para o provedor de identidade do verificador de atestado e autorize cargas de trabalho em um novo local.
- Defina o projeto como $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Exporte o ID do projeto do GCP do Tertius Bank usando o comando abaixo. Mais tarde, o Primus Bank usaria isso para atualizar a condição de atributo do provedor de pool de identidades da carga de trabalho. O banco Primus não vai parar de autorizar as contas de serviço da carga de trabalho do banco Secundus. Agora ele vai permitir contas de serviço de carga de trabalho do Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Atualize o provedor OIDC no pool de identidade da carga de trabalho. Aqui,
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountsé alterado para'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.. Em vez de autorizar a conta de serviço da carga de trabalho do Secundus Bank, agora a conta de serviço da carga de trabalho do Tertius Bank será autorizada.
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"
Executar a carga de trabalho novamente
Quando o Secundus Bank tenta executar a carga de trabalho original, ocorre uma falha. Para ver o erro, exclua o arquivo de resultados original e a instância de VM e tente executar a carga de trabalho novamente.
Excluir o arquivo de resultados e a instância de VM
- Defina o projeto como
$SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
- Exclua o arquivo de resultados.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- Exclua a instância de VM confidencial.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Execute a carga de trabalho não autorizada:
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\"]""
Ver erro
Em vez dos resultados da carga de trabalho, você vê um erro (The given credential is rejected by the attribute condition).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Da mesma forma, se o Primus Bank modificar secretamente a carga de trabalho para enviar toda a lista de clientes do Secundus Bank para um bucket de propriedade do Primus Bank, essa tentativa vai falhar, já que o resumo da carga de trabalho maliciosa será diferente do resumo da imagem autorizado no pool de identidade da carga de trabalho do Secundus Bank.
5. Limpeza
Aqui está o script que pode ser usado para limpar os recursos criados como parte deste codelab. Como parte dessa limpeza, os seguintes recursos serão excluídos:
- Bucket de entrada do Cloud Storage do Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET). - Uma conta de serviço do Primus Bank (
$PRIMUS_SERVICE_ACCOUNT). - Um registro de artefatos do Primus Bank que contém assinaturas de imagens (
$PRIMUS_COSIGN_REPOSITORY). - Um pool de identidade da carga de trabalho do Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Uma conta de serviço de carga de trabalho do Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT). - Bucket de entrada do Cloud Storage do Secundus Bank (
$SECUNDUS_INPUT_STORAGE_BUCKET). - Uma conta de serviço do Secundus Bank (
$SECUNDUS_SERVICE_ACCOUNT). - Um registro de artefatos do Secundus Bank que contém assinaturas de imagens (
$SECUNDUS_COSIGN_REPOSITORY). - Um pool de identidade da carga de trabalho do Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL). - Uma conta de serviço de carga de trabalho do Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT). - Instâncias de computação de carga de trabalho.
- O bucket de armazenamento de resultados do Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Um repositório de artefatos do Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh
Se você já terminou de explorar, considere excluir o projeto.
- Acesse o Console do Cloud Platform.
- Selecione o projeto que você quer encerrar e clique em "Excluir" na parte de cima. Isso programa a exclusão do projeto.
Parabéns
Parabéns, você concluiu o codelab.
Você aprendeu a proteger dados compartilhados e manter a confidencialidade deles usando o Espaço confidencial.
Qual é a próxima etapa?
Confira alguns codelabs semelhantes:
- Codelab de imagem de contêiner assinada
- Como fazer transações de ativos digitais com computação de várias partes e espaços confidenciais
- Analisar dados confidenciais com o recurso "Espaços confidenciais"
Leia mais
- Está se sentindo isolado? A computação confidencial para salvar
- Computação confidencial no GCP
- Espaço confidencial: o futuro da colaboração que preserva a privacidade
- Como o Google e a Intel tornam a Computação Confidencial mais segura
- Privacidade x progresso: como avançar na segurança com a computação confidencial do Google Cloud