Sicherheitslücken und Metadaten für Images abrufen

Container Analysis bietet Informationen zu Sicherheitslücken und andere Metadaten von Container-Images in Container Registry. Die Metadaten werden als Hinweise gespeichert. Für jede mit einem Image verknüpfte Instanz eines Hinweises wird ein Vorkommen erstellt. Preisinformationen finden Sie unter Preise.

Auf dieser Seite wird beschrieben, wie Sie Hinweise und Vorkommen aufrufen und filtern.

Hinweise

  1. Aktivieren Sie die Container Scanning API.

  2. Übersicht über Container Analysis

Sicherheitslücken und andere Vorkommen aufrufen

Sie können Vorkommen für Ihre Images in Container Registry mit der Cloud Console, dem gcloud-Befehlszeilentool oder der Container Analysis API ansehen. Wenn ein Image Sicherheitslücken aufweist, können Sie dann die Details abrufen.

So zeigen Sie die Vorkommen für ein Image an:

Console

  1. Öffnen Sie in der Cloud Console die Seite Container Registry.

    Seite "Container Registry" öffnen

  2. Klicken Sie auf einen Image-Namen.

    Alle Sicherheitslücken des Images werden in der Spalte Sicherheitslücken angezeigt.

    Screenshot eines Images mit Sicherheitslücken

  3. Wenn Sie die Liste der Sicherheitslücken für ein Image aufrufen möchten, klicken Sie auf den Link in der Spalte Sicherheitslücken.

    Die Liste mit den Sicherheitslücken umfasst den Schweregrad, die Verfügbarkeit einer entsprechenden Lösung und den Namen des Pakets, das die Sicherheitslücke enthält.

  4. Wenn Sie weitere Informationen zu einer bestimmten Sicherheitslücke aus der Sicherheitslückenquelle erhalten möchten, klicken Sie auf den Link in der Spalte Dokumentation.

gcloud-Befehl

So zeigen Sie Vorkommen für ein Image an:

    gcloud beta container images list-tags --show-occurrences \
    [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]
    

Dabei gilt:

  • [PROJECT_ID] ist die ID des Projekts, das die Images enthält.
  • [IMAGE_ID] ist die ID des Images, für das Sie Sicherheitslücken anzeigen möchten.
  • [HOSTNAME] ist eine der unter Name der Registry beschriebenen Optionen.

Mit diesem Befehl können Sie kein Image-Tag angeben.

So zeigen Sie Informationen zu einem Tag oder einer Ebene an:

    gcloud beta container images describe [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]:[TAG]
    

oder

    gcloud beta container images describe [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]@sha256:[HASH]
    

Dabei gilt:

  • [PROJECT_ID] ist die ID des Projekts, das die Images enthält.
  • [IMAGE_ID] ist die ID des Images, dessen Sicherheitslücken Sie sehen möchten.
  • [TAG] ist das Image-Tag, über das Sie Informationen erhalten möchten.
  • [HASH] ist der Image-Digest-Wert.
  • [HOSTNAME] ist eine der unter Name der Registry beschriebenen Optionen.

So zeigen Sie Sicherheitslücken für ein Image-Tag oder eine Ebene an:

    gcloud beta container images describe [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]:[TAG]  \
    --show-package-vulnerability
    

oder

    gcloud beta container images describe [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]@sha256:[HASH] \
    --show-package-vulnerability
    

So filtern Sie die Vorkommen von Sicherheitslücken:

    gcloud beta container images list-tags --show-occurrences \
    [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID] --occurrence-filter=[FILTER_EXPRESSION]
    

Dabei gilt:

  • [PROJECT_ID] ist die ID des Projekts, das die Images enthält.
  • [IMAGE_ID] ist die ID des Images, für das Sie Vorkommen von Sicherheitslücken aufrufen möchten.
  • [FILTER_EXPRESSION] ist ein Beispiel für einen Filterausdruck in dem Format, das unter Vorkommen von Sicherheitslücken filtern erläutert wird.
  • [HOSTNAME] ist eine der unter Name der Registry beschriebenen Optionen.

API

cURL verwenden

So rufen Sie eine Liste der Vorkommen in Ihrem Projekt ab:

 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
    

