Esta página mostra como usar a validação contínua (CV) da autorização binária para a verificação de atestação de assinatura simples. A verificação valida as atestações de imagens de contentores associadas a Pods em execução num cluster do Google Kubernetes Engine (GKE) onde a CV está ativada.
Custos
Este guia usa os seguintes Google Cloud serviços:
- Autorização binária, mas a CV está disponível sem custo financeiro durante a fase de pré-visualização
- GKE
- Cloud Key Management Service
Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com - Certifique-se de que a CLI gcloud está atualizada para a versão mais recente.
- Instale a ferramenta de linha de comandos
kubectl. - Se as suas políticas de autorização binária e clusters do GKE estiverem em projetos diferentes, certifique-se de que a autorização binária está ativada em ambos os projetos.
-
Se o projeto do cluster for diferente do projeto da política:
Binary Authorization Policy Evaluator (
roles/binaryauthorization.policyEvaluator) no agente do serviço de autorização binária do projeto do cluster, para aceder ao projeto da política -
Se o seu projeto de atestação for diferente do projeto de políticas:
Leitor de ocorrências de análise de contentores (
roles/containeranalysis.occurrences.viewer) no agente do serviço de autorização binária do projeto de políticas, para que possa aceder ao projeto de atestação Conceda autorização ao agente do serviço de autorização binária do projeto do cluster para aceder à política no projeto da política.
Obtenha o agente do serviço de Autorização binária do projeto do cluster:
PROJECT_NUMBER=$(gcloud projects list --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"Substitua
CLUSTER_PROJECT_IDpelo ID do projeto do cluster.Permitir que o CV avalie a política no cluster:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \ --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \ --role='roles/binaryauthorization.policyEvaluator'Substitua
POLICY_PROJECT_IDpelo ID do projeto que contém a sua política.
Permita que o agente do serviço de autorização binária do projeto de políticas aceda às atestações no seu projeto de atestação:
Obtenha o agente de serviço da Autorização binária do projeto de política:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"Substitua
POLICY_PROJECT_IDpelo ID do projeto que contém a sua política.Conceda a função:
gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'Substitua
ATTESTATION_PROJECT_IDpelo ID do projeto que contém as suas atestações.
Configure as variáveis de ambiente necessárias para criar o par de chaves. Para o fazer, recomendamos que preencha os marcadores de posição no seguinte comando e, em seguida, execute o comando.
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=KMS_KEY_NAME KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1 KEY_FILE=KEY_FILESubstitua o seguinte:
KMS_KEY_PROJECT_ID: o ID do seu projetoKMS_KEYRING_NAME: um nome para o seu conjunto de chaves do Cloud KMSKMS_KEY_NAME: um nome para a sua chave do Cloud KMSKEY_FILE: um caminho local para guardar a sua chave do Cloud KMS
Crie o conjunto de chaves:
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --project=${KMS_KEY_PROJECT_ID}Crie a chave:
gcloud kms keys create ${KMS_KEY_NAME} \ --location=${KMS_KEY_LOCATION} \ --keyring=${KMS_KEYRING_NAME} \ --purpose=${KMS_KEY_PURPOSE} \ --default-algorithm=${KMS_KEY_ALGORITHM} \ --protection-level=${KMS_PROTECTION_LEVEL} \ --project=${KMS_KEY_PROJECT_ID}Exporte o material da chave pública para um ficheiro:
gcloud kms keys versions get-public-key ${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --output-file=${KEY_FILE} \ --project=${KMS_KEY_PROJECT_ID}Crie a chave privada:
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}Obtenha a chave pública a partir da chave privada:
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}Crie o ficheiro YAML da política da plataforma de verificação de atestação de assinatura simples:
PKIX Cloud KMS
cat > /tmp/my-policy.yaml << EOF gkePolicy: checkSets: - checks: - simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' ${KEY_FILE}) signatureAlgorithm: ECDSA_P256_SHA256 keyId: |- //cloudkms.googleapis.com/v1/projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION} EOFSubstitua
ATTESTATION_PROJECT_IDpelo ID do projeto que armazena atestações criadas com esta chave do Cloud KMS.Chave local
cat > /tmp/my-policy.yaml <<EOF gkePolicy: checkSets: - checks: - simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' /tmp/ec_public.pem) signatureAlgorithm: ECDSA_P256_SHA256 keyId: | PUBLIC_KEY_ID EOFSubstitua o seguinte:
ATTESTATION_PROJECT_ID: o ID do projeto que armazena atestações criadas com a sua chave localPUBLIC_KEY_ID: um ID que identifica exclusivamente a sua chave local
Crie a política da plataforma:
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
- POLICY_ID: Um ID de política da plataforma
à sua escolha. Se a política estiver noutro projeto, pode usar o nome completo do recurso:
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID. - POLICY_PATH: um caminho para o ficheiro de política.
- POLICY_PROJECT_ID: o ID do projeto da política.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows (PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows (cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
- POLICY_ID: Um ID de política da plataforma
à sua escolha. Se a política estiver noutro projeto, pode usar o nome completo do recurso:
Armazene o valor do ID para utilização posterior:
PUBLIC_KEY_ID="PUBLIC_KEY_ID"Substitua
PUBLIC_KEY_IDpelo ID que especificou no campokeyIdno ficheiro de política da plataforma anteriormente neste guia.A chave privada é usada quando as atestações são criadas, conforme descrito mais adiante neste guia.
CLUSTER_NAME: um nome do cluster.LOCATION: a localização, por exemplo,us-central1ouasia-south1.POLICY_PROJECT_ID: o ID do projeto onde a política está armazenada.POLICY_ID: o ID da política.CLUSTER_PROJECT_ID: o ID do projeto do cluster.CLUSTER_NAME: um nome do cluster.LOCATION: a localização, por exemplo,us-central1ouasia-south1.POLICY_PROJECT_ID: o ID do projeto onde a política está armazenada.POLICY_ID: o ID da política.CLUSTER_PROJECT_ID: o ID do projeto do cluster.CLUSTER_NAME: o nome do clusterLOCATION: a localização, por exemplo:us-central1ouasia-south1POLICY_PROJECT_ID: o ID do projeto onde a política está armazenadaPOLICY_ID: o ID da políticaCLUSTER_PROJECT_ID: o ID do projeto do clusterCLUSTER_NAME: um nome de clusterLOCATION: a localização, por exemplo:us-central1ouasia-south1POLICY_PROJECT_ID: o ID do projeto onde a política está armazenadaPOLICY_ID: o ID da políticaCLUSTER_PROJECT_ID: o ID do projeto do clusterCrie as variáveis de notas:
NOTE_PROJECT_ID=NOTE_PROJECT_ID NOTE_ID="test-note" NOTE_URI="projects/${NOTE_PROJECT_ID}/notes/${NOTE_ID}" DESCRIPTION="CV test note"Substitua
NOTE_PROJECT_ID: o ID do projeto que contém a nota.Crie o ficheiro de conteúdo da nota:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOMCrie a nota:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${NOTE_PROJECT_ID}" \ --data-binary @/tmp/note_payload.json "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/notes/?noteId=${NOTE_ID}"Substitua
NOTE_PROJECT_ID: o ID do projeto que contém a notaOpcional: para verificar se criou a nota:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: NOTE_PROJECT_ID" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJECT_ID/notes/"Substitua
NOTE_PROJECT_IDpelo ID do projeto que contém a nota.Assine a imagem e crie a atestação através da codificação de pré-autenticação (PAE) (recomendado):
gcloud beta container binauthz attestations sign-and-create \ --artifact-url=${IMAGE_TO_ATTEST} \ --keyversion=${KMS_KEY_VERSION} \ --keyversion-key=${KMS_KEY_NAME} \ --keyversion-keyring=${KMS_KEYRING_NAME} \ --keyversion-location=${KMS_KEY_LOCATION} \ --note=${NOTE_URI} \ --pae-encode-payload \ --dsse-type=DSSE_TYPESubstitua
DSSE_TYPEpelo tipo DSSE para a codificação PAE. A predefinição do sinalizador éapplication/vnd.dev.cosign.simplesigning.v1+json.Crie um ficheiro de payload de assinatura:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOMAssine o payload:
gcloud kms asymmetric-sign \ --version=${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --digest-algorithm=sha256 \ --input-file=/tmp/generated_payload.json \ --signature-file=/tmp/ec_signature \ --project=${KMS_KEY_PROJECT_ID}Crie o conteúdo da atestação:
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOMCrie a atestação:
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.jsonSubstitua
NOTE_PROJECT_IDpelo ID do projeto que contém a nota.Crie um ficheiro de payload de assinatura:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOMCrie o ficheiro de payload da assinatura:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signatureCrie a atestação:
gcloud container binauthz attestations create \ --project=ATTESTATION_PROJECT_ID \ --artifact-url=${IMAGE_TO_ATTEST} \ --note=${NOTE_URI} \ --signature-file=/tmp/ec_signature \ --public-key-id=PUBLIC_KEY_IDCrie um ficheiro de payload de assinatura:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOMCrie o ficheiro de payload da assinatura:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signatureCrie o conteúdo da atestação:
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOMCrie a atestação:
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.jsonConfigure o dispositivo
kubectl:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_IDSubstitua o seguinte:
CLUSTER_NAME: o nome do seu clusterLOCATION: a localização do clusterCLUSTER_PROJECT_ID: o ID do projeto do cluster
Implemente um serviço e verifique a implementação em relação à política de autorização binária:
kubectl run hello-app-with-attestation --image=$IMAGE_PATH@$IMAGE_DIGESTO agrupamento foi implementado. Uma vez que a imagem tem uma atestação, o CV não produz entradas de registo relacionadas com este Pod.
ImageFreshnessCheckSigstoreSignatureCheckSimpleSigningAttestationCheckSlsaCheckTrustedDirectoryCheckVulnerabilityCheckCLUSTER_NAME: o nome do clusterLOCATION: a localização do clusterCLUSTER_PROJECT_ID: o ID do projeto do clusterCLUSTER_NAME: o nome do clusterLOCATION: a localização do clusterCLUSTER_PROJECT_ID: o ID do projeto do clusterPOLICY_ID: o ID da políticaPOLICY_PROJECT_ID: o ID do projeto da política- Use a verificação da atualização das imagens
- Use a verificação de atestação de assinatura simples
- Use a verificação de assinatura do Sigstore
- Use a verificação SLSA
- Use a verificação de diretório fidedigno
- Use a verificação de vulnerabilidades
- Veja os registos de CV
Funções necessárias
Esta secção mostra como definir funções para esta verificação.
Vista geral
Se executar todos os produtos mencionados neste guia no mesmo projeto, não tem de definir autorizações. A autorização binária configura as funções corretamente quando a ativa. Se executar os produtos em projetos diferentes, tem de definir funções conforme descrito nesta secção.
Para garantir que o agente de serviço da autorização binária em cada projeto tem as autorizações necessárias para avaliar a verificação de atestação de assinatura simples de CV, peça ao seu administrador para conceder ao agente de serviço da autorização binária em cada projeto as seguintes funções de IAM:
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
O administrador também pode conceder ao agente do serviço de autorização binária em cada projeto as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Conceda funções através da CLI gcloud
Para garantir que o agente do serviço de autorização binária em cada projeto tem as autorizações necessárias para avaliar a verificação de atestação de assinatura simples de CV, conceda ao agente do serviço de autorização binária em cada projeto as seguintes funções de IAM:
Crie um par de chaves
Nesta secção, cria um par de chaves assimétricas do algoritmo de assinatura digital de curva elíptica (ECDSA).
Utiliza a chave privada para assinar a imagem, o que cria a atestação. Inclui a chave pública numa política da plataforma. Quando o CV verifica a atestação, usa a chave pública para a validar.
Pode usar o Cloud Key Management Service ou chaves locais, mas recomendamos que use chaves do Cloud KMS para produção.
PKIX Cloud KMS
Para criar o par de chaves no Cloud KMS, faça o seguinte:
Chave local
Para criar o par de chaves localmente, faça o seguinte:
Crie uma política de plataforma
Para criar uma política de CV com uma verificação de atestação de assinatura simples, faça o seguinte:
Ative o CV
Pode criar um novo cluster ou atualizar um cluster existente para usar a monitorização de CV com políticas da plataforma baseadas em verificações.
Crie um cluster que use a monitorização de CV
Nesta secção, cria um cluster que usa apenas a monitorização de CV com políticas da plataforma baseadas em verificações.
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Crie um cluster que use a aplicação e a monitorização de CV
Nesta secção, cria um cluster que usa a aplicação de políticas project-singleton e a monitorização de CV com políticas da plataforma baseadas em verificações:
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Atualize um cluster para usar a monitorização de CV
Nesta secção, atualiza um cluster para usar a monitorização de CV apenas com políticas da plataforma baseadas em verificações. Se o cluster já tiver a aplicação de políticas de instância única do projeto ativada, a execução deste comando desativa-a. Em alternativa, considere atualizar o cluster com a aplicação e a monitorização de CV ativadas.
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Atualize um cluster para usar a aplicação e a monitorização de CV
Nesta secção, atualiza um cluster para usar a aplicação da política de singleton do projeto e a monitorização de CV com políticas da plataforma baseadas em verificações.
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Crie a nota de análise de artefactos
Nesta secção, cria uma nota de análise de artefactos de exemplo para associar atestações. Para criar a nota, faça o seguinte:
Teste de CV
Nesta secção, testa a CV implementando a imagem para a qual criou uma atestação. Neste caso, a verificação de atestação de assinatura simples de CV valida a atestação e não produz nenhuma entrada de registo.
Em seguida, tenta implementar uma imagem diferente que não tem atestação. Neste caso, a verificação de CV não consegue encontrar a atestação e regista a violação no Cloud Logging.
Para criar as variáveis que usa para testar o CV, execute os seguintes comandos:
IMAGE_PATH="us-docker.pkg.dev/google-samples/containers/gke/hello-app"
IMAGE_DIGEST="sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567"
IMAGE_TO_ATTEST="${IMAGE_PATH}@${IMAGE_DIGEST}"
Crie uma atestação
Para satisfazer a verificação de atestação de assinatura simples, a imagem precisa de uma atestação válida.
Pode criar uma atestação através da CLI gcloud ou da API REST.
PKIX Cloud KMS
gcloud
Para criar uma atestação através da CLI gcloud, faça o seguinte:
API REST
Para criar uma atestação através da API REST, faça o seguinte:
Chave local
gcloud
API REST
Implemente a imagem que tem uma atestação
Para implementar uma imagem para a qual foi criada uma atestação, faça o seguinte:
Implemente uma imagem sem uma atestação
Nesta secção, implementa uma imagem que não tem uma atestação associada.
Uma vez que a política requer atestações e esta imagem não tem nenhuma, o CV regista regularmente a violação enquanto o contentor está em execução.
Para implementar a imagem, execute o seguinte comando:
kubectl run hello-app-without-attestation \
--image=$IMAGE_PATH@$IMAGE_DIGEST
O agrupamento foi implementado. Uma vez que a imagem não tem uma atestação, o CV produz entradas de registo enquanto o pod está em execução.
Veja os registos das entradas de CV
Pode pesquisar entradas do Cloud Logging para encontrar erros de configuração do CV e violações de validação de políticas da plataforma do CV.
O CV regista erros e violações no Cloud Logging no prazo de 24 horas. Normalmente, pode ver as entradas no prazo de algumas horas.
Veja os registos de erros de configuração do CV
Para ver os registos de erros de configuração de CV, execute o seguinte comando:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'
A saída seguinte mostra um erro de configuração em que não é encontrada uma política da plataforma de CV:
{
"insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
"configErrorEvent": {
"description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
}
},
"resource": {
"type": "k8s_cluster",
"labels": {
"cluster_name": "my-cluster",
"location": "us-central1-c",
"project_id": "my-project"
}
},
"timestamp": "2024-05-28T15:31:03.999566Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}
Veja as violações de validação da política da plataforma CV
Se nenhuma imagem violar as políticas da plataforma que ativou, não são apresentadas entradas nos registos.
Para ver as entradas do registo de CV dos últimos sete dias, execute o seguinte comando:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'
Substitua CLUSTER_PROJECT_ID pelo ID do projeto do cluster.
Tipos de verificações
Os registos de CV verificam as informações de violação para checkResults. Na entrada, o valor checkType indica a verificação. Os valores de cada verificação são os seguintes:
Exemplo de registo
A seguinte entrada de registo de CV descreve uma imagem não conforme que viola uma verificação de diretório fidedigno:
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/123456789/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "My check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "gcr.io/my-project/hello-app:latest"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-test-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
Limpar
Esta secção descreve como limpar a monitorização de CV que configurou anteriormente neste guia.
Pode desativar a monitorização de CV ou a autorização binária e a CV no seu cluster.
Desative a Autorização binária num cluster
Para desativar a aplicação da CV e da autorização binária no seu cluster, execute o seguinte comando:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Substitua o seguinte:
Desative a monitorização de políticas baseada em verificações num cluster
Para desativar a CV com políticas baseadas em verificações no cluster e reativar a aplicação através da política de aplicação da autorização binária, execute o seguinte comando:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
Substitua o seguinte:
Tenha em atenção que --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE é
equivalente à flag mais antiga --enable-binauthz.
Elimine a política
Para eliminar a política, execute o seguinte comando. Não é necessário eliminar a política da plataforma baseada em verificações para desativar a auditoria de políticas baseadas em verificações.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Substitua o seguinte: