Utiliser des secrets pour stocker des données sensibles

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

Aperçu

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 code secret à une ressource, vous devez créer un secret contenant un mot de passe, puis référencer 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 unevaleur 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 projets multiples

Étant donné que Kubernetes n'autorise pas l'accès aux secrets dans les espaces de noms, si vous utilisez Config Connector pour gérer plusieurs projets, vous devez appliquer des secrets dans chaque espace de noms mappé avec un projet.

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 est 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 imprime 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 Resource Manager pour activer les API des services. Pour effectuer ces étapes, vous devez activer l'API Resource Manager. Vous pouvez activer cette API à l'aide de la commande "gcloud" suivante .
    gcloud services enable cloudresourcemanager.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 gcloud, 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 avec gcloud.

    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 avec gcloud.

    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.

Et ensuite ?