Verificar pacotes Java manualmente

Com a API On-Demand Scanning, é possível verificar imagens armazenadas localmente no seu computador ou remotamente no Artifact Registry. Você pode usar a verificação sob demanda para verificar imagens no seu pipeline de CI/CD, em busca de vulnerabilidades do sistema e do pacote Java (Maven) antes de decidir se vai armazená-las 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 Maven.

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Instale a CLI do Google Cloud.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Instale a CLI do Google Cloud.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  13. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  14. 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 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 dnf por yum no comando anterior.

  15. 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.

Como 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:TAG
    • REPOSITORY
  • Varredura 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: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 REPOSITORY_ID.

Para verificações locais e remotas, use as seguintes flags opcionais:

  • --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, europe e asia. 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.

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 jenkins:2.60.3-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: '2021-01-05T23:03:04.185261Z'
  resourceUri: jenkins:2.60.3-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. No exemplo, 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 jenkins:2.60.3-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/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: jenkins:2.60.3-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 na 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: jenkins:2.60.3-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 da verificação é 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: '2021-06-29T17:01:18.819477Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/06305977-f557-4772-8586-4260684291d3
noteName: projects/my-project/notes/CVE-2014-0114
resourceUri: jenkins:2.60.3-alpine
updateTime: '2021-06-29T17:01:18.819477Z'
vulnerability:
  cvssScore: 4.3
  effectiveSeverity: MEDIUM
  longDescription: http/conn/ssl/SSLConnectionSocketFactory.java in ...
  packageIssue:
  - affectedCpeUri: cpe:/o:alpine:alpine_linux:3.13
    affectedPackage: org.apache.httpcomponents:httpclient
    affectedVersion:
      fullName: 4.0.2
      kind: NORMAL
      name: 4.0.2
    effectiveSeverity: MEDIUM
    fixedCpeUri: cpe:/o:alpine:alpine_linux:3.13
    fixedPackage: org.apache.httpcomponents:httpclient
    fixedVersion:
      fullName: 4.3.6
      kind: NORMAL
      name: 4.3.6
    packageType: MAVEN
  relatedUrls:
  - label: More Info
    url: https://security-tracker.debian.org/tracker/CVE-2015-5262
  severity: MEDIUM
  shortDescription: CVE-2015-5262

A saída desse comando é uma lista de ocorrências no formato Grafeas. Neste caso, ela mostra uma vulnerabilidade de gravidade média encontrada na imagem. As vulnerabilidades de pacotes do Maven contêm o campo packageType:MAVEN.

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

A seguir