A utilização da análise a pedido como parte do pipeline do Cloud Build permite-lhe bloquear compilações se a imagem do contentor tiver vulnerabilidades com uma gravidade correspondente a um nível predefinido.
Este tutorial mostra como usar o Cloud Build para criar a sua imagem de contentor a partir do código-fonte, analisá-la quanto a vulnerabilidades, verificar os níveis de gravidade das vulnerabilidades e enviar a imagem para o Artifact Registry se não existirem vulnerabilidades de um nível de gravidade específico.
Recomendamos que crie um novo Google Cloud projeto para este tutorial e conclua os passos num ambiente isolado.
Objetivos
- Crie uma imagem com o Cloud Build.
- Analise a imagem criada com a análise a pedido.
- Avalie os níveis de vulnerabilidade aceitáveis.
- Armazene a imagem no Artifact Registry.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
Administrador da análise a pedido (
roles/ondemandscanning.admin
)Escritor do Artifact Registry (
roles/artifactregistry.writer
)Abra um terminal, crie um novo diretório com o nome
ods-tutorial
e navegue até ele:mkdir ods-tutorial && cd ods-tutorial
Crie um ficheiro denominado
Dockerfile
com o seguinte conteúdo:# Debian10 image FROM gcr.io/google-appengine/debian10:latest # Ensures that the built image is always unique RUN apt-get update && apt-get -y install uuid-runtime && uuidgen > /IAMUNIQUE
Defina o ID do projeto para o mesmo projeto onde ativou as APIs:
gcloud config set project PROJECT_ID
Crie um repositório do Docker com o nome
ods-build-repo
na localizaçãous-central1
:gcloud artifacts repositories create ods-build-repo --repository-format=docker \ --location=us-central1 --description="Repository for scan and build"
Verifique se o repositório foi criado com êxito:
gcloud artifacts repositories list
Na pasta
ods-tutorial/
, crie o ficheirocloudbuild.yaml
com o seguinte conteúdo:steps: - id: build name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker build -t us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest -f ./Dockerfile . && docker image inspect us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest --format \ '{{index .RepoTags 0}}@{{.Id}}' > /workspace/image-digest.txt && cat image-digest.txt - id: scan name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images scan us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest \ --format='value(response.scan)' > /workspace/scan_id.txt - id: severity check name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format='value(vulnerability.effectiveSeverity)' | if grep -Exq $_SEVERITY; \ then echo 'Failed vulnerability check' && exit 1; else exit 0; fi - id: push name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker push us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest images: ['us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest']
Este ficheiro inclui a localização e o repositório criados anteriormente no Artifact Registry. Se decidir usar valores diferentes, modifique o ficheiro
cloudbuild.yaml
em conformidade. Os valores dePROJECT_ID
eSEVERITY
são transmitidos ao script no comando de compilação.Especifique os
SEVERITY
níveis de vulnerabilidade que quer bloquear e comece a compilação.Pode usar os seguintes valores para
SEVERITY
:CRITICAL
HIGH
MEDIUM
LOW
Pode especificar várias gravidades através de uma expressão regular.
No exemplo seguinte, especifica os valores de gravidade
CRITICAL
eHIGH
. Isto indica ao Cloud Build que verifique se existem vulnerabilidades classificadas no nível de gravidadeHIGH
ou superior.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yaml
Onde
- PROJECT_ID é o ID do seu projeto.
- SEVERITY permite-lhe definir os níveis de gravidade que quer bloquear. Se a análise a pedido encontrar vulnerabilidades que correspondam a qualquer um dos níveis de gravidade especificados, a compilação falha.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Abra a página Repositórios na Google Cloud consola.
Na lista de repositórios, selecione o repositório
ods-build-repo
.Clique em Eliminar.
Funções necessárias
A conta de serviço que usa com o Cloud Build requer as seguintes funções:
A conta de serviço predefinida do Cloud Build tem as autorizações necessárias para os repositórios do Artifact Registry no mesmo projeto. Se os seus repositórios estiverem no mesmo projeto que usa para o Cloud Build, só tem de conceder a função de administrador da análise a pedido.
Se estiver a usar uma conta de serviço fornecida pelo utilizador para o Cloud Build, tem de conceder ambas as funções.
Prepare o ficheiro de origem
Neste tutorial, vai criar uma imagem a partir de um Dockerfile. Um Dockerfile é um ficheiro de origem que contém instruções para o Docker criar uma imagem.
Crie um repositório do Artifact Registry
Crie e analise
Nesta secção, vai executar o pipeline de compilação através de um ficheiro de configuração de compilação. Um ficheiro de configuração de compilação indica ao Cloud Build como realizar várias tarefas com base nas suas especificações.
Compreenda os seus resultados
Quando define o valor de SEVERITY
como CRITICAL|HIGH
, depois de a análise a pedido procurar vulnerabilidades, verifica se existem alguma ao nível de HIGH
e ao nível mais grave de CRITICAL
. Se não forem encontradas vulnerabilidades correspondentes na sua imagem, a compilação é bem-sucedida e o Cloud Build envia a imagem para o Artifact Registry.
O resultado é semelhante ao seguinte:
DONE
--------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
abb3ce73-6ae8-41d1-9080-7d74a7ecd7bc 2021-03-15T06:50:32+00:00 1M48S gs://ods-tests_cloudbuild/source/1615791031.906807-a648d10faf4a46d695c163186a6208d5.tgz us-central1-docker.pkg.dev/ods-tests/ods-build-repo/ods-test (+1 more) SUCCESS
Se a análise a pedido encontrar vulnerabilidades HIGH
ou CRITICAL
na sua imagem, o passo de compilação scan
falha, os passos de compilação subsequentes não são iniciados e o Cloud Build não envia uma imagem para o Artifact Registry.
O resultado é semelhante ao seguinte:
Step #2 - "severity check": Failed vulnerability check
Finished Step #2 - "severity check"
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
Neste tutorial, os seus resultados podem variar, uma vez que o código-fonte de exemplo é uma distribuição Linux disponível publicamente, debian10:latest
. As distribuições Linux e os dados de vulnerabilidade relacionados recebem atualizações de forma contínua.
Para saber mais acerca de Google Cloud ferramentas e práticas recomendadas adicionais para ajudar a proteger a sua cadeia de abastecimento de software, consulte o artigo Segurança da cadeia de abastecimento de software.
Para mais informações sobre as práticas recomendadas de gestão de vulnerabilidades do Linux, pode usar a formação online gratuita fornecida pela Linux Foundation. Consulte o artigo Desenvolver software seguro.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
Elimine recursos individuais
Antes de remover o repositório, certifique-se de que as imagens que quer manter estão disponíveis noutra localização.
Para eliminar o repositório:
Consola
gcloud
Para eliminar ods-build-repo
o repositório, execute o seguinte comando:
gcloud artifacts repositories delete ods-build-repo --location=us-central1