

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 de Apache Airflow mediante un secreto AWS Secrets Manager
<a name="connections-secrets-manager"></a>

AWS Secrets Manager es un backend alternativo de Apache Airflow compatible en un entorno Amazon Managed Workflows para Apache Airflow. En este tema se explica 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**  
Los secretos creados tendrán un costo. Para obtener información sobre el precio de Secrets Manager, consulte [precios de AWS](https://aws.amazon.com/secrets-manager/pricing/).
AWS Amazon MWAA también admite [Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store) como backend de secretos. Para obtener más información, consulte la [documentación de Amazon Provider Package](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/secrets-backends/aws-ssm-parameter-store.html).

**Contents**
+ [

## Primer paso: otorgar permiso a Amazon MWAA para acceder a las claves secretas de Secrets Manager
](#connections-sm-policy)
+ [

## Segundo paso: crear el backend de Secrets Manager como opción de configuración de Apache Airflow
](#connections-sm-aa-configuration)
+ [

## Paso tres: generar una cadena URI de AWS conexión de Apache Airflow
](#connections-sm-aa-uri)
+ [

## Paso cuatro: añadir las variables en Secrets Manager
](#connections-sm-createsecret-variables)
+ [

## Paso cinco: añadir la conexión en Secrets Manager
](#connections-sm-createsecret-connection)
+ [

## Código de muestra
](#connections-sm-samples)
+ [

## Recursos
](#connections-sm-blogs)
+ [

## Siguientes pasos
](#connections-sm-next-up)

## Primer paso: otorgar permiso a Amazon MWAA para acceder a las claves secretas de Secrets Manager
<a name="connections-sm-policy"></a>

El [rol de ejecución](mwaa-create-role.md) 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](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/SecretsManagerReadWrite$jsonEditor)

**Pasos para asociar la política a su rol de ejecución**

1. Abra la página [Entornos](https://console.aws.amazon.com/mwaa/home#/environments) en la consola de Amazon MWAA.

1. Seleccione un entorno.

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

1. Seleccione **Asociar políticas**.

1. Escriba `SecretsManagerReadWrite` en el campo de texto **Filtrar políticas**.

1. 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 un archivo específico Región de AWS de Secrets Manager.

------
#### [ JSON ]

****  

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

------

## Segundo paso: crear el backend de Secrets Manager como opción de configuración de Apache Airflow
<a name="connections-sm-aa-configuration"></a>

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 usa una 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](https://console.aws.amazon.com/mwaa/home#/environments) en la consola de Amazon MWAA.

1. Seleccione un entorno.

1. Elija **Editar**.

1. Elija **Siguiente**.

1. 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`**

   1. **`secrets.backend_kwargs`**: Con **`{"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"}`**, se configura Apache Airflow para poder buscar cadenas de conexión y variables en rutas de `airflow/connections/*` y `airflow/variables/*`.

      Puede utilizar un [patrón de búsqueda](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/secrets-backends/aws-secrets-manager.html#optional-lookup) 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 [Archivo de restricciones](connections-packages.md#connections-packages-constraints).

1. Seleccione **Save**.

## Paso tres: generar una cadena URI de AWS conexión de Apache Airflow
<a name="connections-sm-aa-uri"></a>

Para crear una cadena de conexión, utilice la tecla “tab” del teclado para aplicar los pares clave-valor en el objeto [Conexión](https://airflow.apache.org/docs/stable/howto/connection/index.html). También recomendamos crear una variable para el objeto `extra` en la sesión del shell. En la siguiente sección, se explican los pasos para [generar una cadena URI de conexión a Apache Airflow](https://airflow.apache.org/docs/apache-airflow/stable/howto/connection.html#generating-a-connection-uri) para un entorno de Amazon MWAA mediante Apache Airflow o un script de Python.

------
#### [ Apache Airflow CLI ]

La siguiente sesión del shell 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 shell de Python:

   ```
   python3
   ```

1. Introduzca el siguiente comando:

   ```
   >>> import json
   ```

1. Introduzca el siguiente comando:

   ```
   >>> from airflow.models.connection import Connection
   ```

1. Cree una variable para el objeto `extra` en la sesión del shell. Sustituya los valores de *YOUR\$1EXECUTION\$1ROLE\$1ARN* la muestra por el ARN de la función de ejecución y la región de *us-east-1* (por ejemplo). `us-east-1`

   ```
   >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'us-east-1'})
   ```

1. 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(
   ```

1. 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',
      ```

   1. Especifique la opción de base de datos de Apache Airflow:

      ```
      ... conn_type='mysql',
      ```

   1. 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',
      ```

   1. 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',
      ```

   1. Especifique la clave de acceso AWS secreta (contraseña) para iniciar sesión en Amazon MWAA:

      ```
      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
      ```

   1. Especifique la variable de sesión de shell de `extra`:

      ```
      ... extra=extra
      ```

   1. Cierre el objeto de conexión.

      ```
      ... )
      ```

1. Imprima la cadena URI de conexión:

   ```
   >>> myconn.get_uri()
   ```

   Consulte 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 = 'us-east-1'
   								
   								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)
   ```

1. Sustituya los marcadores de posición. *red*

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

   ```
   python3 mwaa_connection.py
   ```

------

## Paso cuatro: añadir las variables en Secrets Manager
<a name="connections-sm-createsecret-variables"></a>

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](https://console.aws.amazon.com/secretsmanager/home#/environments).

1. Elija **Almacenar un secreto nuevo**.

1. Elija **Otro tipo de secreto**.

1. En el panel **Especifique los key/value pares que se van a almacenar en este secreto**, elija **Plaintext**.

1. 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"
   ```

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

1. 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
   ```

1. Elija **Siguiente**.

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

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

   Elija **Siguiente**.

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

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

1. 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
<a name="connections-sm-createsecret-connection"></a>

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](https://console.aws.amazon.com/secretsmanager/home#/environments).

1. Elija **Almacenar un secreto nuevo**.

1. Elija **Otro tipo de secreto**.

1. En el panel **Especifique los key/value pares que se van a almacenar en este secreto**, elija **Plaintext**.

1. 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** use comillas simples ni dobles, pues al hacerlo se analizaría la conexión como una sola cadena.

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

1. 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
   ```

1. Elija **Siguiente**.

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

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

   Elija **Siguiente**.

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

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

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

## Código de muestra
<a name="connections-sm-samples"></a>
+ Aprenda a usar la clave secreta para la conexión de Apache Airflow (`myconn`) en esta página usando el código de ejemplo que se encuentra en [Uso de una clave secreta en AWS Secrets Manager para una conexión de Apache Airflow](samples-secrets-manager.md).
+ Aprenda a usar la clave secreta para la variable de Apache Airflow (`test-variable`) en esta página usando el código de ejemplo que se encuentra en [Uso de una clave secreta en AWS Secrets Manager para una variable de Apache Airflow](samples-secrets-manager-var.md).

## Recursos
<a name="connections-sm-blogs"></a>
+ Para obtener más información sobre cómo configurar los secretos de Secrets Manager mediante la consola y el AWS CLI, consulte [Crear un secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la *Guía del AWS Secrets Manager usuario*.
+ Utilice un script de Python para migrar un gran volumen de variables y conexiones de Apache Airflow a Secrets Manager en [Mueva sus conexiones y variables de Apache Airflow a AWS Secrets Manager](https://aws.amazon.com/blogs/opensource/move-apache-airflow-connections-variables-aws-secrets-manager/).

## Siguientes pasos
<a name="connections-sm-next-up"></a>
+ Aprenda a generar un token para acceder a la interfaz de usuario de Apache Airflow en [Acceso a Apache Airflow](access-airflow-ui.md).