Usar secretos para almacenar datos sensibles


Puedes usar un secreto 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 usa Config Connector los valores de Secret al configurar tus recursos de Google Cloud .

Información general

En esta sección se ofrece una descripción general sobre el uso de secretos con Config Connector.

Usar un secreto al crear un recurso

Puede usar los datos de un secreto al crear un recurso. En Transferir un secreto a un recurso, creas un secreto que contiene una contraseña y, a continuación, haces referencia al secreto de un usuario en una base de datos de Cloud SQL.

Actualizar secretos

Cuando aplicas una actualización a un Secret, Config Connector actualiza el recurso la próxima vez que concilie el estado que quieras. Por ejemplo, si actualizas el secreto que se utiliza como contraseña de un SQLUser, Config Connector actualizará la contraseña del usuario.

Eliminar secretos

Si eliminas un Secret que está usando un recurso, Config Connector no quitará la referencia del recurso al Secret. Por ejemplo, si creas un SQLUser con una contraseña que hace referencia a un Secret y, a continuación, eliminas el Secret, la contraseña permanecerá en el SQLUser.

Solución de problemas

Si creas un recurso que hace referencia a un Secret que no existe, Config Connector creará un DependencyNotFound o un DependencyInvalid Event.

Secretos y espacios de nombres de Kubernetes

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

Transferir un secreto a un recurso

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

Antes de empezar

Para completar estos pasos, necesitas lo siguiente:

  • Config Connector instalado en un clúster de Kubernetes
  • La API Admin de Cloud SQL habilitada en tu proyecto. Para confirmar que la API está habilitada, ejecuta el siguiente comando 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 Resource Manager, o con un comando gcloud.

API de Uso de Servicio

  1. Config Connector usa la API Service Usage para habilitar las APIs de servicio. Para llevar a cabo estos pasos, debes habilitar la API Uso de Servicio. Puedes habilitar esta API con la CLI de Google Cloud:
    gcloud services enable serviceusage.googleapis.com
  2. Copia el siguiente código 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
    

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

gcloud

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

gcloud services enable sqladmin.googleapis.com

Crear un Cloud SQL Server

  1. Copia el código YAML que aparece a continuación en un archivo llamado sql-server-example.yaml. De esta forma, se crea un servidor de Cloud SQL llamado sqlserver-1 y un usuario llamado sqluser-sample. La contraseña de sqluser-sample se define 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 código YAML que aparece a continuación en un archivo llamado example-secret.yaml. Edita el valor de password antes de guardar. Declara secret-1, a la que se hace referencia 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
    

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

    Config Connector crea la instancia de Cloud SQL y un usuario con la contraseña que has especificado. Este proceso puede tardar varios minutos.

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

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

    El resultado 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 pide la contraseña.

Eliminar los recursos utilizados

Si no quieres 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

Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

Siguientes pasos