Configurar Secret Manager para tu entorno

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

En esta página se muestra cómo usar Secret Manager para almacenar de forma segura conexiones y secretos de Airflow.

Configurar Secret Manager para tu entorno

En esta sección se explica cómo configurar Secret Manager para que puedas usar secretos con tu entorno de Cloud Composer.

Habilitar la API Secret Manager

Consola

Enable the Secret Manager API.

Enable the API

gcloud

Enable the Secret Manager API:

gcloud services enable secretmanager.googleapis.com

Configurar el control de acceso

Debe configurar el control de acceso para que Airflow pueda acceder a los secretos almacenados en Secret Manager.

Para ello, la cuenta de servicio que acceda a los secretos debe tener un rol con el permiso secretmanager.versions.access. Por ejemplo, el rol Permiso para acceder a los recursos de Secret Manager incluye este permiso.

Puedes asignar este rol a nivel de secreto, proyecto, carpeta u organización.

Usa una de las siguientes opciones:

Habilitar y configurar el backend de Secret Manager

  1. Anula la siguiente opción de configuración de Airflow:

    Sección Clave Valor
    secrets backend airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
  2. (Cloud Composer 2.11.3 con Airflow 2.10.2 y versiones posteriores) Asegúrate de que la opción de configuración de [secrets]backends_order Airflow especifique un orden de búsqueda de secretos que tenga un backend de secretos custom en él. El valor predeterminado de esta opción ya contiene este valor.

    Sección Clave Valor
    secrets backends_order custom,environment_variable,metastore (predeterminado)
  3. Añade ajustes opcionales anulando la siguiente opción de configuración de Airflow:

    Sección Clave Valor
    secrets backend_kwargs Consulta la siguiente descripción.

    El valor de backend_kwargs es la representación JSON del objeto backend_kwargs con los siguientes campos:

    • connections_prefix: prefijo del nombre del secreto que se debe leer para obtener las conexiones. El valor predeterminado es airflow-connections.
    • variables_prefix: prefijo del nombre del secreto que se debe leer para obtener las variables. El valor predeterminado es airflow-variables.
    • gcp_key_path: ruta al archivo JSON de las Google Cloud credenciales (si no se proporciona, se usa la cuenta de servicio predeterminada).
    • gcp_keyfile_dict: Google Cloud diccionario JSON de credenciales. Es mutuamente exclusivo con gcp_key_path.
    • sep: separador que se usa para concatenar connections_prefix y conn_id. El valor predeterminado es -.
    • project_id: Google Cloud ID del proyecto en el que se almacenan los secretos.

    Por ejemplo, el valor de backend_kwargs puede ser: {"project_id": "<project id>", "connections_prefix":"example-connections", "variables_prefix":"example-variables", "sep":"-"}.

Añadir conexiones y variables en Secret Manager

Crea secretos siguiendo los pasos que se indican en Crear secretos y versiones.

Variables

  • Debe usar el formato [variables_prefix][sep][variable_name].
  • El valor predeterminado de [variables_prefix] es airflow-variables.
  • El separador predeterminado [sep] es -.

Por ejemplo, si el nombre de la variable es example-var, el nombre del secreto es airflow-variables-example-var.

Nombres de las conexiones

  • Debe usar el formato [connection_prefix][sep][connection_name].
  • El valor predeterminado de [connection_prefix] es airflow-connections.
  • El separador predeterminado [sep] es -.

Por ejemplo, si el nombre de la conexión es exampleConnection, el nombre del secreto es airflow-connections-exampleConnection.

Valores de conexión

  • Debe usar la representación de URI. Por ejemplo, postgresql://login:secret@examplehost:9000.

  • El URI debe estar codificado como URL (codificado con porcentajes). Por ejemplo, una contraseña que contenga un espacio debe codificarse como URL de la siguiente manera: postgresql://login:secret%20password@examplehost:9000.

Airflow tiene un método de conveniencia para generar URIs de conexión. Puedes consultar un ejemplo de cómo codificar una URL compleja con extras JSON en la documentación de Airflow.

Usar Secret Manager con Cloud Composer

Al obtener variables y conexiones, Cloud Composer comprueba primero Secret Manager. Si no se encuentra la variable o la conexión solicitada, Cloud Composer comprueba las variables de entorno y la base de datos de Airflow.

Leer variables con plantillas Jinja

Puedes usar Secret Manager para leer variables con plantillas Jinja en campos de operadores con plantillas (se resuelven en el tiempo de ejecución).

Para el secreto de airflow-variables-secret_filename:

file_name = '{{var.value.secret_filename}}'

Leer variables usando operadores y retrollamadas personalizados

También puedes usar Secret Manager para leer variables en operadores personalizados o métodos de retrollamada de operadores. Leer variables desde dentro de los DAGs puede afectar negativamente al rendimiento, por lo que te recomendamos que uses plantillas Jinja si quieres usar variables en tus DAGs.

Por ejemplo, para el secreto airflow-variables-secret_filename:

from airflow.models.variable import Variable
file_name = Variable.get('secret_filename')

Leer conexiones

A menos que estés escribiendo un operador personalizado, rara vez tendrás que acceder a las conexiones directamente. La mayoría de los hooks obtienen el nombre de la conexión como parámetro de instanciación y deben recuperar las conexiones del backend secreto automáticamente cuando se ejecutan las tareas.

Leer las conexiones directamente puede ser útil al escribir tu propio hook.

Por ejemplo, en el caso de la conexión airflow-connections-exampleConnection:

from airflow.hooks.base_hook import BaseHook
exampleConnection = BaseHook.get_connection('exampleConnection')

BaseHook.get_connection devuelve un objeto Connection. Puedes obtener la representación de cadena URI de una conexión de la siguiente manera:

exampleConnectionUri = BaseHook.get_connection('exampleConnection').get_uri()

Siguientes pasos