Secrets zum Speichern sensibler Daten verwenden

Sie können ein Secret verwenden, um vertrauliche Konfigurationsinformationen wie Passwörter und Zugriffsschlüssel in Ihrem GKE-Cluster zu speichern. Auf dieser Seite wird beschrieben, wie Config Connector beim Konfigurieren Ihrer Google Cloud-Ressourcen Secret-Werte verwendet.

Überblick

Dieser Abschnitt bietet eine Übersicht über die Verwendung von Secrets mit Config Connector.

Secret beim Erstellen einer Ressource verwenden

Wenn Sie eine Ressource erstellen, können Sie die Daten eines Secrets nutzen. Im Abschnitt Secret an eine Ressource übergeben wird ein Secret erstellt, das ein Passwort enthält, und dann auf das Secret eines Nutzers in einer Cloud SQL-Datenbank verwiesen.

Secrets aktualisieren

Wenn Sie ein Update auf ein Secret anwenden, aktualisiert der Config Connector die Ressource, wenn er das nächste Mal Ihren gewünschten Status abgleicht. Wenn Sie beispielsweise das Secret aktualisieren, auf das als Passwort für einen SQLUser verwiesen wird, aktualisiert Config Connector das Passwort des Nutzers.

Secrets löschen

Wenn Sie ein Secret löschen, das von einer Ressource verwendet wird, wird der Verweis der Ressource auf das Secret von Config Connector nicht entfernt. Beispiel: Wenn Sie einen SQLUser mit einem Passwort erstellen, das auf ein Secret verweist, und das Secret dann löschen, bleibt das Passwort für den SQLUser erhalten.

Fehlerbehebung

Wenn Sie eine Ressource erstellen, die auf ein nicht vorhandenes Secret verweist, erstellt Config Connector ein DependencyNotFound- oder DependencyInvalid- Ereignis.

Secrets und mehrere Projekte

Da Kubernetes keinen Zugriff auf Secret über Namespaces zulässt, müssen Sie Secrets in jedem Namespace anwenden, der einem Projekt zugeordnet ist, wenn Sie Config Connector verwenden, um mehrere Projekte zu verwalten.

Secret an eine Ressource weitergeben

In diesem Abschnitt erstellen Sie einen Cloud SQL-Server und legen das Passwort des Standardnutzers mit einem Secret fest.

Hinweis

Für diese Schritte ist Folgendes erforderlich:

  • Config Connector muss auf einem Kubernetes-Cluster installiert sein.
  • Die Cloud SQL Admin API muss in Ihrem Projekt aktiviert sein. Zum Prüfen, ob die API aktiviert ist, führen Sie den folgenden gcloud-Befehl aus:

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

    Wenn durch den Befehl Listed 0 items. ausgegeben wird, müssen Sie die API aktivieren. Sie können die API mit Config Connector und der Resource Manager API oder mit einem gcloud-Befehl aktivieren.

Service Usage API

  1. Config Connector verwendet die Resource Manager API zum Aktivieren von Dienst-APIs. Um die folgenden Schritte auszuführen, müssen Sie die Resource Manager API aktivieren. Dazu verwenden Sie folgenden gcloud-Befehl:
    gcloud services enable cloudresourcemanager.googleapis.com
    Das Aktivieren der API kann einige Minuten dauern.
  2. Kopieren Sie die folgende YAML-Datei in eine Datei mit dem Namen enable-sql.yaml

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. Wenden Sie enable-sql.yaml mit kubectl auf Ihren Cluster an:

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

    Ersetzen Sie dabei [CC_NAMESPACE] durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

gcloud

Zum Aktivieren der SQL Admin API mit gcloud führen Sie den folgenden Befehl aus:

gcloud services enable sqladmin.googleapis.com

Cloud SQL-Server erstellen

  1. Kopieren Sie das unten aufgeführte YAML-Manifest in eine Datei mit dem Namen sql-server-example.yaml. Damit werden ein Cloud SQL-Server namens sqlserver-1 und ein Nutzer mit dem Namen sqluser-sample erstellt. Das Passwort für sqluser-sample wird durch eine Ressourcenreferenz auf ein Secret namens secret-1 festgelegt.

    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. Kopieren Sie das unten aufgeführte YAML-Manifest in eine Datei mit dem Namen example-secret.yaml. Bearbeiten Sie vor dem Speichern den Wert für password. Damit wird secret-1, auf das im vorherigen Abschnitt verwiesen wurde, deklariert.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: [PASSWORD]
    
  3. Wenden Sie die Konfigurationen auf Ihren Cluster an:

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

    Ersetzen Sie dabei [CC_NAMESPACE] durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

    Config Connector erstellt die Cloud SQL-Instanz und einen Nutzer mit dem von Ihnen angegebenen Passwort. Dieser Vorgang kann einige Minuten dauern.

  4. Warten Sie einige Minuten und prüfen Sie mit gcloud, ob die Instanz verfügbar ist:

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

    Die Ausgabe sollte einen Server mit einem STATUS von RUNNABLE enthalten.

  5. Prüfen Sie, ob Sie mit gcloud eine Verbindung zur SQL-Instanz herstellen können:

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

    Sie werden zur Eingabe Ihres Passworts aufgefordert.

Bereinigen

Wenn Sie die Instanz nicht behalten möchten, löschen Sie die Cloud SQL-Instanz, den Nutzer und das Secret mit kubectl.

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

Ersetzen Sie dabei [CC_NAMESPACE] durch den Namespace, von dem aus Config Connector Ressourcen verwaltet.

Nächste Schritte