Verificar pacotes do SO manualmente

Com a API On-Demand Scanning, é possível verificar imagens armazenadas localmente no computador ou remotamente no Artifact Registry ou no Container Registry. Isso oferece controle granular sobre os contêineres que você quer verificar em busca de vulnerabilidades. Você pode usar a verificação sob demanda para analisar imagens no seu pipeline de CI/CD antes de decidir se quer armazená-las em um registro. Consulte a página de preços para mais informações.

Esta página descreve como verificar manualmente 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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    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. Make sure 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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 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 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.
  16. 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
    • 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: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 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 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 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 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 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 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/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 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:

    • SCAN_NAME é o nome da verificação. Ele aparece na parte de baixo da saída quando você pesquisa a operação de longa duração, depois que a verificação é concluída.
    • --limit=X é uma flag opcional que limita o número de ocorrências mostradas na saída. X é um valor numérico.

    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
      cvssv3:
        attackComplexity: ATTACK_COMPLEXITY_LOW
        attackVector: ATTACK_VECTOR_NETWORK
        availabilityImpact: IMPACT_HIGH
        baseScore: 7.2
        confidentialityImpact: IMPACT_HIGH
        exploitabilityScore: 1.2
        impactScore: 5.9
        integrityImpact: IMPACT_HIGH
        privilegesRequired: PRIVILEGES_REQUIRED_HIGH
        scope: SCOPE_UNCHANGED
        userInteraction: USER_INTERACTION_NONE
      effectiveSeverity: MEDIUM
    

    A saída desse comando é uma lista de ocorrências no formato Grafeas. Nesse caso, ele mostra uma vulnerabilidade de gravidade média encontrada na imagem.

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

    A seguir