Configuración de una conexión Apache Airflow mediante un secreto AWS Secrets Manager - Amazon Managed Workflows para Apache Airflow

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración de una conexión Apache Airflow mediante un secreto AWS Secrets Manager

AWS Secrets Manager es un backend alternativo de Apache Airflow compatible en un entorno Amazon Managed Workflows para Apache Airflow. En este tema se muestra cómo almacenar de AWS Secrets Manager forma segura los secretos de las variables de Apache Airflow y una conexión de Apache Airflow en Amazon Managed Workflows for Apache Airflow.

nota

Primer paso: otorgar permiso a Amazon MWAA para acceder a las claves secretas de Secrets Manager

El rol de ejecución de su entorno de Amazon MWAA necesita acceso de lectura a la clave secreta de AWS Secrets Manager. La siguiente política de IAM permite el acceso de lectura y escritura mediante la política administrada. AWS SecretsManagerReadWrite

Pasos para asociar la política a su rol de ejecución
  1. Abra la página Entornos en la consola de Amazon MWAA.

  2. Seleccione un entorno.

  3. Elija su rol de ejecución en el panel Permisos.

  4. Seleccione Asociar políticas.

  5. Escriba SecretsManagerReadWrite en el campo de texto Filtrar políticas.

  6. Elija Asociar política.

Si no desea utilizar una política de permisos AWS gestionados, puede actualizar directamente el rol de ejecución de su entorno para permitir cualquier nivel de acceso a sus recursos de Secrets Manager. Por ejemplo, la siguiente declaración de política otorga acceso de lectura a todos los secretos que cree en una AWS región específica en Secrets Manager.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:012345678910:secret:*" }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }

Segundo paso: crear el backend de Secrets Manager como opción de configuración de Apache Airflow

