Este tutorial mostra como criar uma atestação de autorização binária num pipeline do Cloud Build. Esta configuração ajuda a garantir que apenas as imagens de contentores criadas e assinadas como parte do processo de criação do Cloud Build são autorizadas automaticamente a serem executadas no seu ambiente de implementação.
Vista geral do Cloud Build
O Cloud Build (vista geral) usa código fonte armazenado nos Cloud Source Repositories ou noutro repositório alojado, executa as suas compilações e testes, e armazena os resultados de software no Container Registry ou noutro serviço de armazenamento na Google Cloud Platform.
Vista geral da autorização binária
A autorização binária (vista geral) é um Google Cloud produto que aplica restrições de implementação às aplicações. A sua integração com o Google Kubernetes Engine (GKE) permite que os utilizadores apliquem que os contentores implementados num cluster do Kubernetes sejam assinados criptograficamente por uma autoridade fidedigna e validados por um atestador da autorização binária.
Pode configurar a autorização binária para exigir atestações com base na localização do código fonte para impedir a implementação de imagens de contentores criadas a partir de origens não autorizadas.
Para saber mais:
- Uma introdução geral à autorização binária
- Codelab: Securing Your GKE Deployments with Binary Authorization
Arquitetura
O diagrama seguinte mostra os componentes numa configuração de autorização binária/Cloud Build:

Neste pipeline:
O código para criar a imagem de contentor é enviado para um repositório de origem, como os Cloud Source Repositories.
Uma ferramenta de integração contínua (CI), o Cloud Build, compila e testa o contentor.
A compilação envia a imagem de contentor para o Container Registry ou outro registo que armazena as imagens compiladas.
O Cloud Key Management Service, que fornece a gestão de chaves para o par de chaves criptográficas, assina a imagem do contentor. A assinatura resultante é, em seguida, armazenada numa atestação criada recentemente.
No momento da implementação, o atestador valida a atestação através da chave pública do par de chaves. A autorização binária aplica a política exigindo atestações assinadas para implementar a imagem do contentor.
Crie uma atestação com o Cloud Build e o Cloud Key Management Service
Esta secção mostra como implementar a arquitetura acima. Usa um passo de compilação personalizado de código aberto da comunidade do Cloud Build. O passo de compilação personalizado assina uma imagem de contentor, cria a atestação e carrega-a para a autorização binária.
Configure a gestão de identidade e de acesso
Para usar este passo de compilação, a conta de serviço do Cloud Build precisa das seguintes funções do IAM:
- Visualizador de atestadores da Autorização binária
roles/binaryauthorization.attestorsViewer
- Signer/Verifier de CryptoKey do Cloud KMS (se usar a chave no KMS para assinar a atestação)
roles/cloudkms.signerVerifier
- Artifact Analysis Notes Attacher
roles/containeranalysis.notes.attacher
Pode usar os seguintes comandos para adicionar as funções à conta de serviço do Cloud Build do seu projeto:
Ative o Cloud Build:
Ative a API Cloud Build no projeto Google Cloud de destino.
Guarde o ID do projeto numa variável de ambiente:
PROJECT_ID=PROJECT_ID
onde PROJECT_ID é o Google Cloud ID do projeto.
Defina o projeto da CLI Google Cloud:
gcloud config set project ${PROJECT_ID}
Obtenha o número do projeto:
PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
Adicione a função de visitante do atestador da autorização binária à conta de serviço do Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/binaryauthorization.attestorsViewer
Adicione a função de signatário/validador de CryptoKey do Cloud KMS à conta de serviço do Cloud Build (assinatura baseada no KMS):
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/cloudkms.signerVerifier
Adicione a função de anexador de notas da análise de artefactos à conta de serviço do Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/containeranalysis.notes.attacher
Crie e registe o passo de criação personalizado com o Cloud Build
Clone o repositório da comunidade do Google Cloud Build:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Configure o signatário da autorização binária para o Cloud Build:
Antes da utilização, o código do passo de compilação personalizado tem de ser compilado num contentor e enviado para o Cloud Build. Para o fazer, execute os seguintes comandos:
cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml
O passo de compilação personalizado foi enviado para o Google Container Registry do seu projeto atual e já está pronto a ser usado.
Crie um atestador na Autorização binária
Crie um atestador que a autorização binária vai usar no momento da implementação para validar a atestação.
Configure um atestador e um par de chaves do Cloud Key Management Service na autorização binária:
Consulte o artigo Crie um atestador através da CLI
Confirme se o atestador foi criado
gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
Adicione um passo "create-attestation" ao seu cloudbuild.yaml
Para usar o passo binauthz-attestation
, tem de atualizar o seu cloudbuild.yaml
adicionando o passo que vai assinar a compilação enviada para o
Container Registry.
São apresentados dois métodos abaixo:
Atualize o
cloudbuild.yaml
manualmente.Execute um exemplo de pipeline com as variáveis de ambiente que definiu anteriormente.
Atualize o cloudbuild.yaml
manualmente
Atualize o
cloudbuild.yaml
manualmente adicionando o passo de compilação abaixo após o passo em que o contentor é carregado para o registo de contentores. Nota: tem de substituir ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME e KMS_KEY_VERSION pelos seus próprios valores manualmente:- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME' - '--keyversion' - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
O seguinte também é válido:
- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'ATTESTOR_NAME' - '--attestor-project' - '${PROJECT_ID}' - '--keyversion' - 'KEY_VERSION' - '--keyversion-project' - '${PROJECT_ID}' - '--keyversion-location' - 'KEY_LOCATION' - '--keyversion-keyring' - 'KEYRING_NAME' - '--keyversion-key' - 'KEY_NAME'
Opcional: teste a conduta
Para testar um exemplo de pipeline de atestação do Cloud Build, siga os seguintes passos:
Crie um ficheiro
cloudbuild.yaml
com as variáveis de ambiente que definiu anteriormente:cd example cat <<EOM > cloudbuild_example.yaml steps: - id: 'build' name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '.' - id: 'publish' name: 'gcr.io/cloud-builders/docker' args: - 'push' - 'gcr.io/$PROJECT_ID/helloworld:latest' - id: 'create-attestation' name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '--attestor' - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}' - '--keyversion' - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}' tags: ['cloud-builders-community'] EOM
Execute o Cloud Build com o exemplo
cloudbuild_example.yaml
:No diretório
cloud-builders-community/binauthz-attestation/example
, execute os seguintes comandos:gcloud builds submit . --config cloudbuild_example.yaml