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

Secret Manager ist ein sicheres und praktisches Speichersystem API-Schlüssel, Passwörter, Zertifikate und andere sensible Daten So können Sie Secrets in Google Cloud an einer zentralen Stelle und Single Source Of Truth verwalten, darauf zugreifen und prüfen.

Sie können das Tool „Workflows“ Connector für die Secret Manager API um innerhalb eines Workflows auf Secret Manager zuzugreifen. Das vereinfacht die Integration für Sie, 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 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 nutzt Identity and Access Management (IAM) für den Zugriff Steuerung. Damit ein Nutzer ein Secret erstellen, verwalten, auflisten oder aufrufen kann, müssen ihm 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 Bis auf eine Secret-Version zugreifen müssen, Rolle „Secret Manager-Secret-Zugriffer“ gewähren (roles/secretmanager.secretAccessor) für das Secret, das Projekt, den Ordner oder Organisation mit dem Dienstkonto. Weitere Informationen über Workflow mit einem vom Nutzer verwalteten Dienstkonto bereitstellen

APIs aktivieren

Bevor Sie den Workflow-Connector 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 Connectoraufruf die Felder call und args erforderlich. Weitere Informationen finden Sie unter Connector-Aufruf aufrufen.

Sie können die Hilfsmethoden nicht nur in einem Aufrufschritt, sondern auch 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 geheimen Daten als String abzurufen. Das ist einfacher als die Verwendung der access API, da die geheimen Daten automatisch in ein Stringformat decodiert werden.

Sie können auch die Hilfsmethode addVersionString verwenden, um einen neuen Secret-Wert hinzuzufügen einem vorhandenen Secret hinzu. Das ist einfacher als die Verwendung der addVersion API, da die geheimen 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 Secret Manager verwendet wird Connector, um ein Secret abzurufen.

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