Os colaboradores de dados precisam configurar os seguintes recursos para que uma carga de trabalho possa acessar os dados confidenciais:
Os dados criptografados, armazenados em Google Cloud.
Contas de serviço que podem descriptografar esses dados.
Validação de atestado usando um pool de identidades de carga de trabalho (WIP). Depois que uma carga de trabalho é autorizada pelo WIP, ela pode se passar por contas de serviço no projeto de um colaborador de dados para recuperar dados confidenciais.
Além disso, os colaboradores de dados precisam escolher onde os resultados da carga de trabalho do Confidential Space serão armazenados e se os dados apresentados são exclusivos ou compartilhados. Por exemplo, é possível gerar o mesmo resultado para vários buckets do Cloud Storage pertencentes a cada colaborador de dados.
Armazenar seus dados
É possível usar qualquer serviço Google Cloud que armazene dados para hospedar seus dados confidenciais. Por exemplo, você pode usar um dos seguintes serviços:
Verifique se esses dados estão criptografados em repouso, usando recursos integrados ou algo como o Cloud Key Management Service (Cloud KMS).
Criar uma conta de serviço para descriptografar dados confidenciais
Você disponibiliza seus dados confidenciais para as cargas de trabalho do Confidential Space e reduz a exposição humana a eles usando contas de serviço.
Por exemplo, é possível criptografar arquivos confidenciais no Cloud Storage com o Cloud KMS e criar uma conta de serviço com permissão para acessar esses dados e a chave para descriptografá-los.
Em seguida, conecte essa conta de serviço a um WIP. Uma carga de trabalho autorizada do Confidential Space em outro projeto pode usar esse WIP para representar a conta de serviço que descriptografa os dados, recuperar os dados descriptografados e processá-los.
Como as contas de serviço são usadas para descriptografar e processar os dados confidenciais, a visibilidade deles é restrita aos proprietários. Como a carga de trabalho opera em uma VM confidencial, a criptografia de memória baseada em hardware garante que seus dados permaneçam particulares durante o uso. O SSH também é desativado em VMs de carga de trabalho usando a imagem do Confidential Space de produção, o que significa que ninguém pode acessar a VM enquanto ela está em execução.
Consulte Criar seu primeiro ambiente do Confidential Space para conferir um exemplo.
Criar um WIP e um provedor para validação de atestado
Para ajudar a proteger os dados contra operadores de carga de trabalho não confiáveis, o Confidential Space implementa um processo de atestado que detecta modificações em uma imagem de carga de trabalho ou no TEE. O processo é baseado em medições da VM protegida de inicialização e do ambiente de execução estendido e captura as medições da sequência de inicialização em um registro protegido somente para extensão no dispositivo de Módulo de plataforma confiável virtual (vTPM, na sigla em inglês).
O serviço de atestado do Confidential Space gera tokens do OpenID Connect (OIDC) que incluem esses atestados de vTPM em um formato que pode ser validado por um WIP, que os verifica em relação às políticas adicionadas como condições de atributo a um provedor. Esses tokens são assinados pelo Google, duram uma hora e são atualizados automaticamente.
Se a WIP autorizar a carga de trabalho, ela poderá representar contas de serviço no projeto para descriptografar e recuperar dados confidenciais.
Para configurar um WIP e um provedor, siga estas instruções:
Conecte sua conta de serviço de descriptografia ao WIP com a função
iam.workloadIdentityUser
.Crie um provedor OIDC com os seguintes detalhes:
Um URI de emissor de
https://confidentialcomputing.googleapis.com/
.Um público-alvo permitido de
https://sts.googleapis.com
.Um mapeamento de atributo do provedor de
google.subject
, com um valor deassertion.sub
.Condições de atributo usadas para validar os atestados da carga de trabalho. Consulte Criar uma política de comprovação para conferir as opções disponíveis.
Criar uma política de atestado
Ao criar uma WIP, você adiciona condições de atributo, que são condições que uma carga de trabalho precisa atender para acessar seus dados. No Confidential Space, essas condições de atributo formam sua política de atestado.
As políticas são escritas em Common Expression Language
(CEL) e são compostas por uma série de declarações que podem ser encadeadas
com o operador &&
.
Confira um exemplo de como adicionar um provedor a um pool de identidade de carga de trabalho usando a
CLI gcloud, além da opção attribute-condition
que define
as políticas:
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"
Neste exemplo, uma identidade externa que tenta representar uma conta de serviço conectada ao pool de identidades de carga de trabalho precisa atestar e corresponder aos seguintes detalhes:
O resumo da imagem do contêiner da carga de trabalho
O endereço da conta de serviço conectada à VM da carga de trabalho
Esse
CONFIDENTIAL_SPACE
é o software em execução na VM, com todas as garantias de segurança integradas.O atributo de suporte à imagem de produção do Confidential Space
Declarações de atestado
As declarações disponíveis para criar uma política de atestado são detalhadas na tabela a seguir. Eles podem validar declarações feitas pela imagem do Confidential Space, pelo contêiner de carga de trabalho e pela VM.
Declarações de imagem
Declaração | Tipo | Descrição |
---|---|---|
Interage com:
|
String definida |
Verifica se a imagem do Confidential Space é a versão de depuração ou de produção. Os valores válidos são:
ExemplosO código a seguir verifica se a versão de depuração da imagem do Confidential Space está sendo usada:
O código a seguir verifica se a versão de produção da imagem do Confidential Space está sendo usada:
|
assertion.submods.confidential_space.support_attributes |
Matriz de strings |
Verifica se a versão de segurança do TEE é uma imagem de produção do Confidential Space. As imagens de depuração do Confidential Space não têm um atributo de suporte definido. Há três atributos de suporte:
ExemploO código a seguir verifica se uma versão estável da imagem do Confidential Space está sendo usada:
|
assertion.swname |
String definida |
Verifica o software em execução na entidade de atestado. O valor é sempre Exemplo
|
assertion.swversion |
Matriz de strings |
Verifica a versão do software da imagem do Confidential Space. Recomendamos usar
Exemplo
|
Declarações de contêiner
Declaração | Tipo | Descrição |
---|---|---|
Interage com:
|
Matriz de strings |
Verifica os comandos e parâmetros do CMD usados na imagem da carga de trabalho. ExemplosO código a seguir verifica se o CMD da imagem da carga de trabalho não foi substituído:
O código a seguir verifica se
|
Interage com:
|
objeto JSON |
Verifica se as variáveis de ambiente e os respectivos valores foram transmitidos explicitamente para o contêiner. ExemploO código a seguir verifica se a variável de ambiente
|
Interage com:
|
String |
Verifica se o operador de carga de trabalho substituiu as variáveis de ambiente no contêiner. ExemplosO código a seguir verifica se o operador de carga de trabalho não
substituiu a variável de ambiente
O código a seguir verifica se o operador de carga de trabalho não substituiu nenhuma variável de ambiente:
|
assertion.submods.container.image_digest |
String |
Verifica o resumo da imagem do contêiner da carga de trabalho. Especificar essa condição permite que várias partes concordem com uma carga de trabalho autorizada que tenha permissão para acessar os dados delas. Exemplo
|
assertion.submods.container.image_id |
String |
Verifica o ID da imagem do contêiner da carga de trabalho. Exemplo
|
Interage com:
|
String |
Verifica o local do contêiner da carga de trabalho em execução sobre a imagem do Confidential Space. Exemplo
|
Interage com:
|
objeto JSON |
Verifica se a imagem tem uma determinada assinatura ou se foi assinada por uma chave pública e um algoritmo de assinatura. Especificar essa condição permite que várias partes concordem com uma carga de trabalho autorizada que tenha permissão para acessar os dados delas. A declaração pode incluir os seguintes elementos:
Exemplo
|
Interage com:
|
String definida |
Verifica a política de reinicialização do inicializador do contêiner quando a carga de trabalho é interrompida. Os valores válidos são:
Exemplo
|
Declarações de VM
Declaração | Tipo | Descrição |
---|---|---|
Interage com:
|
Matriz de strings |
Verifica se uma conta de serviço especificada está conectada à
VM que está executando a carga de trabalho ou se foi listada usando
Exemplo
|
assertion.hwmodel |
String |
Verifica a tecnologia de Computação confidencial subjacente. As plataformas compatíveis são as seguintes:
Exemplo
|
Interage com:
|
Booleano |
Verifica o estado de monitoramento na entidade de atestado. Exemplo
|
assertion.submods.gce.instance_id |
String |
Verifica o ID da instância de VM. Exemplo
|
assertion.submods.gce.instance_name |
String |
Verifica o nome da instância de VM. Exemplo
|
assertion.submods.gce.project_id |
String |
Verifica se a VM está executando um projeto Google Cloud com o ID do projeto especificado. Exemplo
|
assertion.submods.gce.project_number |
String |
Verifica se a VM está em execução em um projeto Google Cloud com o número de projeto especificado. Exemplo
|
Interage com:
|
String |
Verifica se a VM está em execução na zona especificada. Exemplo
|