Crear un secreto

En esta página se describe cómo crear un secreto. Un secreto contiene una o varias versiones de secreto, así como metadatos como etiquetas y políticas de réplica. El contenido real de un secreto se almacena en una versión de secreto.

Antes de empezar

  1. Habilita la API Secret Manager.

  2. Configura la autenticación.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticación para usar REST de la documentación sobre autenticación de Google Cloud .

    Roles obligatorios

    Para obtener los permisos que necesitas para crear un secreto, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de Secret Manager (roles/secretmanager.admin) en el proyecto, la carpeta o la organización. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

    Crear un secreto

    Puedes crear secretos con la Google Cloud consola, la CLI de Google Cloud, la API Secret Manager o las bibliotecas de cliente de Secret Manager.

    Consola

    1. En la Google Cloud consola, ve a la página Secret Manager.

      Ir a Secret Manager

    2. En la página Secret Manager, haz clic en Crear secreto.

    3. En la página Crear secreto, introduce un nombre para el secreto en el campo Nombre. El nombre del secreto puede contener letras mayúsculas y minúsculas, números, guiones y guiones bajos. La longitud máxima permitida para el nombre es de 255 caracteres.

    4. Introduce un valor para el secreto (por ejemplo, abcd1234). El valor del secreto puede estar en cualquier formato, pero no debe superar los 64 KiB. También puedes subir un archivo de texto que contenga el valor del secreto con la opción Subir archivo. Esta acción crea automáticamente la versión del secreto.

    5. Haz clic en Crear secreto.

    gcloud

    Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

    • SECRET_ID: el ID del secreto o el identificador completo del secreto
    • REPLICATION_POLICY: la política de replicación del secreto, que puede ser automática o gestionada por el usuario.

    Ejecuta el siguiente comando:

    Linux, macOS o Cloud Shell

    gcloud secrets create SECRET_ID \
        --replication-policy="REPLICATION_POLICY"

    Windows (PowerShell)

    gcloud secrets create SECRET_ID `
        --replication-policy="REPLICATION_POLICY"

    Windows (cmd.exe)

    gcloud secrets create SECRET_ID ^
        --replication-policy="REPLICATION_POLICY"

    REST

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID del proyecto Google Cloud
    • SECRET_ID: el ID del secreto o el identificador completo del secreto
    • REPLICATION_POLICY: la política de replicación del secreto, que puede ser automática o gestionada por el usuario.

    Método HTTP y URL:

    POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID

    Cuerpo JSON de la solicitud:

    {
      "replication": {
        "REPLICATION_POLICY": {}
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "name": "projects/PROJECT_ID/secrets/SECRET_ID",
      "createTime": "2024-03-25T08:24:13.153705Z",
      "etag": "\"161477e6071da9\""
    }
    

    C#

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de C# de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    
    using Google.Api.Gax.ResourceNames;
    using Google.Cloud.SecretManager.V1;
    
    public class CreateSecretSample
    {
        public Secret CreateSecret(
          string projectId = "my-project", string secretId = "my-secret")
        {
            // Create the client.
            SecretManagerServiceClient client = SecretManagerServiceClient.Create();
    
            // Build the parent resource name.
            ProjectName projectName = new ProjectName(projectId);
    
            // Build the secret.
            Secret secret = new Secret
            {
                Replication = new Replication
                {
                    Automatic = new Replication.Types.Automatic(),
                },
            };
    
            // Call the API.
            Secret createdSecret = client.CreateSecret(projectName, secretId, secret);
            return createdSecret;
        }
    }

    Go

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	secretmanager "cloud.google.com/go/secretmanager/apiv1"
    	"cloud.google.com/go/secretmanager/apiv1/secretmanagerpb"
    )
    
    // createSecret creates a new secret with the given name. A secret is a logical
    // wrapper around a collection of secret versions. Secret versions hold the
    // actual secret material.
    func createSecret(w io.Writer, parent, id string) error {
    	// parent := "projects/my-project"
    	// id := "my-secret"
    
    	// Create the client.
    	ctx := context.Background()
    	client, err := secretmanager.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("failed to create secretmanager client: %w", err)
    	}
    	defer client.Close()
    
    	// Build the request.
    	req := &secretmanagerpb.CreateSecretRequest{
    		Parent:   parent,
    		SecretId: id,
    		Secret: &secretmanagerpb.Secret{
    			Replication: &secretmanagerpb.Replication{
    				Replication: &secretmanagerpb.Replication_Automatic_{
    					Automatic: &secretmanagerpb.Replication_Automatic{},
    				},
    			},
    		},
    	}
    
    	// Call the API.
    	result, err := client.CreateSecret(ctx, req)
    	if err != nil {
    		return fmt.Errorf("failed to create secret: %w", err)
    	}
    	fmt.Fprintf(w, "Created secret: %s\n", result.Name)
    	return nil
    }
    

    Java

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    import com.google.cloud.secretmanager.v1.ProjectName;
    import com.google.cloud.secretmanager.v1.Replication;
    import com.google.cloud.secretmanager.v1.Secret;
    import com.google.cloud.secretmanager.v1.SecretManagerServiceClient;
    import com.google.protobuf.Duration;
    import java.io.IOException;
    
    public class CreateSecret {
    
      public static void createSecret() throws IOException {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String secretId = "your-secret-id";
        createSecret(projectId, secretId);
      }
    
      // Create a new secret with automatic replication.
      public static void createSecret(String projectId, String secretId) throws IOException {
        // Initialize the client that will be used to send requests. This client only needs to be
        // created once, and can be reused for multiple requests. After completing all of your requests,
        // call the "close" method on the client to safely clean up any remaining background resources.
        try (SecretManagerServiceClient client = SecretManagerServiceClient.create()) {
          // Build the parent name from the project.
          ProjectName projectName = ProjectName.of(projectId);
    
          // Optionally set a TTL for the secret. This demonstrates how to configure
          // a secret to be automatically deleted after a certain period. The TTL is
          // specified in seconds (e.g., 900 for 15 minutes). This can be useful
          // for managing sensitive data and reducing storage costs.
          Duration ttl = Duration.newBuilder().setSeconds(900).build();
    
          // Build the secret to create.
          Secret secret =
              Secret.newBuilder()
                  .setReplication(
                      Replication.newBuilder()
                          .setAutomatic(Replication.Automatic.newBuilder().build())
                          .build())
                  .setTtl(ttl)
                  .build();
    
          // Create the secret.
          Secret createdSecret = client.createSecret(projectName, secretId, secret);
          System.out.printf("Created secret %s\n", createdSecret.getName());
        }
      }
    }

    Node.js

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Node.js e instalar el SDK de Node.js de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const parent = 'projects/my-project';
    // const secretId = 'my-secret';
    // const ttl = undefined // Optional: Specify TTL in seconds (e.g., '900s' for 15 minutes).
    
    // Imports the Secret Manager library
    const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
    
    // Instantiates a client
    const client = new SecretManagerServiceClient();
    
    async function createSecret() {
      const secretConfig = {
        replication: {
          automatic: {},
        },
      };
    
      // Add TTL to the secret configuration if provided
      if (ttl) {
        secretConfig.ttl = {
          seconds: parseInt(ttl.replace('s', ''), 10),
        };
        console.log(`Secret TTL set to ${ttl}`);
      }
    
      const [secret] = await client.createSecret({
        parent: parent,
        secretId: secretId,
        secret: secretConfig,
      });
    
      console.log(`Created secret ${secret.name}`);
    }
    
    createSecret();

    PHP

    Para ejecutar este código, primero debes consultar información sobre cómo usar PHP en Google Cloud e instalar el SDK de PHP de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    // Import the Secret Manager client library.
    use Google\Cloud\SecretManager\V1\CreateSecretRequest;
    use Google\Cloud\SecretManager\V1\Replication;
    use Google\Cloud\SecretManager\V1\Replication\Automatic;
    use Google\Cloud\SecretManager\V1\Secret;
    use Google\Cloud\SecretManager\V1\Client\SecretManagerServiceClient;
    
    /**
     * @param string $projectId Your Google Cloud Project ID (e.g. 'my-project')
     * @param string $secretId  Your secret ID (e.g. 'my-secret')
     */
    function create_secret(string $projectId, string $secretId): void
    {
        // Create the Secret Manager client.
        $client = new SecretManagerServiceClient();
    
        // Build the resource name of the parent project.
        $parent = $client->projectName($projectId);
    
        $secret = new Secret([
            'replication' => new Replication([
                'automatic' => new Automatic(),
            ]),
        ]);
    
        // Build the request.
        $request = CreateSecretRequest::build($parent, $secretId, $secret);
    
        // Create the secret.
        $newSecret = $client->createSecret($request);
    
        // Print the new secret name.
        printf('Created secret: %s', $newSecret->getName());
    }

    Python

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Python e instalar el SDK de Python de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    # Import the Secret Manager client library.
    from google.cloud import secretmanager
    
    
    def create_secret(
        project_id: str, secret_id: str, ttl: Optional[str] = None
    ) -> secretmanager.Secret:
        """
        Create a new secret with the given name. A secret is a logical wrapper
        around a collection of secret versions. Secret versions hold the actual
        secret material.
    
         Args:
            project_id (str): The project ID where the secret is to be created.
            secret_id (str): The ID to assign to the new secret. This ID must be unique within the project.
            ttl (Optional[str]): An optional string that specifies the secret's time-to-live in seconds with
                                 format (e.g., "900s" for 15 minutes). If specified, the secret
                                 versions will be automatically deleted upon reaching the end of the TTL period.
    
        Returns:
            secretmanager.Secret: An object representing the newly created secret, containing details like the
                                  secret's name, replication settings, and optionally its TTL.
    
        Example:
            # Create a secret with automatic replication and no TTL
            new_secret = create_secret("my-project", "my-new-secret")
    
            # Create a secret with a TTL of 30 days
            new_secret_with_ttl = create_secret("my-project", "my-timed-secret", "7776000s")
        """
    
        # Create the Secret Manager client.
        client = secretmanager.SecretManagerServiceClient()
    
        # Build the resource name of the parent project.
        parent = f"projects/{project_id}"
    
        # Create the secret.
        response = client.create_secret(
            request={
                "parent": parent,
                "secret_id": secret_id,
                "secret": {"replication": {"automatic": {}}, "ttl": ttl},
            }
        )
    
        # Print the new secret name.
        print(f"Created secret: {response.name}")

    Ruby

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Ruby e instalar el SDK de Ruby de Secret Manager. En Compute Engine o GKE, debes autenticarte con el ámbito cloud-platform.

    # project_id = "YOUR-GOOGLE-CLOUD-PROJECT"  # (e.g. "my-project")
    # secret_id  = "YOUR-SECRET-ID"             # (e.g. "my-secret")
    
    # Require the Secret Manager client library.
    require "google/cloud/secret_manager"
    
    # Create a Secret Manager client.
    client = Google::Cloud::SecretManager.secret_manager_service
    
    # Build the resource name of the parent project.
    parent = client.project_path project: project_id
    
    # Create the secret.
    secret = client.create_secret(
      parent:    parent,
      secret_id: secret_id,
      secret:    {
        replication: {
          automatic: {}
        }
      }
    )
    
    # Print the new secret name.
    puts "Created secret: #{secret.name}"

    Para seleccionar la política de replicación adecuada para tu secreto, consulta Elegir una política de replicación.

    Añadir una versión de secreto

    Secret Manager crea versiones de los datos de los secretos automáticamente. Las operaciones de claves, como el acceso, la destrucción, la inhabilitación y la habilitación, se aplican a versiones de secretos específicas. Con Secret Manager, puedes asociar secretos a versiones específicas, como 42, o a alias dinámicos, como latest. Para obtener más información, consulta Añadir una versión secreta.

    Acceder a una versión de secreto

    Para acceder a los datos secretos de una versión concreta de un secreto para autenticarte correctamente, consulta Acceder a una versión de un secreto.

    Siguientes pasos