Configura Secret Manager para tu entorno

Cloud Composer 1 | Cloud Composer 2

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

Configura 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.

Habilita la API de Secret Manager

Console

Habilita la API de Secret Manager.

Habilita la API

gcloud

Habilitar la API de Secret Manager.

gcloud services enable secretmanager.googleapis.com

Configura el control de acceso

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

Para ello, la cuenta de servicio que accede a los Secrets debe tener una función con el permiso secretmanager.versions.access. Por ejemplo, la función de accesorio secreto de Secret Manager incluye este permiso.

Puedes otorgar esta función a nivel del Secreto, el Proyecto, la Carpeta o la Organización.

Usa una de las siguientes opciones:

Habilita y configura el backend de Secret Manager

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

    Sección Clave Valor
    secrets backend airflow.providers.google.cloud.secrets.secret_manager.CloudSecretManagerBackend
  2. Para anular la configuración opcional, anula la siguiente opción de configuración de Airflow:

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

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

    • connections_prefix: especifica el prefijo del nombre del secreto que se leerá para obtener conexiones. La cantidad predeterminada es airflow-connections.
    • variables_prefix: especifica el prefijo del nombre del secreto que se leerá para obtener variables. La cantidad predeterminada es airflow-variables.
    • gcp_key_path: Ruta de acceso al archivo JSON de las credenciales de Google Cloud (si no se proporciona, se usa la cuenta de servicio predeterminada).
    • gcp_keyfile_dict: el diccionario JSON de credenciales de Google Cloud. Este campo y gcp_key_path son mutuamente excluyentes.
    • sep: Es el separador que se usa para concatenar connections_prefix y conn_id. Configuración predeterminada: -.
    • project_id: El ID del proyecto de Google Cloud en el que se almacenan los Secrets

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

Agrega conexiones y variables en Secret Manager

Para crear secretos, sigue los pasos que se describen en Crea secretos y versiones.

Variables

  • Se debe usar el formato [variable_prefix][sep][variable_name].
  • El valor predeterminado para [variable_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 conexiones

  • Se debe usar el formato [connection_prefix][sep][connection_name].
  • El valor predeterminado para [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

  • Debes usar la representación de URI. Por ejemplo, mysql://login:password@examplehost:9000.

  • El URI debe estar codificado como URL (codificado como porcentaje). Por ejemplo, una contraseña que tiene un símbolo de espacio debe estar codificada como URL de la siguiente manera: mysql://login:secret%20password@examplehost:9000.

Airflow tiene un método útil para generar el URI de conexión. Puedes encontrar un ejemplo de cómo codificar un URL complejo con elementos JSON adicionales en la documentación de Airflow.

Usa Secret Manager con Cloud Composer

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

Lee variables con plantillas de Jinja

Puedes usar Secret Manager para leer las variables con plantillas de Jinja para campos de operador con plantilla (resueltos en el momento de la ejecución).

Para la variable airflow-variables-secret_filename, haz lo siguiente:

file_name = 'var.value.secret_filename'

Lee variables con operadores personalizados y devoluciones de llamadas

También puedes usar Secret Manager para leer variables en operadores personalizados o métodos de devolución de llamada de operadores. La lectura de variables de DAG puede tener un impacto negativo en el rendimiento, por lo que debes usar plantillas de Jinja si deseas usar variables en tus DAG.

Por ejemplo, para la variable airflow-variables-secret_filename, haz lo siguiente:

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

Leer conexiones

A menos que escribas un operador personalizado, rara vez necesitas acceder directamente a las conexiones. La mayoría de los hooks reciben el nombre de conexión como su parámetro de creación de instancias, y deben recuperar las conexiones del backend del secreto automáticamente cuando se ejecutan las tareas.

Leer las conexiones directamente puede ser útil cuando escribes tu propio hook.

Por ejemplo, para la conexión airflow-connections-exampleConnection, usa lo siguiente:

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

BaseHook.get_connection muestra un objeto Connection. Es posible obtener la representación de string de URI de una conexión como esta:

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

¿Qué sigue?