Esta página fornece instruções sobre como você pode proteger implantações de imagem para o Cloud Run e o Google Kubernetes Engine usando o Cloud Build.
Saiba como configurar a autorização binária para verificar atestados de build e bloquear implantações de imagens que não são geradas pelo Cloud Build. Esse processo pode reduzir o risco de implantações softwares não autorizados.
Antes de começar
Enable the Cloud Build, Binary Authorization, and Artifact Registry APIs.
Para usar os exemplos de linha de comando neste guia, instale e configure o SDK do Google Cloud.
Controlar implantações com autorização binária
Uma política na autorização binária é um conjunto de regras que regem a implantação de imagens. É possível configurar uma regra para exigir atestados assinados digitalmente.
O Cloud Build gera e assina atestados no momento da criação. Com
Autorização binária, é possível usar o atestador built-by-cloud-build
para
verificar os atestados e implantar apenas imagens criadas pelo Cloud Build.
Para criar o atestador built-by-cloud-build
no projeto, execute um build nele.
Para permitir que apenas as imagens criadas pelo Cloud Build sejam implantadas, execute estas etapas:
Console
Acesse a página Autorização binária no Console do Google Cloud:
Na guia Política, clique em Editar política.
Na caixa de diálogo Editar política, selecione Permitir apenas imagens que foram aprovadas por todos os seguintes atestadores.
Clique em Adicionar atestadores.
Na caixa de diálogo Adicionar atestadores:
- Selecione Adicionar por projeto e nome do atestador e execute estas etapas:
- No campo Nome do projeto, insira o projeto em que você executa o Cloud Build.
- Clique no campo Nome do atestador e veja se o
atestador
built-by-cloud-build
está disponível. - Clique em
built-by-cloud-build
.
Como alternativa, selecione Adicionar por ID do recurso de atestador. Em ID de recurso do atestador, digite:
projects/PROJECT_ID/attestors/built-by-cloud-build
Substitua
PROJECT_ID
pelo projeto em que você executa o Cloud Build.
- Selecione Adicionar por projeto e nome do atestador e execute estas etapas:
Clique em Adicionar um atestador.
Clique em Save Policy.
gcloud
Exporte a política atual para um arquivo usando este comando:
gcloud container binauthz policy export > /tmp/policy.yaml
Edite o arquivo da política.
Edite uma destas regras:
defaultAdmissionRule
clusterAdmissionRules
istioServiceIdentityAdmissionRules
kubernetesServiceAccountAdmissionRules
Adicione um bloco
requireAttestationsBy
à regra, se ainda não houver um.No bloco
requireAttestationsBy
, adicione:projects/PROJECT_ID/attestors/built-by-cloud-build
Substitua
PROJECT_ID
pelo projeto em que você executa o Cloud Build.Salve o arquivo de política.
Importe o arquivo de política.
gcloud container binauthz policy import /tmp/policy.yaml
Veja a seguir um exemplo de arquivo de política que contém a referência ao
built-by-cloud-build-attestor
:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policy
Substitua
PROJECT_ID
pelo ID do projeto em que você executa o Cloud Build.
É possível ver os erros de política nas mensagens do registro de autorização binária para GKE ou Cloud Run.
Como usar o modo de teste
No modo de simulação, a autorização binária verifica a conformidade da política sem realmente bloquear a implantação. Em vez disso, as mensagens de status de conformidade com a política são registradas no Cloud Logging. É possível usar esses registros para determinar se a política de bloqueio está funcionando corretamente e identificar falsos positivos.
Para ativar a simulação, faça o seguinte:
Console
Acesse a página "Autorização binária" no Console do Google Cloud.
Clique em Editar política.
Em Regra padrão ou em uma regra específica, selecione Modo de teste.
Clique em Save Policy.
gcloud
Exporte a política de autorização binária para um arquivo YAML:
gcloud container binauthz policy export > /tmp/policy.yaml
Em um editor de texto, defina
enforcementMode
comoDRYRUN_AUDIT_LOG_ONLY
e salve o arquivo.Para atualizar a política, importe o arquivo executando o seguinte comando:
gcloud container binauthz policy import /tmp/policy.yaml
É possível conferir os erros de política nas mensagens do registro de autorização binária para o GKE ou o Cloud Run.
Limitações
O Cloud Build e a Autorização binária precisam estar no mesmo projeto. Se você executar a plataforma de implantação em outro projeto, configure os papéis do IAM para uma configuração de vários projetos e consulte o projeto do Cloud Build ao adicionar o atestado
built-by-cloud-build
na autorização binária.O Cloud Build não gera declarações quando você envia imagens para o Artifact Registry usando uma etapa de build explícita
docker push
. Não se esqueça de pressionar ao Artifact Registry usando o campoimages
na etapa de builddocker build
. Para Para mais informações sobreimages
, consulte Diferentes maneiras de armazenar imagens no Artifact Registry.É necessário usar arquivos de configuração de build separados para o pipeline de build e pipeline de implantação. Isso ocorre porque o Cloud Build produz atestados somente depois que o pipeline de build for concluído com sucesso. A autorização binária vai verificar o atestado antes de implantar a imagem.
Ativar declarações em pools particulares
Por padrão, o Cloud Build não gera autorização binária
atestados para builds em pools privados. Para gerar
atestados do Cloud, adicione a opção requestedVerifyOption: VERIFIED
aos seus
arquivo de configuração do build:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
Depois de adicionar o requestedVerifyOption
, o Cloud Build ativa a
geração de atestados e os metadados de procedência para sua
imagem.
Ver metadados do atestador
Um atestador é criado na primeira vez que você executa um build em um projeto. O
ID do emissor tem o formato
projects/PROJECT_ID/attestors/built-by-cloud-build
,
em que PROJECT_ID
é o ID do projeto.
Verifique os metadados do atestador do build usando o seguinte comando:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
Substitua PROJECT_ID
pelo projeto em que você executa
o Cloud Build.
A saída contém informações sobre o atestador e as chaves públicas correspondentes. Exemplo:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build", "userOwnedDrydockNote": { "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build", "publicKeys": [ { "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1", "pkixPublicKey": { "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n", "signatureAlgorithm": "ECDSA_P256_SHA256" } }, ... } ], "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com" }, "updateTime": "2021-09-24T15:26:44.808914Z", "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"
A seguir
- Saiba mais sobre a Autorização binária.