En la siguiente sección se describe cómo crear una opción de configuración de Apache Airflow en la consola de Amazon MWAA para el backend. AWS Secrets Manager Si utiliza un ajuste de configuración con el mismo nombre en airflow.cfg, la configuración que cree en los siguientes pasos tendrá prioridad y anulará los ajustes de configuración.

  1. Abra la página Entornos en la consola de Amazon MWAA.

  2. Seleccione un entorno.

  3. Elija Editar.

  4. Elija Siguiente.

  5. Seleccione Agregar configuración personalizada en el panel Opciones de configuración de Airflow. Agregue los siguientes pares clave-valor:

    1. secrets.backend: airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend

    2. secrets.backend_kwargs: {"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"} Esto configura Apache Airflow para que se puedan buscar cadenas de conexión y variables en rutas de airflow/connections/* y airflow/variables/*.

      Puede utilizar un patrón de búsqueda para reducir el número de llamadas a la API que Amazon MWAA realiza a Secrets Manager en su nombre. Si no especifica un patrón de búsqueda, Apache Airflow busca todas las conexiones y variables en el backend configurado. Al especificar un patrón, se reducen las posibles rutas que busca Apache Airflow. Así de reducen los costos relacionados con el uso de Secrets Manager con Amazon MWAA.

      Para especificar un patrón de búsqueda, especifique los parámetros connections_lookup_pattern y variables_lookup_pattern. Estos parámetros aceptan una RegEx cadena como entrada. Por ejemplo, para buscar secretos que comiencen por test, introduzca lo siguiente para secrets.backend_kwargs:

      { "connections_prefix": "airflow/connections", "connections_lookup_pattern": "^test", "variables_prefix" : "airflow/variables", "variables_lookup_pattern": "^test" }
      nota

      Para usar connections_lookup_pattern y variables_lookup_pattern, debe instalar la versión 7.3.0 o superior de apache-airflow-providers-amazon. Para obtener más información sobre la actualización de los paquetes de proveedores a versiones más recientes, consulte Especificar paquetes de proveedores más nuevos.

  6. Seleccione Guardar.

Paso tres: generar una cadena URI de AWS conexión de Apache Airflow

Para crear una cadena de conexión, utilice la tecla “tab” del teclado para aplicar los pares clave-valor en el objeto Conexión. También recomendamos crear una variable para el objeto extra en la sesión del intérprete de comandos. En la siguiente sección, se explican los pasos para generar una cadena URI de conexión a Apache Airflow para un entorno de Amazon MWAA mediante Apache Airflow o un script de Python.

Apache Airflow CLI

La siguiente sesión del intérprete de comandos utiliza la CLI de Airflow local para generar una cadena de conexión. Si no tiene la CLI instalada, le recomendamos que utilice el script de Python.

  1. Abra una sesión del intérprete de comandos de Python:

    python3
  2. Escriba el siguiente comando:

    >>> import json
  3. Escriba el siguiente comando:

    >>> from airflow.models.connection import Connection
  4. Cree una variable para el objeto extra en la sesión del intérprete de comandos. Sustituya los valores de YOUR_EXECUTION_ROLE_ARN la muestra por el ARN de la función de ejecución y la región de YOUR_REGION (por ejemplo). us-east-1

    >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'YOUR_REGION'})
  5. Cree el objeto de conexión. Sustituya el valor de muestra en myconn por el nombre de la conexión de Apache Airflow.

    >>> myconn = Connection(
  6. Utilice la tecla “tab” del teclado para aplicar cada uno de los siguientes pares clave-valor del objeto de conexión. Sustituya los valores de la muestra. red

    1. Especifique el tipo de AWS conexión:

      ... conn_id='aws',
    2. Especifique la opción de base de datos de Apache Airflow:

      ... conn_type='mysql',
    3. Especifique la URL de la interfaz de usuario de Apache Airflow en Amazon MWAA:

      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
    4. Especifique el ID de la clave de AWS acceso (nombre de usuario) para iniciar sesión en Amazon MWAA:

      ... login='YOUR_AWS_ACCESS_KEY_ID',
    5. Especifique la clave de acceso AWS secreta (contraseña) para iniciar sesión en Amazon MWAA:

      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
    6. Especifique la variable de sesión del intérprete de comandos de extra:

      ... extra=extra
    7. Cierre el objeto de conexión.

      ... )
  7. Imprima la cadena URI de conexión:

    >>> myconn.get_uri()

    Debería ver la cadena URI de conexión en la respuesta:

    'mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1'
Python script

El siguiente script de Python no requiere la CLI de Apache Airflow.

  1. Copie el contenido del código de ejemplo siguiente y guárdelo localmente como mwaa_connection.py.

    import urllib.parse conn_type = 'YOUR_DB_OPTION' host = 'YOUR_MWAA_AIRFLOW_UI_URL' port = 'YOUR_PORT' login = 'YOUR_AWS_ACCESS_KEY_ID' password = 'YOUR_AWS_SECRET_ACCESS_KEY' role_arn = urllib.parse.quote_plus('YOUR_EXECUTION_ROLE_ARN') region_name = 'YOUR_REGION' conn_string = '{0}://{1}:{2}@{3}:{4}?role_arn={5}&region_name={6}'.format(conn_type, login, password, host, port, role_arn, region_name) print(conn_string)
  2. Sustituya los marcadores de posición. red

  3. Ejecute el siguiente script para generar una cadena de conexión.

    python3 mwaa_connection.py

Paso cuatro: añadir las variables en Secrets Manager

En la siguiente sección se describe cómo crear el secreto de una variable en Secrets Manager.

Pasos para crear el secreto
  1. Abra la consola de AWS Secrets Manager.

  2. Elija Almacenar un secreto nuevo.

  3. Elija Otro tipo de secreto.

  4. En el panel Especificar los pares clave-valor para almacenarlos en este secreto, elija Texto simple.

  5. Añada el valor de la variable como Texto simple en el siguiente formato.

    "YOUR_VARIABLE_VALUE"

    Por ejemplo, para especificar un número entero:

    14

    Por ejemplo, para especificar una cadena:

    "mystring"
  6. Para la clave de cifrado, elija una opción de AWS KMS clave de la lista desplegable.

  7. Introduzca un nombre en el campo de texto para el nombre del secreto con el formato que se indica a continuación.

    airflow/variables/YOUR_VARIABLE_NAME

    Por ejemplo:

    airflow/variables/test-variable
  8. Elija Next (Siguiente).

  9. En la página Configurar secreto, en el panel Nombre y descripción del secreto, haga lo siguiente.

    1. En Nombre del secreto, proporcione un nombre para el secreto.

    2. (Opcional) En Descripción, escriba una descripción del nombre de su secreto.

    Elija Next (Siguiente).

  10. En Configurar la rotación. Opcional, deje las opciones predeterminadas y seleccione Siguiente.

  11. Repita estos pasos en Secrets Manager para cualquier variable adicional que desee añadir.

  12. En la página Revisar, revise los detalles de su secreto y, a continuación, elija Almacenar.

Paso cinco: añadir la conexión en Secrets Manager

En la siguiente sección se describe cómo crear el secreto para el URI de la cadena de conexión en Secrets Manager.

Pasos para crear el secreto
  1. Abra la consola de AWS Secrets Manager.

  2. Elija Almacenar un secreto nuevo.

  3. Elija Otro tipo de secreto.

  4. En el panel Especificar los pares clave-valor para almacenarlos en este secreto, elija Texto simple.

  5. Añada la cadena URI de conexión como Texto simple con el formato que se indica a continuación.

    YOUR_CONNECTION_URI_STRING

    Por ejemplo:

    mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1
    aviso

    Apache Airflow analiza cada uno de los valores de la cadena de conexión. No debe usar comillas simples ni dobles, pues al hacerlo se analizaría la conexión como una sola cadena.

  6. Para la clave de cifrado, elija una opción de AWS KMS clave de la lista desplegable.

  7. Introduzca un nombre en el campo de texto para el nombre del secreto con el formato que se indica a continuación.

    airflow/connections/YOUR_CONNECTION_NAME

    Por ejemplo:

    airflow/connections/myconn
  8. Elija Next (Siguiente).

  9. En la página Configurar secreto, en el panel Nombre y descripción del secreto, haga lo siguiente.

    1. En Nombre del secreto, proporcione un nombre para el secreto.

    2. (Opcional) En Descripción, escriba una descripción del nombre de su secreto.

    Elija Next (Siguiente).

  10. En Configurar la rotación. Opcional, deje las opciones predeterminadas y seleccione Siguiente.

  11. Repita estos pasos en Secrets Manager para cualquier variable adicional que desee añadir.

  12. En la página Revisar, revise los detalles de su secreto y, a continuación, elija Almacenar.

Código de muestra

Recursos

Siguientes pasos