So erhalten Sie eine Zusammenfassung der Sicherheitslücken in Ihrem Projekt:

 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
    

So rufen Sie ein Vorkommen ab:

 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]
    

Java

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Java API.

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

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Go API.


    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) {
    	// resourceURL := fmt.Sprintf("https://gcr.io/my-project/my-image")
    	ctx := context.Background()
    	client, err := containeranalysis.NewClient(ctx)
    	if err != nil {
    		return -1, fmt.Errorf("NewClient: %v", 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: %v", err)
    		}
    		// Write custom code to process each Occurrence here.
    		fmt.Fprintln(w, occ)
    		count = count + 1
    	}
    	return count, nil
    }
    

Node.js

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Node.js API.

/**
     * TODO(developer): Uncomment these variables before running the sample
     */
    // const projectId = 'your-project-id', // Your GCP Project ID
    // const imageUrl = 'https://gcr.io/my-project/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 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

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Ruby API.

# 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 "grafeas"

    # Initialize the client
    client = Grafeas.new

    formatted_parent = Grafeas::V1::GrafeasClient.project_path project_id
    filter = "resourceUrl = \"#{resource_url}\""
    count = 0
    client.list_occurrences(formatted_parent, filter: filter).each do |occurrence|
      # Process occurrence here
      puts occurrence
      count += 1
    end
    puts "Found #{count} occurrences"

Python

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Python API.

def get_occurrences_for_image(resource_url, project_id):
        """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'

        from google.cloud.devtools import containeranalysis_v1

        filter_str = 'resourceUrl="{}"'.format(resource_url)
        client = containeranalysis_v1.ContainerAnalysisClient()
        grafeas_client = client.get_grafeas_client()
        project_name = grafeas_client.project_path(project_id)

        response = grafeas_client.list_occurrences(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

Vorkommen filtern

Sie können Filterstrings in den gcloud-Befehlen und der Container Analysis API verwenden, um Vorkommen vor dem Abruf zu filtern. In den folgenden Abschnitten werden die unterstützten Suchfilter beschrieben.

Erkennungsvorkommen aufrufen

Wenn Sie ein Image zum ersten Mal in Container Registry hochladen, wird ein Erkennungsvorkommen erstellt, das Informationen zum ersten Scan des Container-Images enthält.

Mit diesem Filterausdruck rufen Sie das Erkennungsvorkommen für ein Image ab:

    kind="DISCOVERY" AND resourceUrl="[RESOURCE_URL]"
    

Das folgende Code-Snippet zeigt, wie Sie mit dem obigen Filterausdruck Erkennungsvorkommen für ein Image abrufen:

gcloud-Befehl

So zeigen Sie das Erkennungsvorkommen für ein Image an:

In diesem Fall wird der Ausdruck nicht direkt im Befehl verwendet. Stattdessen werden dieselben Informationen als Argumente übergeben:

gcloud beta container images list-tags --show-occurrences \
      --occurrence-filter='kind="DISCOVERY"' --format=json [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]
    

API

Zum Abrufen des Erkennungsvorkommens sollte der obige Filterausdruck URL-codiert und so in eine GET-Anfrage eingebettet sein:

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

Weitere Informationen finden Sie unter dem API-Endpunkt projects.occurrences.get.

Java

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Java API.

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

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Go API.


    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 {
    	// resourceURL := fmt.Sprintf("https://gcr.io/my-project/my-image")
    	ctx := context.Background()
    	client, err := containeranalysis.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewClient: %v", 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: %v", err)
    		}
    		fmt.Fprintln(w, occ)
    	}
    	return nil
    }
    

Node.js

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Node.js API.

/**
     * TODO(developer): Uncomment these variables before running the sample
     */
    // const projectId = 'your-project-id', // Your GCP Project ID
    // const imageUrl = 'https://gcr.io/my-project/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

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Ruby API.

# 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 "grafeas"

    # Initialize the client
    client = Grafeas.new

    formatted_parent = Grafeas::V1::GrafeasClient.project_path project_id
    filter = "kind = \"DISCOVERY\" AND resourceUrl = \"#{resource_url}\""
    client.list_occurrences(formatted_parent, filter: filter).each do |occurrence|
      # Process discovery occurrence here
      puts occurrence
    end

Python

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Python API.

def get_discovery_info(resource_url, project_id):
        """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'

        from google.cloud.devtools import containeranalysis_v1

        filter_str = 'kind="DISCOVERY" AND resourceUrl="{}"'.format(resource_url)
        client = containeranalysis_v1.ContainerAnalysisClient()
        grafeas_client = client.get_grafeas_client()
        project_name = grafeas_client.project_path(project_id)
        response = grafeas_client.list_occurrences(project_name,
                                                   filter_=filter_str)
        for occ in response:
            print(occ)

