Usar secretos para almacenar datos sensibles

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

Resumen

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.

Secretos y multiples proyectos

Debido a que Kubernetes no permite el acceso a los secretos en los espacios de nombres, si estás usando el conector de configuración para administrar múltiples proyectos, debes aplicar los secretos en cada espacio de nombres que se asigna a un proyecto.

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 Resource Manager para habilitar las API de servicio. Para seguir estos pasos, debes habilitar la API de Resource Manager. Puedes habilitar esta API con el siguiente comando de “gcloud”.
    gcloud services enable cloudresourcemanager.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 Administrador de SQL con gcloud, 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 con gcloud.

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

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

    Se te solicita tu contraseña.

Limpia

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?