Como verificar imagens sob demanda

A API On-Demand Scanning permite verificar as imagens armazenadas localmente em seu computador, no Container Registry ou no Artifact Registry. Isso oferece um controle granular sobre os contêineres que você quer verificar quanto a vulnerabilidades. É possível usar a verificação sob demanda para verificar imagens no pipeline de CI/CD antes de decidir armazená-las em um registro.

Consulte a página de preços para informações sobre preços.

Nesta página, descrevemos como verificar manualmente as imagens de contêiner com a verificação sob demanda.

Antes de começar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the On-Demand Scanning API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the On-Demand Scanning API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Adicione o componente local-extract à instalação do SDK do Cloud

    Como usar o Gerenciador de componentes do SDK do Cloud

    O gerenciador de componentes solicitará 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, é possível substituir dnf por yum no comando anterior.

  13. Conceda o papel do IAM Administrador de verificação sob demanda ao usuário ou à conta de serviço que você 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.

Como verificar uma imagem de contêiner

Para verificar uma imagem de contêiner, use o seguinte comando:

gcloud artifacts docker images scan IMAGE_URI [--remote] [--location=(us,europe,asia)] [--async]

Em que:

  • --remote é uma sinalização opcional que precisa ser usada se a imagem estiver hospedada remotamente, no Artifact Registry ou no Container Registry. Para uma imagem remota, use um dos seguintes formatos para IMAGE_URI:

    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
    • HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID

    Para imagens no Artifact Registry, o IMAGE_URI precisa incluir o REPOSTIORY_ID.

    Para uma imagem local, omita a sinalização --remote e use um dos seguintes formatos para o IMAGE_URI:

    • IMAGE_ID:TAG
    • IMAGE_ID
  • --location é uma sinalização opcional para selecionar manualmente a multirregião em que a verificação ocorre. Escolher uma multirregião mais próxima do seu local físico minimiza a latência. Os locais disponíveis são: us, europe e asia. O local padrão é us.

  • --async é uma sinalização opcional para executar o processo de verificação de forma assíncrona. Se você omitir essa sinalização, 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 sinalização --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 da vulnerabilidade. O nome é 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 código 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 estará concluída. Use o nome da verificação para recuperar os resultados da 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 de verificação, use o seguinte comando:

gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]

Em que:

  • SCAN_NAME é o nome da verificação. Você pode encontrá-lo na parte inferior da saída ao pesquisar a operação de longa duração, após a conclusão da verificação.
  • --limit=X é uma sinalização opcional que limita o número de ocorrências mostradas na saída.

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
  effectiveSeverity: LOW
  packageIssue:
  - affectedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    affectedPackage: libtasn1-6
    affectedVersion:
      kind: NORMAL
      name: 4.16.0
      revision: '2'
    fixedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    fixedPackage: libtasn1-6
    fixedVersion:
      kind: MAXIMUM
  severity: HIGH

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.

Os resultados da verificação ficam disponíveis por 48 horas após a conclusão da operação de verificação.

A seguir