Utilizzo dei secret per archiviare i dati sensibili

Puoi utilizzare un secret per archiviare informazioni di configurazione sensibili, come password e chiavi di accesso, nel tuo cluster GKE. Questa pagina descrive come Config Connector utilizza i valori dei secret durante la configurazione delle risorse Google Cloud .

Panoramica

Questa sezione presenta una panoramica sull'utilizzo dei secret con Config Connector.

Sicurezza e crittografia dei secret at-rest

Poiché i secret di Kubernetes contengono credenziali e stringhe di connessione sensibili, attiva la crittografia dei secret a livello di applicazione sul tuo cluster. GKE cripta i secret at-rest per impostazione predefinita. La crittografia dei secret a livello di applicazione aggiunge un ulteriore livello di sicurezza utilizzando la crittografia envelope di Cloud Key Management Service.

Inoltre, utilizza controllo dell'accesso basato su ruoli (RBAC) per limitare l'accesso in lettura ai secret solo agli amministratori del cluster autorizzati. Applica la stessa limitazione alle risorse Config Connector che archiviano valori sensibili nei campi status, ad esempio IAMServiceAccountKey.

Utilizzo di un secret durante la creazione di una risorsa

Puoi utilizzare i dati all'interno di un secret quando crei una risorsa. In Passaggio di un secret a una risorsa, crei un secret che contiene una password, quindi fai riferimento al secret per un utente in un database Cloud SQL.

Aggiornamento dei secret

Quando applichi un aggiornamento a un secret, Config Connector aggiorna la risorsa alla successiva riconciliazione dello stato desiderato. Ad esempio, se aggiorni il secret a cui viene fatto riferimento come password per un SQLUser, Config Connector aggiornerà la password dell'utente.

Eliminazione dei secret

Se elimini un secret utilizzato da una risorsa, Config Connector non rimuoverà il riferimento della risorsa al secret. Ad esempio, se crei un SQLUser con una password che fa riferimento a un Secret e poi elimini il Secret, la password rimarrà nell'SQLUser.

Risoluzione dei problemi

Se crei una risorsa che fa riferimento a un secret che non esiste, Config Connector creerà un evento DependencyNotFound o DependencyInvalid.

Secret e spazi dei nomi Kubernetes

Poiché Kubernetes non consente l'accesso ai secret tra spazi dei nomi, se utilizzi lo stesso valore del secret per le risorse di spazi dei nomi diversi, devi applicare i secret in ogni spazio dei nomi.

Passaggio di un secret a una risorsa

In questa sezione, creerai un server Cloud SQL e imposterai la password dell'utente predefinito con un secret.

Prima di iniziare

Per completare questi passaggi, devi disporre di quanto segue:

  • Config Connector installato su un cluster Kubernetes
  • L'API Cloud SQL Admin abilitata nel tuo progetto. Per verificare che l'API sia abilitata, esegui il seguente comando gcloud:

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

    Se il comando stampa Listed 0 items., devi abilitare l'API. Puoi abilitare l'API con Config Connector e l'API Resource Manager o un comando gcloud.

API Service Usage

  1. Config Connector utilizza l'API Service Usage per abilitare le API di servizio. Per eseguire questi passaggi, devi abilitare l'API Service Usage. Puoi abilitare questa API utilizzando Google Cloud CLI:
    gcloud services enable serviceusage.googleapis.com
  2. Copia il seguente YAML in un file denominato enable-sql.yaml

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. Applica enable-sql.yaml al tuo cluster con kubectl:

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

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

gcloud

Per abilitare l'API SQL Admin con Google Cloud CLI, esegui questo comando:

gcloud services enable sqladmin.googleapis.com

Creazione di un'istanza Cloud SQL Server

  1. Copia il codice YAML riportato di seguito in un file denominato sql-server-example.yaml. In questo modo viene creato un server Cloud SQL denominato sqlserver-1 e un utente denominato sqluser-sample. La password per sqluser-sample è impostata da un riferimento alla risorsa a un secret denominato 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. Copia il codice YAML riportato di seguito in un file denominato example-secret.yaml. Modifica il valore di password prima di salvare. In questo modo viene dichiarato secret-1, a cui si fa riferimento nella sezione precedente.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. Applica le configurazioni al cluster.

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

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

    Config Connector crea l'istanza Cloud SQL e un utente con la password specificata. L'operazione potrebbe richiedere alcuni minuti.

  4. Attendi alcuni minuti e verifica che l'istanza sia disponibile:

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

    L'output dovrebbe includere un server con un STATUS di RUNNABLE.

  5. Conferma che puoi connetterti all'istanza SQL:

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

    Ti viene chiesta la password.

Pulizia

Se non vuoi conservare l'istanza, elimina l'istanza Cloud SQL, l'utente e il secret con kubectl.

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

Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

Passaggi successivi