Declarações de atestado


Para saber mais sobre como usar declarações de atestado, consulte Criar uma política 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

assertion.dbgstat

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:

  • enable: verifique se a imagem de depuração está sendo usada.
  • disabled-since-boot: verifique se a imagem de produção está sendo usada.
Exemplos

O código a seguir verifica se a versão de depuração da imagem do Confidential Space está sendo usada:

assertion.dbgstat == "enable"

O código a seguir verifica se a versão de produção da imagem do Confidential Space está sendo usada:

assertion.dbgstat == "disabled-since-boot"
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:

  • LATEST: essa é a versão mais recente da imagem e é compatível. A imagem LATEST também é STABLE e USABLE.
  • STABLE: essa versão da imagem tem suporte e é monitorada em busca de vulnerabilidades. Uma imagem STABLE também é USABLE.
  • USABLE: uma imagem com apenas esse atributo não tem suporte e não é mais monitorada em busca de vulnerabilidades. Use por sua própria conta e risco.
Exemplo

O código a seguir verifica se uma versão estável da imagem do Confidential Space está sendo usada:

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname String definida

Verifica o software em execução na entidade de atestado. O valor é sempre CONFIDENTIAL_SPACE.

Exemplo
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion Matriz de strings

Verifica a versão do software da imagem do Confidential Space. Recomendamos o uso de assertion.submods.confidential_space.support_attributes para acessar a versão mais recente de uma imagem.

Exemplo
int(assertion.swversion[0]) == 230103

Declarações de contêiner

Declaração Tipo Descrição

assertion.submods.container.cmd_override

Interage com:

Matriz de strings

Verifica os comandos e parâmetros do CMD usados na imagem da carga de trabalho.

Exemplos

O código a seguir verifica se o CMD da imagem da carga de trabalho não foi substituído:

size(assertion.submods.container.cmd_override) == 0

O código abaixo verifica se program é o único conteúdo nas substituições do CMD:

assertion.submods.container.cmd_override == ['program']

assertion.submods.container.env

Interage com:

objeto JSON

Verifica se as variáveis de ambiente e os respectivos valores foram transmitidos explicitamente para o contêiner.

Exemplo

O código a seguir verifica se a variável de ambiente example-env-1 está definida como value-1 e example-env-2 está definida como value-2.

assertion.submods.container.env == {"example-env-1": "value-1", "example-env-2": "value-2"}

assertion.submods.container.env_override

Interage com:

String

Verifica se o operador de carga de trabalho substituiu variáveis de ambiente no contêiner.

Exemplos

O código a seguir verifica se o operador de carga de trabalho não substituiu a variável de ambiente example:

!has(assertion.submods.container.env_override.example)

O código a seguir verifica se o operador de carga de trabalho não substituiu nenhuma variável de ambiente:

size(assertion.submods.container.env_override) == 0
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_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id String

Verifica o ID da imagem do contêiner da carga de trabalho.

Exemplo
assertion.submods.container.image_id == "sha256:652a44b0e911271ba07cf2915cd700fdfa50abd62a98f87a57fdebc59843d93f"

assertion.submods.container.image_reference

Interage com:

String

Verifica o local do contêiner da carga de trabalho em execução sobre a imagem do Confidential Space.

Exemplo
assertion.submods.container.image_reference == "us-docker.pkg.dev/PROJECT_ID/WORKLOAD_CONTAINER:latest"

assertion.submods.container.image_signatures

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:

  • key_id: a impressão digital hexadecimal da chave pública. Para encontrar a impressão digital, execute o seguinte comando:

    openssl pkey -pubin -in public_key.pem -outform DER | openssl sha256

    Onde public_key.pem é sua chave pública no formato PEM.

  • signature: a assinatura sobre um payload que é associado ao contêiner assinado e que segue o formato de assinatura simples.
  • signature_algorithm: o algoritmo usado para assinar a chave. Opções:

    • RSASSA_PSS_SHA256 (RSASSA-PSS com um resumo SHA-256)
    • RSASSA_PKCS1V15_SHA256 (RSASSA-PKCS1 v1_5 com um resumo SHA-256)
    • ECDSA_P256_SHA256 (ECDSA na curva P-256 com um resumo SHA-256)
Exemplo
assertion.swname == 'CONFIDENTIAL_SPACE' && ['ECDSA_P256_SHA256:PUBLIC_KEY_FINGERPRINT'].exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)) && 'serviceaccount.iam.gserviceaccount.com' in assertion.google_service_accounts"

assertion.submods.container.restart_policy

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:

  • Never (padrão)
  • Always
  • OnFailure
Exemplo
assertion.submods.container.restart_policy == "Never"

Declarações de VM

Declaração Tipo Descrição

assertion.google_service_accounts

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 tee-impersonate-service-accounts nos metadados da VM.

Exemplo
workload-service-account@my-project.iam.gserviceaccount.com in assertion.google_service_accounts
assertion.hwmodel String

Verifica a tecnologia de Computação confidencial subjacente. As plataformas com suporte são as seguintes:

Exemplo
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

Interage com:

Booleano

Verifica o estado de monitoramento na entidade de atestado.

Exemplo
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id String

Verifica o ID da instância da VM.

Exemplo
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name String

Verifica o nome da instância de VM.

Exemplo
assertion.submods.gce.instance_name == "workload-vm"
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_id == "project-id"
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
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

Interage com:

  • Operador de carga de trabalho: o valor de --zone .
String

Verifica se a VM está em execução na zona especificada.

Exemplo
assertion.submods.gce.zone == "us-central1-a"