Sensible Daten mit dem Secret Manager-Connector schützen und speichern

Secret Manager bietet eine sichere und bequeme Möglichkeit, API-Schlüssel, Passwörter, Zertifikate und andere sensible Daten zu speichern. Secret Manager Sie Secrets in an einer zentralen Stelle und Single Source Of Truth verwalten, darauf zugreifen und prüfen. Google Cloud

Sie können den Connector von Workflows' für die Secret Manager API verwenden, um innerhalb eines Workflows auf Secret Manager zuzugreifen. Das vereinfacht die Integration, da der Connector die Formatierung von Anfragen übernimmt und Methoden und Argumente bereitstellt. Sie müssen also die Details der Secret Manager API nicht kennen. Der Connector hat auch ein integriertes Verhalten für die Verarbeitung von Wiederholungsversuchen und lang andauernden Vorgängen. Weitere Informationen zur Verwendung von Workflow-Connectors finden Sie unter Informationen zu Connectors.

Dem Workflows-Dienstkonto Zugriff auf Secret Manager gewähren

Secret Manager verwendet für die Zugriffssteuerung Identity and Access Management (IAM). Zum Erstellen, Verwalten, Auflisten oder Aufrufen eines Secrets müssen die entsprechenden IAM-Berechtigungen auf Projektebene und auf Ebene der einzelnen Ressourcen gewährt werden. Weitere Informationen finden Sie unter Zugriffssteuerung mit IAM.

Workflows verwendet Dienstkonten, um Workflows Zugriff auf Google Cloud Ressourcen zu gewähren. Für den Zugriff auf eine Secret-Version müssen Sie dem Dienstkonto die Rolle Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) für das Secret, das Projekt, den Ordner oder die Organisation gewähren. Weitere Informationen zum Bereitstellen eines Workflows mit einem vom Nutzer verwalteten Dienstkonto.

APIs aktivieren

Bevor Sie den Connector von Workflows für die Secret Manager API verwenden, müssen Sie die Secret Manager API und die Workflows API aktivieren.

Console

APIs aktivieren

gcloud

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

Connector-Aufruf aufrufen

Ähnlich wie beim Aufrufen eines HTTP-Endpunkts sind für einen Connector-Aufruf die Felder call und args erforderlich. Weitere Informationen finden Sie unter Connector-Aufruf aufrufen.

Neben der Verwendung eines Aufrufschritts können Sie die Hilfsmethoden auch in einem Ausdruck aufrufen, z. B.:

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

Sie können beispielsweise die Hilfsmethode accessString verwenden, um die Secret-Daten als String abzurufen. Das ist einfacher als die Verwendung der access API, da die Secret-Daten automatisch in ein Stringformat decodiert werden.

Sie können auch die Hilfsmethode addVersionString verwenden, um einem vorhandenen Secret einen neuen Secret-Wert hinzuzufügen. Das ist einfacher als die Verwendung der addVersion API, da die Secret-Daten automatisch in einen Base64-String codiert werden, der für addVersion erforderlich ist.

Secret mit dem Secret Manager-Connector abrufen

Der folgende Workflow zeigt, wie Sie ein Secret mit dem Secret Manager-Connector abrufen.

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}"
      ]
    }
  }
]

Nächste Schritte