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

Secret Manager ist ein sicheres und praktisches Speichersystem für API-Schlüssel, Passwörter, Zertifikate und andere sensible Daten. Secret Manager bietet einen zentralen Ort und eine Single Source Of Truth, um Secrets in Google Cloud zu verwalten, darauf zuzugreifen und sie zu prüfen.

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

Dem Workflows-Dienstkonto Zugriff auf Secret Manager gewähren

Secret Manager verwendet die Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) für die Zugriffssteuerung. Zum Erstellen, Verwalten, Auflisten oder Aufrufen eines Secrets müssen die entsprechenden IAM-Berechtigungen auf Projektebene und auf der einzelnen Ressourcenebene 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 „Zugriffsfunktion für Secret Manager-Secrets“ (roles/secretmanager.secretAccessor) für das Secret, das Projekt, den Ordner oder die Organisation zuweisen. Weitere Informationen zum Bereitstellen eines Workflows mit einem vom Nutzer verwalteten Dienstkonto

APIs aktivieren

Bevor Sie den Workflows-Connector für die Secret Manager API verwenden, müssen Sie die Secret Manager API und die Workflows APIs 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.

Sie können nicht nur einen Aufrufschritt verwenden, sondern auch die Hilfsmethoden in einem Ausdruck wie diesem aufrufen:

${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. Dies 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. Dies 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

Im folgenden Workflow wird gezeigt, wie Sie mit dem Secret Manager-Connector ein Secret abrufen.

YAML

# This workflow demonstrates how to use the Cloud Secret Manager connector to.
# retrieve a secret.
# Expected successful output: the secret data.

- 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"
# We provide a helper method to add a secret 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"
# We provide a helper method to access the secret in string format without base-64 decoding.
# To compare the usage between accessRaw() and access(), we list two demo steps to retrieve
# the same secret below.
#
# accessString assumes the secret data is a valid UTF-8 string and if it detects non-UTF-8
# bytes, an error will be raised.
- access_string_secret:
    call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
    args:
      secret_id: ${secret_id}
      version: ${version}  # If not set, "latest" will be used.
      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
# Secret can also be retrieved by 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}
      - ${secret_str_from_exp}
      - ${text.decode(base64.decode(base64_encoded_secret.payload.data))}

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}",
        "${secret_str_from_exp}",
        "${text.decode(base64.decode(base64_encoded_secret.payload.data))}"
      ]
    }
  }
]

Nächste Schritte