Vorkommen von Sicherheitslücken aufrufen

Erstellen Sie eine Abfrage mit einem Filterausdruck, um Sicherheitslücken für ein bestimmtes Image aufzurufen:

    kind="VULNERABILITY" AND resourceUrl="[RESOURCE_URL]"
    

Das folgende Snippet zeigt, wie Sie eine Liste von Vorkommnissen von Sicherheitslücken für ein Image abrufen.

gcloud-Befehl

So zeigen Sie das Vorkommen von Sicherheitslücken für ein Image an:

In diesem Fall wird der Ausdruck nicht direkt im Befehl verwendet. Stattdessen werden dieselben Informationen als Argumente übergeben:

gcloud beta container images list-tags --show-occurrences \
      --occurrence-filter='kind="VULNERABILITY"' --format=json [HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]
    

API

Die gewünschte Ressourcen-URL sollte URL-codiert und folgendermaßen in eine GET-Anfrage eingebettet sein:

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

Weitere Informationen finden Sie unter dem API-Endpunkt projects.occurrences.get.

Java

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Java API.

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

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Go API.


    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) {
    	// resourceURL := fmt.Sprintf("https://gcr.io/my-project/my-image")
    	ctx := context.Background()
    	client, err := containeranalysis.NewClient(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("NewClient: %v", 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: %v", err)
    		}
    		occurrenceList = append(occurrenceList, occ)
    	}

    	return occurrenceList, nil
    }
    

Node.js

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Node.js API.

/**
     * TODO(developer): Uncomment these variables before running the sample
     */
    // const projectId = 'your-project-id', // Your GCP Project ID
    // const imageUrl = 'https://gcr.io/my-project/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

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Ruby API.

# 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 "grafeas"

    # Initialize the client
    client = Grafeas.new

    formatted_parent = Grafeas::V1::GrafeasClient.project_path project_id
    filter = "resourceUrl = \"#{resource_url}\" AND kind = \"VULNERABILITY\""
    client.list_occurrences formatted_parent, filter: filter

Python

Wie Sie die Clientbibliothek für Container Registry installieren und verwenden, erfahren Sie unter Container Registry-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Container Registry Python API.

def find_vulnerabilities_for_image(resource_url, project_id):
        """"Retrieves all vulnerability occurrences associated with a resource."""
        # resource_url = 'https://gcr.io/my-project/my-image@sha256:123'
        # project_id = 'my-gcp-project'

        from google.cloud.devtools import containeranalysis_v1

        client = containeranalysis_v1.ContainerAnalysisClient()
        grafeas_client = client.get_grafeas_client()
        project_name = grafeas_client.project_path(project_id)

        filter_str = 'kind="VULNERABILITY" AND resourceUrl="{}"'\
            .format(resource_url)
        return list(grafeas_client.list_occurrences(project_name, filter_str))

Vorkommen eines bestimmten Typs aufrufen

In den beiden vorherigen Beispielen besteht der einzige Unterschied zwischen den Filterausdrücken im Wert von kind, der die Art des Vorkommens angibt. Mit diesem Feld können Sie die Liste der Vorkommen auf eine bestimmte Art beschränken, z. B. eine Sicherheitslücke oder Bereitstellung.

Verwenden Sie folgenden Filterausdruck, um Vorkommen für ein bestimmtes Image abzurufen:

    kind="[NOTE_KIND]" AND resourceUrl="[RESOURCE_URL]"
    

