Puedes optar por proporcionar tus propios metadatos a Artifact Analysis para satisfacer una necesidad empresarial específica. Por ejemplo, una organización que proporciona administración de seguridad para los contenedores de Docker de sus clientes puede usar Artifact Analysis para almacenar y recuperar metadatos relacionados con la seguridad de esas imágenes.
En los siguientes pasos, se muestra cómo proporcionar metadatos de certificación para tus imágenes con la API de Artifact Analysis. Puedes usar las mismas instrucciones para almacenar y recuperar cualquier tipo de metadatos que sea compatible con Artifact Analysis.
Antes de comenzar
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Enable the Container Analysis API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Enable the Container Analysis API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init - Obtén información para configurar el control de acceso a los metadatos de tu proyecto. Omite este paso si solo consumes metadatos de las ocurrencias creadas por el análisis de contenedores de Artifact Analysis.
Crea un archivo llamado
note.jsoncon la descripción y los detalles de la certificación. El siguiente código muestra un ejemplo de archivonote.json:{ "shortDescription": "A brief Description of the note", "longDescription": "A longer description of the note", "kind": "ATTESTATION", "attestation": { "hint": { "humanReadableName": "my-attestation-authority" } } }Consulta la documentación de la API de Notes para obtener más información sobre la representación JSON de las notas.
Ejecuta el siguiente comando de curl para crear una nota:
curl -v -H "Content-Type: application/json" -H \ "Authorization: Bearer $(gcloud auth print-access-token)" \ https://containeranalysis.googleapis.com/v1/projects/PROVIDER_PROJECT_ID/notes?note_id=NOTE_ID -d @note.jsonAquí:
- PROVIDER_PROJECT_ID es el ID del proyecto.
- NOTE_ID especifica un identificador para tu nota. Usa una cadena con una longitud máxima de 100 caracteres.
Crea un archivo llamado
occurrence.jsoncon la descripción y los detalles de la certificación. El siguiente código muestra un ejemplo de archivooccurrence.json:{ "resourceUri": "your-resource-uri-here", "noteName": "projects/your-note-project/notes/your-note-id", "kind": "ATTESTATION", "attestation": { "serializedPayload": "eW91ci1wYXlsb2FkLWhlcmU=", "signatures": [ { "publicKeyId": "your-key-id-here", "signature": "eW91ci1zaWduYXR1cmUtaGVyZQ==" } ] } }Consulta la documentación de la API de Notes para obtener más información sobre la representación JSON de las notas.
Ejecuta el siguiente comando de curl para crear una ocurrencia:
curl -v -H "Content-Type: application/json" -H \ "Authorization: Bearer $(gcloud auth print-access-token)" \ https://containeranalysis.googleapis.com/v1/projects/PROVIDER_PROJECT_ID/occurrences/ -d @occurrence.jsonAquí:
- PROVIDER_PROJECT_ID es el ID del proyecto.
- NOTE_ID especifica un identificador para tu nota. Usa una cadena con una longitud máxima de 100 caracteres.
Si deseas obtener instrucciones para ver y filtrar notas y casos de imágenes de contenedores, consulta Cómo ver casos de vulnerabilidades.
Si deseas obtener instrucciones para configurar las notificaciones, consulta Notificaciones de Pub/Sub.
Crea notas y casos para proyectos
En esta sección, se explica cómo crear notas y casos. En este ejemplo, usarás el tipo ATTESTATION.
Como proveedor, crearás una nota en tu proyecto para cada certificación y crearás un caso en el proyecto de tu cliente para cada certificación.
Crear notas
Sigue estos pasos para crear una nota y asignarle un ID.
API
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
import com.google.cloud.devtools.containeranalysis.v1.ContainerAnalysisClient;
import io.grafeas.v1.GrafeasClient;
import io.grafeas.v1.Note;
import io.grafeas.v1.ProjectName;
import io.grafeas.v1.Version;
import io.grafeas.v1.AttestationNote;
import java.io.IOException;
import java.lang.InterruptedException;
public class CreateNote {
// Creates and returns a new Note
public static Note createNote(String noteId, String projectId)
throws IOException, InterruptedException {
// String noteId = "my-note";
// String projectId = "my-project-id";
final String projectName = ProjectName.format(projectId);
Note newNote =
Note.newBuilder()
// Associate the Note with the metadata type
// https://cloud.google.com/container-registry/docs/container-analysis#supported_metadata_types
// Here, we use the type "attestation"
.setAttestation(
AttestationNote.newBuilder()
.setHint(
AttestationNote.Hint.newBuilder()
.setHumanReadableName("my-attestation-authority")))
.build();
// 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();
Note result = client.createNote(projectName, noteId, newNote);
return result;
}
}
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
import (
"context"
"fmt"
containeranalysis "cloud.google.com/go/containeranalysis/apiv1"
grafeaspb "google.golang.org/genproto/googleapis/grafeas/v1"
)
// createNote creates and returns a new attestation Note.
func createNote(noteID, projectID string) (*grafeaspb.Note, error) {
ctx := context.Background()
client, err := containeranalysis.NewClient(ctx)
if err != nil {
return nil, fmt.Errorf("NewClient: %w", err)
}
defer client.Close()
projectName := fmt.Sprintf("projects/%s", projectID)
req := &grafeaspb.CreateNoteRequest{
Parent: projectName,
NoteId: noteID,
Note: &grafeaspb.Note{
Type: &grafeaspb.Note_Attestation{
Attestation: &grafeaspb.AttestationNote{
Hint: &grafeaspb.AttestationNote_Hint{
HumanReadableName: "my-attestation-authority",
},
},
},
},
}
return client.GetGrafeasClient().CreateNote(ctx, req)
}
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si quieres obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
/**
* TODO(developer): Uncomment these variables before running the sample
*/
// const projectId = 'your-project-id', // Your Google Cloud Project ID
// const noteId = 'my-note-id' // Id of the note
// Import the library and create a client
const {ContainerAnalysisClient} = require('@google-cloud/containeranalysis');
const client = new ContainerAnalysisClient();
// Construct request
// Associate the Note with a metadata type
// https://cloud.google.com/container-registry/docs/container-analysis#supported_metadata_types
// Here, we use the type "attestation"
const formattedParent = client.getGrafeasClient().projectPath(projectId);
// Creates and returns a new Note
const [note] = await client.getGrafeasClient().createNote({
parent: formattedParent,
noteId: noteId,
note: {
attestation: {
hint: {
humanReadableName: 'my-attestation-authority',
},
},
},
});
console.log(`Note ${note.name} created.`);
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
# note_id = "A user-specified identifier for the note"
# project_id = "Your Google Cloud project ID"
require "google/cloud/container_analysis"
# Initialize the client
client = Google::Cloud::ContainerAnalysis.container_analysis.grafeas_client
parent = client.project_path project: project_id
note = {
attestation: {
hint: {
human_readable_name: "attestation-authority"
}
}
}
response = client.create_note parent: parent, note_id: note_id, note: note
puts response.name
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
from google.cloud.devtools import containeranalysis_v1
from grafeas.grafeas_v1 import types, Version
def create_note(note_id: str, project_id: str) -> types.grafeas.Note:
"""Creates and returns a new attestation note."""
# note_id = 'my-note'
# project_id = 'my-gcp-project'
client = containeranalysis_v1.ContainerAnalysisClient()
grafeas_client = client.get_grafeas_client()
project_name = f"projects/{project_id}"
note = {
"attestation": {
"hint": {
"human_readable_name": "attestation-authority",
}
}
}
response = grafeas_client.create_note(
parent=project_name, note_id=note_id, note=note
)
return response
Crea casos para las notas
A fin de crear casos para una nota, sigue estos pasos:
API
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
import com.google.cloud.devtools.containeranalysis.v1.ContainerAnalysisClient;
import com.google.protobuf.ByteString;
import io.grafeas.v1.AttestationOccurrence;
import io.grafeas.v1.GrafeasClient;
import io.grafeas.v1.NoteName;
import io.grafeas.v1.Occurrence;
import io.grafeas.v1.ProjectName;
import io.grafeas.v1.Signature;
import java.io.IOException;
public class CreateOccurrence {
// Creates and returns a new attestation Occurrence associated with an existing Note
public static Occurrence createOccurrence(
String resourceUrl, String noteId, String occProjectId, String noteProjectId)
throws IOException {
// String resourceUrl = "https://gcr.io/project/image@sha256:123";
// String noteId = "my-note";
// String occProjectId = "my-project-id";
// String noteProjectId = "my-project-id";
final NoteName noteName = NoteName.of(noteProjectId, noteId);
final String occProjectName = ProjectName.format(occProjectId);
Occurrence newOcc =
Occurrence.newBuilder()
.setNoteName(noteName.toString())
.setResourceUri(resourceUrl)
.setAttestation(
AttestationOccurrence.newBuilder()
.setSerializedPayload(ByteString.copyFrom("your-payload-here", "UTF-8"))
.addSignatures(
Signature.newBuilder()
.setPublicKeyId("your-key-id-here")
.setSignature(ByteString.copyFrom("your-signature-here", "UTF-8"))))
.build();
// 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();
Occurrence result = client.createOccurrence(occProjectName, newOcc);
return result;
}
}
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
import (
"context"
"fmt"
containeranalysis "cloud.google.com/go/containeranalysis/apiv1"
grafeaspb "google.golang.org/genproto/googleapis/grafeas/v1"
)
// createsOccurrence creates and returns a new Occurrence of a previously created attestation note.
// Use this style of URL when you use Google Artifact Registry.
// resourceURL := "https://LOCATION-docker.pkg.dev/my-project/my-repo/my-image"
// noteID := "my-note"
ctx := context.Background()
client, err := containeranalysis.NewClient(ctx)
if err != nil {
return nil, fmt.Errorf("NewClient: %w", err)
}
defer client.Close()
req := &grafeaspb.CreateOccurrenceRequest{
Parent: fmt.Sprintf("projects/%s", occProjectID),
Occurrence: &grafeaspb.Occurrence{
NoteName: fmt.Sprintf("projects/%s/notes/%s", noteProjectID, noteID),
// Attach the occurrence to the associated resource uri.
ResourceUri: resourceURL,
// Details about the attestation can be added here.
Details: &grafeaspb.Occurrence_Attestation{
Attestation: &grafeaspb.AttestationOccurrence{
SerializedPayload: []byte("..."),
Signatures: []*grafeaspb.Signature{
{
PublicKeyId: "...",
Signature: []byte("..."),
},
},
},
},
},
}
return client.GetGrafeasClient().CreateOccurrence(ctx, req)
}
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si quieres obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
/**
* TODO(developer): Uncomment these variables before running the sample
*/
// const noteProjectId = 'your-project-id', // Your Google Cloud Project ID
// const noteId = 'my-note-id', // Id of the note
// const occurrenceProjectId = 'your-project-id', // The Google Cloud Project ID of the occurrence
// 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();
// Construct request
const formattedParent = client
.getGrafeasClient()
.projectPath(occurrenceProjectId);
const formattedNote = client
.getGrafeasClient()
.notePath(noteProjectId, noteId);
// Creates and returns a new Occurrence associated with an existing Note
const [occurrence] = await client.getGrafeasClient().createOccurrence({
parent: formattedParent,
occurrence: {
noteName: formattedNote,
resourceUri: imageUrl,
attestation: {
serializedPayload: Buffer.from('your-payload-here').toString('base64'),
signatures: [
{
publicKeyId: 'your-key-id-here',
signature: Buffer.from('your-signature-here').toString('base64'),
},
],
},
},
});
console.log(`Occurrence created ${occurrence.name}.`);
return occurrence;
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
# note_id = "A user-specified identifier for the note"
# project_id = "Your Google Cloud project ID"
# note_project = "The project that contains the note"
# occurrence_project = "The project that contains the occurrence"
require "google/cloud/container_analysis"
require "base64"
# Initialize the client
client = Google::Cloud::ContainerAnalysis.container_analysis.grafeas_client
note_path = client.note_path project: note_project, note: note_id
project_path = client.project_path project: occurrence_project
occurrence = {
note_name: note_path,
resource_uri: resource_url,
attestation: {
serialized_payload: Base64.encode64("your-payload-here"),
signatures: [
{
public_key_id: "your-key-id-here",
signature: Base64.encode64("your-signature-here")
}
]
}
}
response = client.create_occurrence parent: project_path, occurrence: occurrence
puts response.name
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Si deseas obtener más información, consulta la documentación de referencia de la API de Artifact Analysis para Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
import base64
from google.cloud.devtools import containeranalysis_v1
from grafeas.grafeas_v1 import types
def create_occurrence(
resource_url: str, note_id: str, occurrence_project: str, note_project: str
) -> types.grafeas.Occurrence:
"""Creates and returns a new occurrence of a previously
created attestation note."""
# note_id = 'my-note'
# project_id = 'my-gcp-project'
client = containeranalysis_v1.ContainerAnalysisClient()
grafeas_client = client.get_grafeas_client()
formatted_note = f"projects/{note_project}/notes/{note_id}"
formatted_project = f"projects/{occurrence_project}"
occurrence = {
"note_name": formatted_note,
"resource_uri": resource_url,
"attestation": {
"serialized_payload": base64.b64encode(b"your-payload-here").decode("utf-8"),
"signatures": [
{
"public_key_id": "your-key-id-here",
"signature": base64.b64encode(b"your-signature-here").decode("utf-8"),
}
],
},
}
return grafeas_client.create_occurrence(
parent=formatted_project, occurrence=occurrence
)
Obtén todos los casos para una nota específica
Puedes ver todos los casos de una certificación específica en todos los proyectos de tu cliente con notes.occurrences.list().
API
Para enumerar todos los casos de una nota, envía una solicitud GET de la siguiente manera:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/notes/NOTE_ID/occurrences
Consulta el extremo de la API de projects.notes.occurrences.list
para obtener todos los detalles.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.