A API On-Demand Scanning permite verificar imagens armazenadas localmente no seu computador ou remotamente no Artifact Registry. Isso oferece controle granular sobre os contêineres que você quer verificar se há vulnerabilidades. Você pode usar a On-Demand Scanning para verificar imagens no seu pipeline de CI/CD antes de decidir se vai armazená-las em um registro. Consulte a página de preços para mais informações.
Esta página descreve como verificar manualmente imagens de contêiner com a On-Demand Scanning.
Antes de começar
- Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create 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.
-
Verify that billing is enabled for your Google Cloud project.
Enable the On-Demand Scanning API.
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.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com 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.
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.
-
Verify that billing is enabled for your Google Cloud project.
Enable the On-Demand Scanning API.
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.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Adicione o componente local-extract à instalação da Google Cloud CLI
Como usar o gerenciador de componentes da CLI do Google Cloud
O gerenciador de componentes vai solicitar que você instale os componentes necessários na primeira vez que executar o comando de verificação.
Como usar o gerenciador de pacotes do sistema
-
Para Debian/Ubuntu:
sudo apt install google-cloud-sdk-local-extract
-
Para Red Hat/Fedora/CentOS:
sudo dnf install google-cloud-sdk-local-extract
Como alternativa, substitua
dnfporyumno comando anterior.
-
Para Debian/Ubuntu:
- Conceda o papel do IAM Administrador da verificação sob demanda ao usuário ou à conta de serviço que você vai usar com a On-Demand Scanning. Se você estiver usando a conta de proprietário do projeto para executar as verificações, pule esta etapa.
Verificar uma imagem de contêiner
Verificação local:
gcloud artifacts docker images scan IMAGE_URI \ [--location=(us,europe,asia)] [--async]Para uma imagem local, use um dos seguintes formatos para o IMAGE_URI:
REPOSITORY:TAGREPOSITORY
Verificação remota:
gcloud artifacts docker images scan IMAGE_URI \ --remote [--location=(us,europe,asia)] [--async]Para uma imagem remota, use um dos seguintes formatos para o IMAGE_URI:
HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASHHOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASHHOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_IDHOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASHHOSTNAME/PROJECT_ID/IMAGE_ID:HASHHOSTNAME/PROJECT_ID/IMAGE_ID
Para imagens no Artifact Registry, o IMAGE_URI precisa incluir o
REPOSITORY_ID.
Para verificações locais e remotas, é possível usar as seguintes flags opcionais:
--locationé uma flag para selecionar manualmente a multirregião em que a verificação ocorre. Escolher uma multirregião mais próxima da sua localização física minimiza a latência. Os locais disponíveis são:us,europeeasia. O local padrão éus.--asyncé uma flag para executar o processo de verificação de forma assíncrona. Se você omitir essa flag, o terminal será bloqueado até que o processo de verificação seja concluído.
Verificação síncrona
O exemplo a seguir mostra a saída de uma verificação síncrona, sem a flag --async:
$ gcloud artifacts docker images scan ubuntu:latest ✓ Scanning container image ✓ Locally extracting packages and versions from local container image ✓ Remotely initiating analysis of packages and versions ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7] Done. done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2021-01-05T23:03:04.185261Z' resourceUri: ubuntu:latest name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7 response: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
Use o nome da verificação para recuperar os resultados de vulnerabilidade.
O nome da verificação é o valor de scan na última linha da mensagem de saída.
Verificação assíncrona
O exemplo a seguir mostra a saída da execução de uma verificação assíncrona:
$ gcloud artifacts docker images scan ubuntu:latest --async ✓ Scanning container image ✓ Locally extracting packages and versions from local container image ✓ Remotely initiating analysis of packages and versions Done. Check operation [projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status. metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2021-01-05T23:04:54.393510Z' resourceUri: ubuntu:latest name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
Isso inicia uma operação de longa duração e retorna o ID dela sem bloquear o terminal. Use o ID da operação, o valor de name na última linha da
mensagem de saída, para pesquisar a operação.
Como pesquisar a operação de longa duração
Use o ID da operação, da saída do comando de verificação assíncrona, para verificar o status da operação.
gcloud artifacts docker images get-operation LRO_ID
Em que LRO_ID é o ID da operação de longa duração.
Continuando com o exemplo da seção de verificação assíncrona, para verificar o status da operação:
$ gcloud artifacts docker images get-operation \ projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2021-01-05T23:04:54.393510Z' resourceUri: ubuntu:latest name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 response: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
Se a saída incluir a linha done: true, a operação de verificação será concluída. Use o nome da verificação para recuperar os resultados de vulnerabilidade. O nome é o valor de scan na última linha da mensagem de saída.
Recuperar os resultados da verificação
Para recuperar os resultados da verificação após a conclusão da operação, use o seguinte comando:
gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]
Em que:
- SCAN_NAME é o nome da verificação. Ele pode ser encontrado na parte de baixo da saída ao pesquisar a operação de longa duração, após a conclusão da verificação.
--limit=Xé uma flag opcional que limita o número de ocorrências mostradas na saída.Xé um valor numérico.
Exemplo:
gcloud artifacts docker images list-vulnerabilities \
projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
createTime: '2021-01-05T23:05:42.956227Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135
noteName: projects/goog-vulnz/notes/CVE-2018-1000654
resourceUri: ubuntu:latest
updateTime: '2021-01-05T23:05:42.956227Z'
vulnerability:
cvssScore: 7.1
cvssv3:
attackComplexity: ATTACK_COMPLEXITY_LOW
attackVector: ATTACK_VECTOR_NETWORK
availabilityImpact: IMPACT_HIGH
baseScore: 7.2
confidentialityImpact: IMPACT_HIGH
exploitabilityScore: 1.2
impactScore: 5.9
integrityImpact: IMPACT_HIGH
privilegesRequired: PRIVILEGES_REQUIRED_HIGH
scope: SCOPE_UNCHANGED
userInteraction: USER_INTERACTION_NONE
effectiveSeverity: MEDIUM
A saída desse comando é uma lista de ocorrências no formato Grafeas. Nesse caso, ela mostra uma vulnerabilidade de gravidade média encontrada na imagem.
Os resultados da verificação ficam disponíveis por 48 horas após a conclusão da operação.
A seguir
- Use a API On-Demand Scanning no pipeline do Cloud Build.
- Use o Artifact Analysis para verificar e atualizar continuamente as informações de vulnerabilidade das imagens armazenadas no Artifact Registry.