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 serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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 serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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