Utiliser des secrets pour stocker des données sensibles


Vous pouvez utiliser un secret pour stocker des informations de configuration sensibles, telles que les mots de passe et les clés d'accès, dans votre cluster GKE. Cette page décrit comment Config Connector utilise les valeurs du secret lors de la configuration de vos ressources Google Cloud.

Présentation

Cette section explique comment utiliser les secrets à l'aide de Config Connector.

Utiliser un secret lors de la création d'une ressource

Vous pouvez utiliser les données dans un secret lorsque vous créez une ressource. Dans la section Transmettre un secret à une ressource, vous créez un secret contenant un mot de passe, puis vous référencez le secret pour un utilisateur sur une base de données Cloud SQL.

Mettre à jour les secrets

Lorsque vous appliquez une mise à jour à un secret, Config Connector met à jour la ressource pour qu'elle corresponde à l'état souhaité. Par exemple, si vous mettez à jour le secret référencé comme mot de passe pour une valeur SQLUser, Config Connector mettra à jour le mot de passe de l'utilisateur.

Supprimer les secrets

Si vous supprimez un secret utilisé par une ressource, Config Connector ne supprime pas la référence de la ressource au secret. Par exemple, si vous créez un utilisateur SQL avec un mot de passe qui fait référence à un secret, puis que vous supprimez le code secret, le mot de passe restera sur SQLUser.

Dépannage

Si vous créez une ressource faisant référence à un secret qui n'existe pas, Config Connector créera un événement DependencyNotFound ou DependencyInvalid.

Secrets et espaces de noms Kubernetes

Étant donné que Kubernetes n'autorise pas l'accès aux secrets sur plusieurs espaces de noms, si vous utilisez la même valeur secrète pour des ressources provenant de différents espaces de noms, vous devez appliquer des secrets dans chaque espace de noms.

Transmettre un secret à une ressource

Dans cette section, vous allez créer un serveur Cloud SQL et définir le mot de passe de l'utilisateur par défaut avec un secret.

Avant de commencer

Pour effectuer ces étapes, vous avez besoin des éléments suivants :

  • Config Connector installé sur un cluster Kubernetes
  • L'API Cloud SQL Admin activée dans votre projet Pour vérifier que l'API est activée, exécutez la commande gcloud suivante :

    gcloud services list --filter=sqladmin.googleapis.com
    

    Si la commande affiche Listed 0 items., vous devez activer l'API. Vous pouvez activer l'API avec Config Connector et l'API Resource Manager, ou une commande gcloud.

API Service Usage

  1. Config Connector utilise l'API Service Usage pour activer les API de service. Pour effectuer ces opérations, vous devez activer l'API Service Usage. Vous pouvez activer cette API à l'aide de la Google Cloud CLI:
    gcloud services enable serviceusage.googleapis.com
  2. Copiez le fichier YAML suivant dans un fichier nommé enable-sql.yaml :

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. Appliquez enable-sql.yaml à votre cluster avec kubectl :

    kubectl apply -f enable-sql.yaml --namespace CC_NAMESPACE
    

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

gcloud

Pour activer l'API SQL Admin avec la Google Cloud CLI, exécutez la commande suivante:

gcloud services enable sqladmin.googleapis.com

Créer un serveur Cloud SQL

  1. Copiez le manifeste YAML ci-dessous dans un fichier nommé sql-server-example.yaml. Cela crée un serveur Cloud SQL nommé sqlserver-1 et un utilisateur nommé sqluser-sample. Le mot de passe de sqluser-sample est défini par une référence de ressource à un secret nommé secret-1.

    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLInstance
    metadata:
      labels:
        label-one: "sql-server-example"
      name: sqlserver-1
    spec:
      region: us-central1
      databaseVersion: MYSQL_5_7
      settings:
        tier: db-g1-small
    ---
    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLUser
    metadata:
      name: sqluser-sample
    spec:
      instanceRef:
        name: sqlserver-1
      host: "%"
      password:
        valueFrom:
          secretKeyRef:
            name: secret-1  # Name of the Secret object to extract a value from
            key: password   # Key that identifies the value to be extracted
    
  2. Copiez le manifeste YAML ci-dessous dans un fichier nommé example-secret.yaml. Modifiez la valeur de password avant de l'enregistrer. Cela indique la valeur secret-1, référencée dans la section précédente.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. Appliquez les configurations à votre cluster.

    kubectl apply -n CC_NAMESPACE -f example-secret.yaml
    kubectl apply -n CC_NAMESPACE -f sql-server-example.yaml
    

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

    Config Connector crée l'instance Cloud SQL et un utilisateur avec le mot de passe que vous avez spécifié. Cela peut prendre quelques minutes.

  4. Patientez quelques minutes et vérifiez que l'instance est disponible :

    gcloud sql instances list --filter="name=sqlserver-1"

    Le résultat doit inclure un serveur avec STATUS de RUNNABLE.

  5. Confirmez que vous pouvez vous connecter à l'instance SQL :

    gcloud sql connect sqlserver-1 --user=sqluser-sample

    Vous êtes invité à saisir votre mot de passe.

Nettoyer

Si vous ne souhaitez pas conserver l'instance, supprimez l'instance Cloud SQL, l'utilisateur et le secret avec kubectl.

    kubectl delete -n CC_NAMESPACE -f sql-server-example.yaml
    kubectl delete -n CC_NAMESPACE -f example-secret.yaml

Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

Étapes suivantes