Usar secretos para almacenar datos sensibles


Puedes usar un Secret para almacenar información de configuración sensible, como contraseñas y claves de acceso, en tu clúster de GKE. En esta página, se describe cómo Config Connector usa valores Secret cuando configura tus recursos de Google Cloud.

Descripción general

Esta sección presenta una descripción general sobre el uso de Secretos con el Conector de configuración.

Usa un secreto cuando creas un recurso

Puedes usar los datos dentro de un secreto cuando creas un recurso. En Pasa un secreto a un recurso, creas un secreto que contiene una contraseña y, luego, haces referencia al secreto para un usuario en una base de datos de Cloud SQL.

Actualización de secretos

Cuando aplicas una actualización a un secreto, el conector de configuración actualiza el recurso la próxima vez que concilia el estado deseado. Por ejemplo, si actualizas el secreto al que se hace referencia como la contraseña de un SQLUser, Config Connector actualizará la contraseña del usuario.

Eliminar secretos

Si borras un secreto que está en uso por un recurso, Config Connector no quitará la referencia del recurso al secreto. Por ejemplo, si creas un SQLUser con una contraseña que hace referencia a un secreto y, luego, lo borras, la contraseña permanecerá en el SQLUser.

Soluciona problemas

Si creas un recurso que hace referencia a un secreto que no existe, el conector de configuración creará un evento DependencyNotFound o DependencyInvalid.

Secrets y espacios de nombres de Kubernetes

Debido a que Kubernetes no permite el acceso a los secretos en los espacios de nombres, si usas el mismo valor de secreto para los recursos de diferentes espacios de nombres, debes aplicar secretos en cada espacio de nombres.

Pasar un secreto a un recurso

En esta sección, crearás un servidor de Cloud SQL y establecerás la contraseña predeterminada del usuario con un secreto.

Antes de comenzar

Para completar estos pasos, necesitas lo siguiente:

  • Config Connector instalado en un clúster de Kubernetes
  • La API de Administrador de Cloud SQL habilitada en tu proyecto. Si deseas confirmar que la API está habilitada, ejecuta el siguiente comando de gcloud:

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

    Si el comando imprime Listed 0 items., debes habilitar la API. Puedes habilitar la API con Config Connector y la API de Resource Manager, o un comando de gcloud.

API de Service Usage

  1. Config Connector usa la API de Service Usage para habilitar las APIs de servicio. Para realizar estos pasos, debes habilitar la API de Service Usage. Puedes habilitar esta API con Google Cloud CLI:
    gcloud services enable serviceusage.googleapis.com
  2. Copia el siguiente YAML en un archivo llamado enable-sql.yaml

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. Aplica enable-sql.yaml a tu clúster con kubectl:

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

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

gcloud

Para habilitar la API de SQL Admin con Google Cloud CLI, ejecuta el siguiente comando:

gcloud services enable sqladmin.googleapis.com

Crea un servidor de Cloud SQL

  1. Copia el YAML a continuación en un archivo llamado sql-server-example.yaml. Esto crea un servidor de Cloud SQL llamado sqlserver-1 y un usuario llamado sqluser-sample. La contraseña para sqluser-sample se establece mediante una referencia de recurso a un secreto llamado 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 el YAML a continuación en un archivo llamado example-secret.yaml. Edita el valor de password antes de guardar. Esto declara secret-1, mencionado en la sección anterior.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. Aplica las configuraciones a tu clúster.

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

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

    El conector de configuración crea la instancia de Cloud SQL y un usuario con la contraseña que especificaste. Esto podría llevar varios minutos.

  4. Espera varios minutos y confirma que la instancia está disponible:

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

    La salida debe incluir un servidor con un STATUS de RUNNABLE.

  5. Confirma que puedes conectarte a la instancia de SQL:

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

    Se te solicita tu contraseña.

Realice una limpieza

Si no deseas conservar la instancia, elimina la instancia de Cloud SQL, el usuario y el secreto con kubectl.

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

Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

¿Qué sigue?