Analise automaticamente pacotes do SO

Neste documento, vai aprender a ativar a API Container Scanning, enviar uma imagem para o Artifact Registry e ver a lista de vulnerabilidades encontradas na imagem.

A análise de artefactos fornece informações sobre vulnerabilidades para as imagens de contentores no Artifact Registry. Os metadados são armazenados como notas. É criada uma ocorrência para cada instância de uma nota associada a uma imagem. Consulte a vista geral e os documentos de preços para mais informações.

A ativação desta API também ativa a análise de pacotes de idiomas no Artifact Registry. Consulte os tipos de pacotes suportados.

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 Artifact Registry and Container Scanning APIs.

    Enable the APIs

  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 Artifact Registry and Container Scanning APIs.

    Enable the APIs

  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. Crie um repositório Docker no Artifact Registry e envie uma imagem de contentor para o repositório. Se não conhece o Artifact Registry, consulte o início rápido do Docker.
  15. Veja vulnerabilidades de imagens

    A análise de artefactos analisa novas imagens quando são carregadas para o Artifact Registry. Esta análise extrai informações sobre os pacotes do sistema no contentor.

    Pode ver as ocorrências de vulnerabilidades das suas imagens no registo através da consola Google Cloud , da Google Cloud CLI ou da API Container Analysis. Se uma imagem tiver vulnerabilidades, pode obter os detalhes.

    A análise de artefactos só atualiza os metadados das imagens que foram enviadas por push ou extraídas nos últimos 30 dias. Após 30 dias, os metadados deixam de ser atualizados e os resultados ficam desatualizados. Além disso, a análise de artefactos arquiva metadados desatualizados há mais de 90 dias, e os metadados não ficam disponíveis na Google Cloud consola, no gcloud nem através da API. Para voltar a analisar uma imagem com metadados desatualizados ou arquivados, transfira essa imagem. A atualização dos metadados pode demorar até 24 horas.

    Veja ocorrências na Google Cloud consola

    Para ver as vulnerabilidades numa imagem:

    1. Obtenha a lista de repositórios.

      Abra a página Repositórios

    2. Na lista de repositórios, clique num repositório.

    3. Na lista de imagens, clique no nome de uma imagem.

      Os totais de vulnerabilidades para cada resumo de imagem são apresentados na coluna Vulnerabilidades.

      Captura de ecrã de uma imagem com vulnerabilidades

    4. Para ver a lista de vulnerabilidades de uma imagem, clique no link na coluna Vulnerabilidades.

      A secção Resultados da análise apresenta um resumo dos tipos de pacotes analisados, do total de vulnerabilidades, das vulnerabilidades com correções disponíveis, das vulnerabilidades sem correções e da gravidade efetiva.

      Captura de ecrã da secção Resultados da análise com vulnerabilidades, correções e gravidade efetiva

      A tabela de vulnerabilidades apresenta o nome de Vulnerabilidades e exposições comuns (CVE) de cada vulnerabilidade encontrada, a gravidade efetiva, a pontuação do Common Vulnerability Scoring System (CVSS), as correções (quando disponíveis), o nome do pacote que contém a vulnerabilidade e o tipo de pacote.

      Pode filtrar e ordenar estes ficheiros para verificar um ficheiro, um diretório ou um tipo de ficheiro específico por extensão do ficheiro.

      Google Cloud A consola apresenta até 1200 vulnerabilidades nesta tabela. Se a sua imagem tiver mais de 1200 vulnerabilidades, tem de usar o gcloud ou a API para ver a lista completa.

    5. Para ver detalhes sobre uma CVE específica, clique no nome da CVE.

    6. Para ver detalhes da ocorrência de vulnerabilidades, como o número da versão e a localização afetada, clique em Ver ou Ver corrigido na linha com o nome da vulnerabilidade. O texto do link é Ver para vulnerabilidades sem uma correção e Ver corrigido para vulnerabilidades às quais foi aplicada uma correção.

    Veja ocorrências através do gcloud

    Para ver ocorrências de uma imagem:

    Na CLI gcloud, introduza o seguinte:

      gcloud artifacts docker images list --show-occurrences \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o ID do seu Google Cloud projeto.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório. Não pode especificar uma etiqueta de imagem com este comando.

      Por predefinição, o comando devolve as 10 imagens mais recentes. Para mostrar um número diferente de imagens, use a flag --show-occurrences-from. Por exemplo, o seguinte comando devolve as 25 imagens mais recentes.

      gcloud artifacts docker images list --show-occurrences-from=25 \
      us-central1-docker.pkg.dev/my-project/my-repo/my-image
      

    Para ver vulnerabilidades de uma etiqueta de imagem ou uma camada:

    Na CLI gcloud, introduza o seguinte:

      gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
      --show-package-vulnerability
    

    ou

      gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
      --show-package-vulnerability
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o ID do seu Google Cloud projeto.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório.
    • TAG é a etiqueta de imagem sobre a qual quer obter informações.
    • HASH é o resumo da imagem.

    Para filtrar as ocorrências de vulnerabilidades:

    Na CLI gcloud, introduza o seguinte:

      gcloud artifacts docker images list --show-occurrences \
      LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID --occurrence-filter=FILTER_EXPRESSION
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o ID do seu Google Cloud projeto.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório.
    • FILTER_EXPRESSION é uma expressão de filtro de exemplo no formato explicado em Filtrar ocorrências de vulnerabilidades.

    Veja ocorrências através da API ou do código

    Para ver ocorrências de uma imagem, use o exemplo de código adequado.

    API

    Usar o cURL

    Para obter uma lista de ocorrências no seu projeto:

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
    

    Para obter um resumo das vulnerabilidades no seu projeto:

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary
    

    Para ver detalhes sobre uma ocorrência específica:

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID
    

    Onde:

    • PROJECT_ID é o ID do seu Google Cloud projeto.
    • OCCURRENCE_ID é o nome da ocorrência para a qual quer ver detalhes.

    Java

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Java

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    import com.google.cloud.devtools.containeranalysis.v1.ContainerAnalysisClient;
    import io.grafeas.v1.GrafeasClient;
    import io.grafeas.v1.Occurrence;
    import io.grafeas.v1.ProjectName;
    import java.io.IOException;
    import java.lang.InterruptedException;
    
    public class OccurrencesForImage {
      // Retrieves all the Occurrences associated with a specified image
      // Here, all Occurrences are simply printed and counted
      public static int getOccurrencesForImage(String resourceUrl, String projectId)
          throws IOException, InterruptedException {
        // String resourceUrl = "https://gcr.io/project/image@sha256:123";
        // String projectId = "my-project-id";
        final String projectName = ProjectName.format(projectId);
        final String filterStr = String.format("resourceUrl=\"%s\"", resourceUrl);
    
        // Initialize client that will be used to send requests. After completing all of your requests, 
        // call the "close" method on the client to safely clean up any remaining background resources.
        GrafeasClient client = ContainerAnalysisClient.create().getGrafeasClient();
        int i = 0;
        for (Occurrence o : client.listOccurrences(projectName, filterStr).iterateAll()) {
          // Write custom code to process each Occurrence here
          System.out.println(o.getName());
          i = i + 1;
        }
        return i;
      }
    }

    Go

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Go

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    
    import (
    	"context"
    	"fmt"
    	"io"
    
    	containeranalysis "cloud.google.com/go/containeranalysis/apiv1"
    	"google.golang.org/api/iterator"
    	grafeaspb "google.golang.org/genproto/googleapis/grafeas/v1"
    )
    
    // getOccurrencesForImage retrieves all the Occurrences associated with a specified image.
    // Here, all Occurrences are simply printed and counted.
    func getOccurrencesForImage(w io.Writer, resourceURL, projectID string) (int, error) {
    	// Use this style of URL when you use Google Container Registry.
    	// resourceURL := "https://gcr.io/my-project/my-repo/my-image"
    	// Use this style of URL when you use Google Artifact Registry.
    	// resourceURL := "https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image"
    	ctx := context.Background()
    	client, err := containeranalysis.NewClient(ctx)
    	if err != nil {
    		return -1, fmt.Errorf("NewClient: %w", err)
    	}
    	defer client.Close()
    
    	req := &grafeaspb.ListOccurrencesRequest{
    		Parent: fmt.Sprintf("projects/%s", projectID),
    		Filter: fmt.Sprintf("resourceUrl=%q", resourceURL),
    	}
    	it := client.GetGrafeasClient().ListOccurrences(ctx, req)
    	count := 0
    	for {
    		occ, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return -1, fmt.Errorf("occurrence iteration error: %w", err)
    		}
    		// Write custom code to process each Occurrence here.
    		fmt.Fprintln(w, occ)
    		count = count + 1
    	}
    	return count, nil
    }
    

    Node.js

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Node.js

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    /**
     * TODO(developer): Uncomment these variables before running the sample
     */
    // const projectId = 'your-project-id', // Your GCP Project ID
    // If you are using Google Container Registry
    // const imageUrl = 'https://gcr.io/my-project/my-repo/my-image@sha256:123' // Image to attach metadata to
    // If you are using Google Artifact Registry
    // const imageUrl = 'https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image@sha256:123' // Image to attach metadata to
    
    // Import the library and create a client
    const {ContainerAnalysisClient} = require('@google-cloud/containeranalysis');
    const client = new ContainerAnalysisClient();
    
    const formattedParent = client.getGrafeasClient().projectPath(projectId);
    
    // Retrieves all the Occurrences associated with a specified image
    const [occurrences] = await client.getGrafeasClient().listOccurrences({
      parent: formattedParent,
      filter: `resourceUrl = "${imageUrl}"`,
    });
    
    if (occurrences.length) {
      console.log(`Occurrences for ${imageUrl}`);
      occurrences.forEach(occurrence => {
        console.log(`${occurrence.name}:`);
      });
    } else {
      console.log('No occurrences found.');
    }

    Ruby

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Ruby

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    # resource_url = "The URL of the resource associated with the occurrence."
    #                # e.g. https://gcr.io/project/image@sha256:123"
    # project_id   = "The Google Cloud project ID of the occurrences to retrieve"
    
    require "google/cloud/container_analysis"
    
    # Initialize the client
    client = Google::Cloud::ContainerAnalysis.container_analysis.grafeas_client
    
    parent = client.project_path project: project_id
    filter = "resourceUrl = \"#{resource_url}\""
    count = 0
    client.list_occurrences(parent: parent, filter: filter).each do |occurrence|
      # Process occurrence here
      puts occurrence
      count += 1
    end
    puts "Found #{count} occurrences"

    Python

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Python

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    from google.cloud.devtools import containeranalysis_v1
    
    
    def get_occurrences_for_image(resource_url: str, project_id: str) -> int:
        """Retrieves all the occurrences associated with a specified image.
        Here, all occurrences are simply printed and counted."""
        # resource_url = 'https://gcr.io/my-project/my-image@sha256:123'
        # project_id = 'my-gcp-project'
    
        filter_str = f'resourceUrl="{resource_url}"'
        client = containeranalysis_v1.ContainerAnalysisClient()
        grafeas_client = client.get_grafeas_client()
        project_name = f"projects/{project_id}"
    
        response = grafeas_client.list_occurrences(parent=project_name, filter=filter_str)
        count = 0
        for o in response:
            # do something with the retrieved occurrence
            # in this sample, we will simply count each one
            count += 1
        return count
    
    

    Veja ocorrências no Cloud Build

    Se estiver a usar o Cloud Build, também pode ver as vulnerabilidades de imagens no painel lateral Estatísticas de segurança na Google Cloud consola.

    O painel lateral Estatísticas de segurança oferece uma vista geral de alto nível das informações de segurança de compilação para artefactos armazenados no Artifact Registry. Para saber mais sobre o painel lateral e como pode usar o Cloud Build para ajudar a proteger a sua cadeia de fornecimento de software, consulte o artigo Veja informações de segurança da compilação.

    Filtre ocorrências

    Pode usar strings de filtro nos comandos gcloud e na API Artifact Analysis para filtrar ocorrências antes de as ver. As secções seguintes descrevem os filtros de pesquisa suportados.

    Veja as ocorrências de descoberta

    Quando uma imagem é inicialmente enviada para o Artifact Registry, a análise de artefactos cria uma ocorrência de deteção, que contém informações sobre a análise inicial da imagem do contentor.

    Para obter a ocorrência de descoberta de uma imagem, use a seguinte expressão de filtro:

    kind="DISCOVERY" AND resourceUrl="RESOURCE_URL"

    gcloud

    Veja as ocorrências de descoberta de uma imagem:

    Neste caso, a expressão não é usada diretamente no comando, mas as mesmas informações são transmitidas como argumentos:

    gcloud artifacts docker images list --show-occurrences \
    --occurrence-filter='kind="DISCOVERY"' --format=json \
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • REPOSITORY é o nome do seu repositório.
    • PROJECT_ID é o ID do seu Google Cloud projeto.
    • IMAGE_ID é o ID da imagem que contém as ocorrências que quer ver.

    API

    Para obter a ocorrência de descoberta, a expressão de filtro tem de ser codificada em URL e incorporada num pedido GET da seguinte forma:

    GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22DISCOVERY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22

    Consulte o projects.occurrences.get ponto final da API para ver mais detalhes.

    Java

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Java

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    import com.google.cloud.devtools.containeranalysis.v1.ContainerAnalysisClient;
    import io.grafeas.v1.GrafeasClient;
    import io.grafeas.v1.Occurrence;
    import io.grafeas.v1.ProjectName;
    import java.io.IOException;
    import java.lang.InterruptedException;
    
    public class GetDiscoveryInfo {
      // Retrieves and prints the Discovery Occurrence created for a specified image
      // The Discovery Occurrence contains information about the initial scan on the image
      public static void getDiscoveryInfo(String resourceUrl, String projectId) 
          throws IOException, InterruptedException {
        // String resourceUrl = "https://gcr.io/project/image@sha256:123";
        // String projectId = "my-project-id";
        String filterStr = "kind=\"DISCOVERY\" AND resourceUrl=\"" + resourceUrl + "\"";
        final String projectName = ProjectName.format(projectId);
    
        // Initialize client that will be used to send requests. After completing all of your requests, 
        // call the "close" method on the client to safely clean up any remaining background resources.
        GrafeasClient client = ContainerAnalysisClient.create().getGrafeasClient();
        for (Occurrence o : client.listOccurrences(projectName, filterStr).iterateAll()) {
          System.out.println(o);
        }
      }
    }

    Go

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Go

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    
    import (
    	"context"
    	"fmt"
    	"io"
    
    	containeranalysis "cloud.google.com/go/containeranalysis/apiv1"
    	"google.golang.org/api/iterator"
    	grafeaspb "google.golang.org/genproto/googleapis/grafeas/v1"
    )
    
    // getDiscoveryInfo retrieves and prints the Discovery Occurrence created for a specified image.
    // The Discovery Occurrence contains information about the initial scan on the image.
    func getDiscoveryInfo(w io.Writer, resourceURL, projectID string) error {
    	// Use this style of URL when you use Google Container Registry.
    	// resourceURL := "https://gcr.io/my-project/my-repo/my-image"
    	// Use this style of URL when you use Google Artifact Registry.
    	// resourceURL := "https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image"
    	ctx := context.Background()
    	client, err := containeranalysis.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewClient: %w", err)
    	}
    	defer client.Close()
    
    	req := &grafeaspb.ListOccurrencesRequest{
    		Parent: fmt.Sprintf("projects/%s", projectID),
    		Filter: fmt.Sprintf(`kind="DISCOVERY" AND resourceUrl=%q`, resourceURL),
    	}
    	it := client.GetGrafeasClient().ListOccurrences(ctx, req)
    	for {
    		occ, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return fmt.Errorf("occurrence iteration error: %w", err)
    		}
    		fmt.Fprintln(w, occ)
    	}
    	return nil
    }
    

    Node.js

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Node.js

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    /**
     * TODO(developer): Uncomment these variables before running the sample
     */
    // const projectId = 'your-project-id', // Your GCP Project ID
    // If you are using Google Container Registry
    // const imageUrl = 'https://gcr.io/my-project/my-repo/my-image:123' // Image to attach metadata to
    // If you are using Google Artifact Registry
    // const imageUrl = 'https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image:123' // Image to attach metadata to
    
    // Import the library and create a client
    const {ContainerAnalysisClient} = require('@google-cloud/containeranalysis');
    const client = new ContainerAnalysisClient();
    
    const formattedParent = client.getGrafeasClient().projectPath(projectId);
    // Retrieves and prints the Discovery Occurrence created for a specified image
    // The Discovery Occurrence contains information about the initial scan on the image
    const [occurrences] = await client.getGrafeasClient().listOccurrences({
      parent: formattedParent,
      filter: `kind = "DISCOVERY" AND resourceUrl = "${imageUrl}"`,
    });
    
    if (occurrences.length > 0) {
      console.log(`Discovery Occurrences for ${imageUrl}`);
      occurrences.forEach(occurrence => {
        console.log(`${occurrence.name}:`);
      });
    } else {
      console.log('No occurrences found.');
    }

    Ruby

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Ruby

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    # resource_url = "The URL of the resource associated with the occurrence."
    #                # e.g. https://gcr.io/project/image@sha256:123
    # project_id   = "The Google Cloud project ID of the occurrences to retrieve"
    
    require "google/cloud/container_analysis"
    
    # Initialize the client
    client = Google::Cloud::ContainerAnalysis.container_analysis.grafeas_client
    
    parent = client.project_path project: project_id
    filter = "kind = \"DISCOVERY\" AND resourceUrl = \"#{resource_url}\""
    client.list_occurrences(parent: parent, filter: filter).each do |occurrence|
      # Process discovery occurrence here
      puts occurrence
    end

    Python

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Python

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    from google.cloud.devtools import containeranalysis_v1
    
    
    def get_discovery_info(resource_url: str, project_id: str) -> None:
        """Retrieves and prints the discovery occurrence created for a specified
        image. The discovery occurrence contains information about the initial
        scan on the image."""
        # resource_url = 'https://gcr.io/my-project/my-image@sha256:123'
        # project_id = 'my-gcp-project'
    
        filter_str = f'kind="DISCOVERY" AND resourceUrl="{resource_url}"'
        client = containeranalysis_v1.ContainerAnalysisClient()
        grafeas_client = client.get_grafeas_client()
        project_name = f"projects/{project_id}"
        response = grafeas_client.list_occurrences(parent=project_name, filter_=filter_str)
        for occ in response:
            print(occ)
    
    

    Veja ocorrências de vulnerabilidades

    Para ver as ocorrências de vulnerabilidades de uma imagem específica, crie uma consulta com uma expressão de filtro:

    kind="VULNERABILITY" AND resourceUrl="RESOURCE_URL"

    gcloud

    Veja ocorrências de vulnerabilidades para uma imagem:

    Neste caso, a expressão não é usada diretamente no comando, mas as mesmas informações são transmitidas como argumentos:

    gcloud artifacts docker images list --show-occurrences \
    --occurrence-filter='kind="VULNERABILITY"' --format=json \
    LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • REPOSITORY é o nome do seu repositório.
    • PROJECT_ID é o ID do seu Google Cloud projeto.
    • IMAGE_ID é o ID da imagem que contém as ocorrências que quer ver.

    API

    O URL do recurso tem de ter codificação URL e estar incorporado num pedido GET da seguinte forma:

    GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22

    Consulte o projects.occurrences.get ponto final da API para ver mais detalhes.

    Java

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Java

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    import com.google.cloud.devtools.containeranalysis.v1.ContainerAnalysisClient;
    import io.grafeas.v1.GrafeasClient;
    import io.grafeas.v1.Occurrence;
    import io.grafeas.v1.ProjectName;
    import java.io.IOException;
    import java.util.LinkedList;
    import java.util.List;
    
    public class VulnerabilityOccurrencesForImage {
      // Retrieve a list of vulnerability occurrences assoviated with a resource
      public static List<Occurrence> findVulnerabilityOccurrencesForImage(String resourceUrl, 
          String projectId) throws IOException {
        // String resourceUrl = "https://gcr.io/project/image@sha256:123";
        // String projectId = "my-project-id";
        final String projectName = ProjectName.format(projectId);
        String filterStr = String.format("kind=\"VULNERABILITY\" AND resourceUrl=\"%s\"", resourceUrl);
    
        // Initialize client that will be used to send requests. After completing all of your requests, 
        // call the "close" method on the client to safely clean up any remaining background resources.
        GrafeasClient client = ContainerAnalysisClient.create().getGrafeasClient();
        LinkedList<Occurrence> vulnerabilitylist = new LinkedList<Occurrence>();
        for (Occurrence o : client.listOccurrences(projectName, filterStr).iterateAll()) {
          vulnerabilitylist.add(o);
        }
        return vulnerabilitylist;
      }
    }

    Go

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Go

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    
    import (
    	"context"
    	"fmt"
    
    	containeranalysis "cloud.google.com/go/containeranalysis/apiv1"
    	"google.golang.org/api/iterator"
    	grafeaspb "google.golang.org/genproto/googleapis/grafeas/v1"
    )
    
    // findVulnerabilityOccurrencesForImage retrieves all vulnerability Occurrences associated with a resource.
    func findVulnerabilityOccurrencesForImage(resourceURL, projectID string) ([]*grafeaspb.Occurrence, error) {
    	// Use this style of URL when you use Google Container Registry.
    	// resourceURL := "https://gcr.io/my-project/my-repo/my-image"
    	// Use this style of URL when you use Google Artifact Registry.
    	// resourceURL := "https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image"
    	ctx := context.Background()
    	client, err := containeranalysis.NewClient(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("NewClient: %w", err)
    	}
    	defer client.Close()
    
    	req := &grafeaspb.ListOccurrencesRequest{
    		Parent: fmt.Sprintf("projects/%s", projectID),
    		Filter: fmt.Sprintf("resourceUrl = %q kind = %q", resourceURL, "VULNERABILITY"),
    	}
    
    	var occurrenceList []*grafeaspb.Occurrence
    	it := client.GetGrafeasClient().ListOccurrences(ctx, req)
    	for {
    		occ, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return nil, fmt.Errorf("occurrence iteration error: %w", err)
    		}
    		occurrenceList = append(occurrenceList, occ)
    	}
    
    	return occurrenceList, nil
    }
    

    Node.js

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Node.js

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    /**
     * TODO(developer): Uncomment these variables before running the sample
     */
    // const projectId = 'your-project-id', // Your GCP Project ID
    // If you are using Google Container Registry
    // const imageUrl = 'https://gcr.io/my-project/my-repo/my-image:123' // Image to attach metadata to
    // If you are using Google Artifact Registry
    // const imageUrl = 'https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image:123' // Image to attach metadata to
    
    // Import the library and create a client
    const {ContainerAnalysisClient} = require('@google-cloud/containeranalysis');
    const client = new ContainerAnalysisClient();
    
    const formattedParent = client.getGrafeasClient().projectPath(projectId);
    
    // Retrieve a list of vulnerability occurrences assoviated with a resource
    const [occurrences] = await client.getGrafeasClient().listOccurrences({
      parent: formattedParent,
      filter: `kind = "VULNERABILITY" AND resourceUrl = "${imageUrl}"`,
    });
    
    if (occurrences.length) {
      console.log(`All Vulnerabilities for ${imageUrl}`);
      occurrences.forEach(occurrence => {
        console.log(`${occurrence.name}:`);
      });
    } else {
      console.log('No occurrences found.');
    }

    Ruby

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Ruby

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    # resource_url = "The URL of the resource associated with the occurrence
    #                e.g. https://gcr.io/project/image@sha256:123"
    # project_id   = "The Google Cloud project ID of the vulnerabilities to find"
    
    require "google/cloud/container_analysis"
    
    # Initialize the client
    client = Google::Cloud::ContainerAnalysis.container_analysis.grafeas_client
    
    parent = client.project_path project: project_id
    filter = "resourceUrl = \"#{resource_url}\" AND kind = \"VULNERABILITY\""
    client.list_occurrences parent: parent, filter: filter

    Python

    Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Artifact Analysis.Python

    Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

    from typing import List
    
    from google.cloud.devtools import containeranalysis_v1
    from grafeas.grafeas_v1 import types
    
    
    def find_vulnerabilities_for_image(
        resource_url: str, project_id: str
    ) -> List[types.grafeas.Occurrence]:
        """ "Retrieves all vulnerability occurrences associated with a resource."""
        # resource_url = 'https://gcr.io/my-project/my-image@sha256:123'
        # project_id = 'my-gcp-project'
    
        client = containeranalysis_v1.ContainerAnalysisClient()
        grafeas_client = client.get_grafeas_client()
        project_name = f"projects/{project_id}"
    
        filter_str = 'kind="VULNERABILITY" AND resourceUrl="{}"'.format(resource_url)
        return list(grafeas_client.list_occurrences(parent=project_name, filter=filter_str))
    
    

    Veja ocorrências de um tipo específico

    Nos dois exemplos anteriores, a única diferença entre as expressões de filtro é o valor de kind, que identifica o tipo de ocorrência. Use este campo para limitar a lista de ocorrências a um tipo específico, como uma vulnerabilidade ou uma implementação.

    Para obter ocorrências de uma imagem específica, use esta expressão de filtro:

    kind="NOTE_KIND" AND resourceUrl="RESOURCE_URL"

    Onde:

    • NOTE_KIND é o tipo de nota.
      • Por exemplo, use o tipo DISCOVERY para listar ocorrências de descoberta. A Artifact Analysis cria estes registos para imagens quando são inicialmente enviadas para o Artifact Registry.
      • Para listar ocorrências de vulnerabilidades, use o tipo VULNERABILITY.
    • RESOURCE_URL é o URL completo da imagem https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH

    A expressão de filtro seguinte obtém ocorrências de um tipo específico em várias imagens:

    kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")

    Onde:

    • RESOURCE_URL_PREFIX é o prefixo de URL de algumas imagens
      • Para criar uma ficha para todas as versões de uma imagem: https://HOSTNAME/PROJECT_ID/IMAGE_ID@
      • Para listar todas as imagens num projeto: https://HOSTNAME/PROJECT_ID/

    Veja imagens associadas a uma nota específica

    Pode obter uma lista de recursos associados a um ID de nota específico. Por exemplo, pode listar imagens com uma vulnerabilidade CVE específica.

    Para apresentar uma lista de todas as imagens num projeto que estão associadas a uma nota específica, use a seguinte expressão de filtro:

    noteProjectId="PROVIDER_PROJECT_ID" AND noteId="NOTE_ID"

    Para verificar uma imagem específica para uma nota específica, use a seguinte expressão de filtro:

    resourceUrl="RESOURCE_URL" AND noteProjectId="PROVIDER_PROJECT_ID" \
        AND noteId="NOTE_ID"

    Onde:

    • PROVIDER_PROJECT_ID é o ID do projeto do fornecedor. Por exemplo, o goog-vulnz fornece a análise de vulnerabilidades predefinida.
    • NOTE_ID é o ID da nota. As notas relacionadas com a segurança são frequentemente formatadas como CVE-2019-12345.
    • RESOURCE_URL é o URL completo da imagem https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH

    Por exemplo, para verificar todas as imagens que têm uma ocorrência de CVE-2017-16231, conforme analisado pela Google, use a seguinte expressão de filtro:

    noteProjectId="goog-vulnz" AND noteId="CVE-2017-16231"

    O que se segue?

    • Use as notificações do Pub/Sub para receber notificações sobre vulnerabilidades e outros metadados.

    • Crie atestações integrando a análise de artefactos com a autorização binária para impedir a execução de imagens de contentores com problemas de segurança conhecidos no seu ambiente de implementação.