Procure pacotes Java manualmente

A API On-Demand Scanning permite-lhe analisar imagens armazenadas localmente no seu computador ou remotamente no Artifact Registry. Pode usar a análise a pedido para analisar imagens no seu pipeline de CI/CD, quanto a vulnerabilidades do sistema e vulnerabilidades de pacotes Java (Maven) antes de decidir se as armazena num registo. Consulte a página de preços para ver informações de preços.

Esta página descreve como analisar manualmente imagens de contentores para verificar vulnerabilidades do sistema e vulnerabilidades de pacotes Maven.

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. Verify 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. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

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

    Go to project selector

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

  10. Enable the On-Demand Scanning API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

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

    gcloud init
  14. Adicione o componente local-extract à instalação da CLI Google Cloud

    Usar o Gestor de componentes da CLI Google Cloud

    O gestor de componentes pede-lhe que instale os componentes necessários na primeira vez que executar o comando de análise.

    Usar o gestor 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
          

      Em alternativa, pode substituir dnf por yum no comando anterior.

  15. Conceda a função de IAM Administrador da análise a pedido ao utilizador ou à conta de serviço que vai usar com a análise a pedido. Se estiver a usar a conta de proprietário do projeto para executar as análises, pode ignorar este passo.
  16. Analisar uma imagem de contentor

    • Procura local:

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

      Para uma imagem local, use um dos seguintes formatos para o elemento IMAGE_URI:

      • REPOSITORY:TAG
      • REPOSITORY
    • Análise 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 elemento 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 tem de incluir o REPOSITORY_ID.

    Para análises locais e remotas, pode usar as seguintes flags opcionais:

    • --location é uma flag opcional para selecionar manualmente a multirregião onde a análise é realizada. A escolha de uma multirregião mais próxima da sua localização física minimiza a latência. As localizações disponíveis são: us, europe e asia. A localização predefinida é us.

    • --async é uma flag opcional para executar o processo de procura de forma assíncrona. Se omitir esta flag, o terminal fica bloqueado até que o processo de leitura esteja concluído.

    Análise síncrona

    O exemplo seguinte mostra o resultado de uma análise 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 análise para obter os resultados de vulnerabilidades. No exemplo, o nome da análise é o valor de scanna última linha da mensagem de saída.

    Procura assíncrona

    O exemplo seguinte mostra o resultado da execução de uma análise 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
    

    Isto inicia uma operação de longa duração e devolve o respetivo ID sem bloquear o seu terminal. Use o ID da operação, o valor de name na última linha da mensagem de saída, para consultar a operação.

    Consultar a operação de longa duração

    Use o ID da operação da saída do comando de análise assíncrona para verificar o estado da operação:

    gcloud artifacts docker images get-operation LRO_ID
    

    Onde LRO_ID é o ID da operação de longa duração.

    Continuando com o exemplo da secção de análise assíncrona, para verificar o estado 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 o resultado incluir a linha done: true, a operação de análise está concluída. Use o nome da análise para obter os resultados de vulnerabilidades. O nome da análise é o valor de scan na última linha da mensagem de saída.

    Obtenha os resultados da análise

    Para obter os resultados da análise após a conclusão da operação de análise, use o seguinte comando:

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

    Onde:

    Por 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
    

    O resultado deste comando é uma lista de ocorrências no formato Grafeas. Neste caso, mostra uma vulnerabilidade de gravidade média encontrada na imagem. As vulnerabilidades do pacote Maven contêm o campo packageType:MAVEN.

    Os resultados da análise estão disponíveis durante 48 horas após a conclusão da operação de análise.

    O que se segue?