Os colaboradores de dados precisam configurar os seguintes recursos para que os dados confidenciais sejam acessados por uma carga de trabalho:
Os dados criptografados, armazenados no Google Cloud.
Contas de serviço que podem descriptografar esses dados.
Validação de atestado usando um pool de identidade de carga de trabalho (WIP). Depois que uma carga de trabalho é autorizada pelo WIP, ela pode falsificar 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 sã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
Você pode usar qualquer serviço do 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 cargas de trabalho do Confidential Space e reduz a exposição humana a esses dados usando contas de serviço.
Por exemplo, você pode criptografar arquivos confidenciais no Cloud Storage com o Cloud KMS e criar uma conta de serviço que tenha 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 baseada em outro projeto pode usar esse WIP para imitar 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 de dados confidenciais é restrita aos proprietários deles. 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 que usam 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 Confidential Space confidencial para conferir um exemplo.
Criar um WIP e um provedor para a validação do 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 dela. O processo é baseado em medições de inicialização e de execução estendidas da VM protegida 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 a 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 o WIP autorizar a carga de trabalho, ela poderá imitar contas de serviço no projeto para descriptografar e extrair dados confidenciais.
Para configurar um WIP e um provedor, siga estas instruções:
Conecte sua conta de serviço de descriptografia ao WIP com o papel
iam.workloadIdentityUser
.Crie um provedor OIDC com os seguintes detalhes:
Um URI do 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 atestado para ver as opções disponíveis.
Criar uma política de atestado
Como parte da criação de um WIP, você adiciona condições de atributo, condições que uma carga de trabalho precisa passar 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 identidade da 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, o contêiner de carga de trabalho e a VM.
Afirmaçõ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 do Confidential Space de produção. 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 o uso de
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 abaixo 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 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 é 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 com suporte 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 da 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 do 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 do 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
|