Sécuriser et stocker les données sensibles à l'aide du connecteur Secret Manager

Secret Manager est un système de stockage sécurisé et pratique Clés API, mots de passe, certificats et autres données sensibles. Secret Manager fournit un emplacement centralisé et une source unique d'informations fiables pour la gestion, la consultation et l'audit des secrets sur Google Cloud.

Vous pouvez utiliser Workflows connecteur pour l'API Secret Manager pour accéder à Secret Manager dans un workflow. Cela simplifie le processus car le connecteur gère le formatage de requêtes, et fournit des méthodes et des arguments pour que vous n'ayez pas à les détails de l'API Secret Manager. Le connecteur comporte également pour gérer les tentatives et les opérations de longue durée. Pour apprendre sur l'utilisation des connecteurs Workflows, consultez Découvrez les connecteurs.

Accorder au compte de service Workflows l'accès à Secret Manager

Secret Manager utilise Identity and Access Management (IAM) pour gérer les accès le contrôle. Pour créer, gérer ou répertorier un secret, ou pour y accéder, les identifiants Les autorisations IAM doivent être accordées au niveau du projet et au niveau au niveau d'une ressource individuelle. Pour en savoir plus, consultez la page Contrôle des accès avec IAM.

Workflows utilise des comptes de service pour autoriser les workflows à accéder aux ressources Google Cloud. À accéder à la version d'un secret, vous devez attribuer le rôle Accesseur de secrets Secret Manager (roles/secretmanager.secretAccessor) sur le secret, le projet, le dossier organisation au compte de service. En savoir plus sur Déployer un workflow avec un compte de service géré par l'utilisateur

Activer les API

Avant d'utiliser les workflows le connecteur API Secret Manager, assurez-vous d'activer le Secret Manager et aux API Workflows.

Console

Activer les API

gcloud

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

Appeler un appel de connecteur

Comme pour l'appel d'un point de terminaison HTTP, un appel de connecteur nécessite call et args. . Pour en savoir plus, consultez Appeler un appel de connecteur.

En plus d'utiliser une étape d'appel, vous pouvez appeler les méthodes d'assistance dans une comme ceci:

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

Par exemple, vous pouvez utiliser la méthode d'assistance accessString pour récupérer le secret données sous forme de chaîne. C'est plus simple que d'utiliser l'API access comme données de secret. est automatiquement décodée dans un format de chaîne.

Vous pouvez également utiliser la méthode d'assistance addVersionString pour ajouter une valeur de secret. à un secret existant. C'est plus simple que d'utiliser l'API addVersion en tant que les données secrètes sont automatiquement encodées en une chaîne base64, ce qui est requis par addVersion

Récupérer un secret à l'aide du connecteur Secret Manager

Le workflow suivant montre comment utiliser Secret Manager pour récupérer 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}"
      ]
    }
  }
]

Étape suivante