Proteggi e archivia i dati sensibili utilizzando il connettore Secret Manager

Secret Manager è un sistema di archiviazione pratico e sicuro Chiavi API, password, certificati e altri dati sensibili. Secret Manager offre una posizione centralizzata e un'unica fonte attendibile per la gestione, l'accesso e l'audit i secret in Google Cloud.

Puoi utilizzare Workflows connettore per l'API Secret Manager per accedere a Secret Manager all'interno di un flusso di lavoro. Ciò semplifica integrazione dei dati, poiché il connettore gestisce la formattazione richieste e fornisce metodi e argomenti in modo che tu non debba i dettagli dell'API Secret Manager. Il connettore ha inoltre comportamento integrato per la gestione dei nuovi tentativi e delle operazioni a lunga esecuzione. Per ulteriori informazioni per ulteriori informazioni sull'utilizzo dei connettori Workflows, consulta Informazioni sui connettori.

Concedi all'account di servizio Workflows l'accesso a Secret Manager

Secret Manager utilizza Identity and Access Management (IAM) per l'accesso controllo. Per creare, gestire, elencare o accedere a un secret, è necessario Le autorizzazioni IAM devono essere concesse a livello di progetto e a livello di singola risorsa. Per ulteriori informazioni, consulta Controllo dell'accesso con IAM.

Workflows utilizza account di servizio per concedere ai flussi di lavoro l'accesso a dell'accesso a specifiche risorse Google Cloud. A accedere a una versione del secret, devi concedi il ruolo Funzione di accesso ai secret di Secret Manager (roles/secretmanager.secretAccessor) nel secret, nel progetto, nella cartella organizzazione all'account di servizio. Scopri di più su il deployment di un flusso di lavoro con un account di servizio gestito dall'utente.

Abilita le API

Prima di utilizzare lo Workflows di rete per il API Secret Manager, assicurati di abilitare API Secret Manager e Workflows.

Console

Abilita le API

gcloud

  gcloud services enable secretmanager.googleapis.com workflows.googleapis.com

Richiama una chiamata connettore

Analogamente al richiamo di un endpoint HTTP, una chiamata connettore richiede call e args campi. Per ulteriori informazioni, vedi Richiama una chiamata connettore.

Oltre a utilizzare un passaggio di chiamata, puoi chiamare i metodi helper in una come questa:

${googleapis.secretmanager.v1.projects.secrets.versions.accessString(secret_id, version, project_id)}

Ad esempio, puoi utilizzare il metodo helper accessString per recuperare il secret come stringa. Questa operazione è più semplice rispetto all'utilizzo dell'API access come dati secret viene decodificato automaticamente in un formato stringa.

Puoi anche utilizzare il metodo helper addVersionString per aggiungere un nuovo valore del secret a un secret esistente. Questa operazione è più semplice rispetto all'utilizzo dell'API addVersion come i dati secret vengono automaticamente codificati in una stringa Base64, richiesta dal addVersion.

Recupera un secret utilizzando il connettore Secret Manager

Il flusso di lavoro seguente illustra come utilizzare Secret Manager per recuperare un secret.

YAML

# This workflow demonstrates how to use the Secret Manager connector:
# Retrieve a secret using three different methods
# Expected output: the secret data (thrice)
- init:
    assign:
      - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
      - secret_id: "test-secret"  # Make sure you have this secret and it has a version of 1.
      - version: "1"
# Add data to an existing secret without base-64 encoding
- add_version_string:
    call: googleapis.secretmanager.v1.projects.secrets.addVersionString
    args:
      secret_id: ${secret_id}
      project_id: ${project_id}
      data: "a new secret"
# Retrieve the secret in string format without base-64 decoding and assume
# that the secret data is a valid UTF-8 string; if not, raise an error
- access_string_secret:
    call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
    args:
      secret_id: ${secret_id}
      version: ${version}  # if not set, "latest" is used
      project_id: ${project_id}
    result: str_secret
# Retrieve the secret in string format without base-64 decoding
- access_secret:
    call: googleapis.secretmanager.v1.projects.secrets.versions.access
    args:
      name: ${"projects/" + project_id + "/secrets/" + secret_id + "/versions/" + version}
    result: base64_encoded_secret
# Retrieve the secret using positional arguments in an expression
- expression:
    assign:
      - secret_str_from_exp: ${googleapis.secretmanager.v1.projects.secrets.versions.accessString(secret_id, version, project_id)}
- the_end:
    return:
      - ${str_secret}
      - ${text.decode(base64.decode(base64_encoded_secret.payload.data))}
      - ${secret_str_from_exp}

JSON

[
  {
    "init": {
      "assign": [
        {
          "project_id": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
        },
        {
          "secret_id": "test-secret"
        },
        {
          "version": "1"
        }
      ]
    }
  },
  {
    "add_version_string": {
      "call": "googleapis.secretmanager.v1.projects.secrets.addVersionString",
      "args": {
        "secret_id": "${secret_id}",
        "project_id": "${project_id}",
        "data": "a new secret"
      }
    }
  },
  {
    "access_string_secret": {
      "call": "googleapis.secretmanager.v1.projects.secrets.versions.accessString",
      "args": {
        "secret_id": "${secret_id}",
        "version": "${version}",
        "project_id": "${project_id}"
      },
      "result": "str_secret"
    }
  },
  {
    "access_secret": {
      "call": "googleapis.secretmanager.v1.projects.secrets.versions.access",
      "args": {
        "name": "${\"projects/\" + project_id + \"/secrets/\" + secret_id + \"/versions/\" + version}"
      },
      "result": "base64_encoded_secret"
    }
  },
  {
    "expression": {
      "assign": [
        {
          "secret_str_from_exp": "${googleapis.secretmanager.v1.projects.secrets.versions.accessString(secret_id, version, project_id)}"
        }
      ]
    }
  },
  {
    "the_end": {
      "return": [
        "${str_secret}",
        "${text.decode(base64.decode(base64_encoded_secret.payload.data))}",
        "${secret_str_from_exp}"
      ]
    }
  }
]

Passaggi successivi