Com a API On-Demand Scanning, é possível verificar imagens armazenadas localmente no computador ou remotamente no Artifact Registry. É possível usar a verificação sob demanda para analisar imagens no pipeline de CI/CD, em busca de vulnerabilidades do sistema e do pacote Go, antes de decidir se elas serão armazenadas em um registro. Consulte a página de preços para mais informações.
Nesta página, descrevemos como verificar manualmente imagens de contêiner em busca de vulnerabilidades do sistema e de pacotes do Go.
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.
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
(
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. -
Install the 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 gcloud CLI, 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
(
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. -
Install the 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 gcloud CLI, execute o seguinte comando:
gcloud init -
Adicione o componente local-extract à instalação da Google Cloud CLI.
Como usar o Gerenciador de componentes da Google Cloud CLI
O gerenciador de componentes vai pedir que você instale os componentes necessários na primeira vez que executar o comando de verificação.
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 verificação sob demanda. Se você estiver usando a conta de proprietário do projeto para executar as verificações, pule esta etapa.
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.--locationé uma flag opcional para selecionar manualmente a multirregião em que a verificação será realizada. 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 opcional 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.SCAN_NAME é o nome da verificação. Ele fica na última linha da saída quando você executa uma verificação síncrona ou pesquisa 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.packageType:GO_STDLIB. Vulnerabilidades da biblioteca padrão do Go. Isso indica que a vulnerabilidade foi encontrada na cadeia de ferramentas do Go usada para criar o binário ou na biblioteca padrão agrupada com a cadeia de ferramentas. Uma possível correção é fazer upgrade do conjunto de ferramentas de build.packageType:GO. Vulnerabilidades do pacote Go. Isso indica que a vulnerabilidade foi encontrada em um pacote de terceiros. Uma possível correção é fazer upgrade dos módulos dependentes.- 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.
Verificar uma imagem de contêiner
Para verificações locais e remotas, use as seguintes flags opcionais:
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 golang:1.17.6-alpine ✓ 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: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine 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 extrair 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 de uma verificação assíncrona:
$ gcloud artifacts docker images scan golang:1.17.6-alpine --async ✓ Scanning container image ✓ Locally extracting packages and versions from local container image ✓ Remotely initiating analysis of packages and versions Done. Check operation [projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status. metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine 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 seu
terminal. Use o ID da operação, o valor de name na última linha da
mensagem de saída, para pesquisar a operação.
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/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16 done: true metadata: '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata createTime: '2022-01-11T16:58:11.711487Z' resourceUri: golang:1.16.13-alpine 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:
Exemplo:
createTime: '2022-01-11T16:58:11.972043Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/0c607d9b-aff4-4cde-86b7-e2c0a865aadd
noteName: projects/goog-vulnz/notes/CVE-2021-38297
resourceUri: golang:1.16.13-alpine
updateTime: '2022-01-11T16:58:11.972043Z'
vulnerability:
cvssScore: 7.5
effectiveSeverity: CRITICAL
longDescription: Go before 1.16.9 and 1.17.x before 1.17.2 has a Buffer Overflow
via large arguments in a function invocation from a WASM module, when GOARCH=wasm
GOOS=js is used.
packageIssue:
- affectedCpeUri: cpe:/o:alpine:alpine_linux:3.15
affectedPackage: go
affectedVersion:
fullName: 1.16.13
kind: NORMAL
name: 1.16.13
effectiveSeverity: CRITICAL
fixedCpeUri: cpe:/o:alpine:alpine_linux:3.15
fixedPackage: go
fixedVersion:
fullName: 1.17.2
kind: NORMAL
name: 1.17.2
packageType: GO_STDLIB
relatedUrls:
- label: More Info
url: https://security-tracker.debian.org/tracker/CVE-2021-38297
- label: More Info
url: https://access.redhat.com/security/cve/CVE-2021-38297
- label: More Info
url: https://nvd.nist.gov/vuln/detail/CVE-2021-38297
severity: HIGH
shortDescription: CVE-2021-38297
A saída desse comando é uma lista de ocorrências no formato Grafeas. Nesse caso, ele mostra uma vulnerabilidade de alta gravidade encontrada na imagem.
A verificação sob demanda identifica dois tipos de vulnerabilidades de pacotes Go:
Os resultados da verificação ficam disponíveis por 48 horas após a conclusão da operação.