Dabei gilt:

  • [NOTE_KIND] ist die Art des Hinweises.
    • Verwenden Sie beispielsweise DISCOVERY zum Auflisten der Erkennungsvorkommen. Diese werden für Images erstellt, wenn sie ursprünglich per Push-Befehl in Container Registry verschoben werden.
    • Verwenden Sie zum Auflisten der Vorkommen von Sicherheitslücken die Art VULNERABILITY.
  • [RESOURCE_URL] ist die vollständige URL des Images https://[HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]@sha256:[HASH].

Der Filterausdruck zum Abrufen von Vorkommen einer bestimmten Art für mehrere Images lautet:

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

wobei

  • [RESOURCE_URL_PREFIX] ist das URL-Präfix für einige Images.
    • Zum Auflisten aller Versionen eines Images: https://[HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]@
    • Zum Auflisten aller Images in einem Projekt: https://[HOSTNAME]/[PROJECT_ID]/

Images aufrufen, die einem bestimmten Hinweis zugeordnet sind

Sie können eine Liste von Ressourcen abrufen, die einer bestimmten Hinweis-ID zugeordnet sind. So können Sie beispielsweise Images mit einer bestimmten CVE-Sicherheitslücke auflisten.

Verwenden Sie den folgenden Filterausdruck, um alle Images in einem Projekt aufzulisten, die einem bestimmten Hinweis zugeordnet sind:

    noteProjectId="[PROVIDER_PROJECT_ID]" AND noteId="[NOTE_ID]"
    

Mit dem folgenden Filterausdruck können Sie ein bestimmtes Image auf einen konkreten Hinweis prüfen:

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

Dabei gilt:

  • [PROVIDER_PROJECT_ID] ist die ID des Anbieterprojekts. Beispielsweise stellt goog-vulnz die Standardanalyse für Sicherheitslücken bereit.
  • [NOTE_ID] ist die ID des Hinweises. Sicherheitsrelevante Hinweise werden häufig als CVE-2019-12345 formatiert.
  • [RESOURCE_URL] ist die vollständige URL des Images https://[HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]@sha256:[HASH].

Mit dem folgenden Filterausdruck können Sie beispielsweise prüfen, ob alle Images gemäß der Google-Analyse CVE-2017-16231 enthalten:

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

Bereitstellungen aufrufen

Sie können aktuelle Bereitstellungen oder Bereitstellungen, die in einem bestimmten Zeitraum ausgeführt wurden, auflisten.

Verwenden Sie den folgenden Filterausdruck, um derzeit ausgeführte Bereitstellungen aufzurufen:

    kind="DEPLOYABLE" AND resourceUrl="[RESOURCE_URL]" AND \
        isNull(undeployTime)
    

Mit dem folgenden Filterausdruck können Sie Bereitstellungen einsehen, die in einem bestimmten Zeitraum ausgeführt wurden:

    kind="DEPLOYABLE" AND resourceUrl="[RESOURCE_URL]" AND \
        deployTime<"[DEPLOY_TIME]" AND \
        undeployTime>"[UNDEPLOY_TIME]"
    

wobei

  • [RESOURCE_URL] ist die vollständige URL des Images https://[HOSTNAME]/[PROJECT_ID]/[IMAGE_ID]@sha256:[HASH].
  • [DEPLOY_TIME] ist die Startzeit des Bereitstellungszeitraums. Verwenden Sie einen Zeitstempel im Format RFC 3339 UTC "Zulu" in Nanosekunden. Beispiel: "2014-10-02T15:01:23.045123456Z"
  • [UNDEPLOY_TIME] ist das Ende des Bereitstellungszeitraums. Verwenden Sie einen Zeitstempel im Format RFC 3339 UTC "Zulu" in Nanosekunden.

Nächste Schritte

  • Informationen zur Verwendung von Container Analysis zum Speichern und Verwalten der Metadaten Ihrer Kunden finden Sie unter Metadaten für Images bereitstellen.

  • Sie können die Binärautorisierung in das Scannen auf Sicherheitslücken einbinden, damit Images mit bekannten Sicherheitslücken nicht in Ihrer Bereitstellungsumgebung ausgeführt werden. Unter Scannen auf Sicherheitslücken einbinden erfahren Sie mehr dazu.