Afirmações de atestação


Para saber como usar declarações de atestação, consulte o artigo Crie uma política de atestação.

As afirmações disponíveis para criar uma política de atestação estão detalhadas na tabela seguinte. As políticas podem validar as afirmações feitas pela imagem do espaço confidencial, pelo contentor de carga de trabalho e pela instância de VM.

Afirmações de imagens

Afirmação Tipo Descrição

assertion.dbgstat

Interage com:

String definida

Verifica se a imagem do espaço confidencial é a versão de depuração ou de produção.

Os valores válidos são:

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

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

assertion.dbgstat == "enable"

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

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes Matriz de strings

Verifica se a versão de segurança do AEF é uma imagem do Confidential Space de produção. As imagens do espaço confidencial de depuração não têm o atributo de suporte definido.

Existem três atributos de apoio técnico:

  • LATEST: esta é a versão mais recente da imagem e é suportada. A imagem LATEST também é STABLE e USABLE.
  • STABLE: esta versão da imagem é suportada e monitorizada quanto a vulnerabilidades. Uma imagem STABLE também é USABLE.
  • USABLE: uma imagem com apenas este atributo está fora do apoio técnico e já não é monitorizada quanto a vulnerabilidades. Use por sua conta e risco.
  • EXPERIMENTAL: uma imagem com apenas este atributo usa funcionalidades de pré-visualização. Destina-se apenas a fins de teste e nunca deve ser usado em produção. Uma imagem EXPERIMENTAL nunca tem os atributos LATEST, STABLE ou USABLE.
Exemplo

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

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

Valida o software em execução na entidade de atestação. O valor é sempre CONFIDENTIAL_SPACE.

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

Valida a versão do software da imagem do Confidential Space. Recomendamos que use assertion.submods.confidential_space.support_attributes em alternativa para segmentar a versão mais recente de uma imagem.

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

Afirmações do contentor

Afirmação Tipo Descrição

assertion.submods.container.cmd_override

Interage com:

Matriz de strings

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

Exemplos

O código seguinte valida se o CMD da imagem da carga de trabalho não foi substituído:

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

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

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

assertion.submods.container.env

Interage com:

Objeto JSON

Verifica se as variáveis de ambiente e os respetivos valores foram transmitidos explicitamente para o contentor.

Exemplo

O código seguinte verifica se a variável de ambiente example-env-1 está definida como value-1 e se 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 da carga de trabalho substituiu as variáveis de ambiente no contentor.

Exemplos

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

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

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

size(assertion.submods.container.env_override) == 0
assertion.submods.container.image_digest String

Valida o resumo da imagem do contentor da carga de trabalho. A especificação desta condição permite que várias partes concordem numa carga de trabalho autorizada que tem permissão para aceder aos respetivos dados.

Exemplo
assertion.submods.container.image_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id String

Valida o ID da imagem do contentor da carga de trabalho.

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

assertion.submods.container.image_reference

Interage com:

String

Valida a localização do contentor de carga de trabalho em execução na parte superior da imagem do espaço confidencial.

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

assertion.submods.container.image_signatures

Interage com:

Objeto JSON

Valida se a imagem tem uma determinada assinatura ou se está assinada por uma chave pública e um algoritmo de assinatura. A especificação desta condição permite que várias partes concordem numa carga de trabalho autorizada que tem permissão para aceder aos respetivos dados.

A declaração pode incluir os seguintes elementos:

  • key_id: a impressão digital hexadecimal da chave pública. Para obter a impressão digital, pode executar o seguinte comando:

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

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

  • signature: A assinatura sobre uma carga útil associada ao contentor assinado e que segue o formato de assinatura simples.
  • signature_algorithm: O algoritmo usado para assinar a chave. Uma das seguintes 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 reinício do iniciador de contentores para quando a carga de trabalho para.

Os valores válidos são:

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

Afirmações de VMs

Afirmação Tipo Descrição

assertion.google_service_accounts

Interage com:

Matriz de strings

Verifica se uma conta de serviço especificada está ligada à VM que executa a carga de trabalho ou se foi listada através de 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

Valida a tecnologia de computação confidencial subjacente. As plataformas suportadas são as seguintes:

  • GCP_AMD_SEV
  • INTEL_TDX
Exemplo
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

Interage com:

Booleano

Valida o estado de monitorização na entidade de atestação.

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

Valida o ID da instância de VM.

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

Valida 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á a executar um Google Cloud projeto 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á a ser executada num Google Cloud projeto com o número do projeto especificado.

Exemplo
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

Interage com:

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

Verifica se a VM está a ser executada na zona especificada.

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

assertion.submods.nvidia_gpu.cc_mode

Interage com:

String definida

Valida o estado do controlador de computação confidencial da NVIDIA. Os valores válidos são:

  • OFF: nenhuma das funcionalidades de computação confidencial da NVIDIA está ativa.
  • ON: o hardware, o firmware e o software NVIDIA H100 ativaram totalmente as funcionalidades de computação confidencial.
  • DEVTOOLS: a GPU está num modo de computação confidencial parcial que corresponde aos fluxos de trabalho do modo ON, mas desativa as proteções de segurança.
Exemplo
assertion.submods.nvidia_gpu.cc_mode == "ON"