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.yamlmanualmente.
- Execute um exemplo de pipeline com as variáveis de ambiente que definiu anteriormente. 
Atualize o cloudbuild.yaml manualmente
- Atualize o - cloudbuild.yamlmanualmente 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.yamlcom 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