Configuration d'une connexion Apache Airflow à l'aide d'un secret AWS Secrets Manager - Amazon Managed Workflows for Apache Airflow

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'une connexion Apache Airflow à l'aide d'un secret AWS Secrets Manager

AWS Secrets Manager est un backend Apache Airflow alternatif pris en charge sur un environnement Amazon Managed Workflows pour Apache Airflow. Ce guide explique comment stocker en toute sécurité AWS Secrets Manager les secrets des variables Apache Airflow et d'une connexion Apache Airflow sur Amazon Managed Workflows pour Apache Airflow.

Note

Étape 1 : accorder à Amazon l'autorisation MWAA d'accéder aux clés secrètes de Secrets Manager

Le rôle d'exécution de votre MWAA environnement Amazon nécessite un accès en lecture à la clé secrète AWS Secrets Manager. La IAM politique suivante autorise l'accès en lecture-écriture à l'aide de la stratégie AWS gérée SecretsManagerReadWrite.

Pour associer la politique à votre rôle d'exécution
  1. Ouvrez la page Environnements sur la MWAA console Amazon.

  2. Choisissez un environnement.

  3. Choisissez votre rôle d'exécution dans le volet Autorisations.

  4. Choisissez Attach Policies (Attacher des politiques).

  5. Tapez SecretsManagerReadWrite dans le champ de texte Politiques de filtrage.

  6. Choisissez Attach policy (Attacher une politique).

Si vous ne souhaitez pas utiliser de politique d'autorisation AWS gérée, vous pouvez directement mettre à jour le rôle d'exécution de votre environnement pour autoriser n'importe quel niveau d'accès à vos ressources de Secrets Manager. Par exemple, la déclaration de politique suivante accorde un accès en lecture à tous les secrets que vous créez dans une AWS région spécifique dans 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": "*" } ] }

Deuxième étape : créer le backend Secrets Manager en tant qu'option de configuration d'Apache Airflow

La section suivante décrit comment créer une option de configuration Apache Airflow sur la MWAA console Amazon pour le AWS Secrets Manager backend. Si vous utilisez un paramètre de configuration du même nom dansairflow.cfg, la configuration que vous créez dans les étapes suivantes aura priorité et remplacera les paramètres de configuration.

  1. Ouvrez la page Environnements sur la MWAA console Amazon.

  2. Choisissez un environnement.

  3. Choisissez Modifier.

  4. Choisissez Suivant.

  5. Choisissez Ajouter une configuration personnalisée dans le volet des options de configuration d'Airflow. Ajoutez les paires clé-valeur suivantes :

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

    2. secrets.backend_kwargs: {"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"} Cela configure Apache Airflow pour rechercher les chaînes de connexion et les variables dans les chemins et les cheminsairflow/connections/*. airflow/variables/*

      Vous pouvez utiliser un modèle de recherche pour réduire le nombre d'APIappels qu'Amazon MWAA passe à Secrets Manager en votre nom. Si vous ne spécifiez aucun modèle de recherche, Apache Airflow recherche toutes les connexions et variables dans le backend configuré. En spécifiant un modèle, vous réduisez les chemins possibles recherchés par Apache Airflow. Cela réduit vos coûts lorsque vous utilisez Secrets Manager avec AmazonMWAA.

      Pour spécifier un modèle de recherche, spécifiez les variables_lookup_pattern paramètres connections_lookup_pattern et. Ces paramètres acceptent une RegEx chaîne en entrée. Par exemple, pour rechercher des secrets commençant partest, entrez ce qui suit pour secrets.backend_kwargs :

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

      Pour utiliser connections_lookup_pattern etvariables_lookup_pattern, vous devez installer apache-airflow-providers-amazon la version 7.3.0 ou supérieure. Pour plus d'informations sur la mise à jour des packages des fournisseurs vers des versions plus récentes, consultez. Spécifier les nouveaux packages de fournisseurs

  6. Choisissez Save (Enregistrer).

Troisième étape : générer une chaîne de AWS connexion URI Apache Airflow

Pour créer une chaîne de connexion, utilisez la touche « tab » de votre clavier pour mettre en retrait les paires clé-valeur dans l'objet Connection. Nous vous recommandons également de créer une variable pour l'extraobjet dans votre session shell. La section suivante explique les étapes à suivre pour générer une URI chaîne de connexion Apache Airflow pour un MWAA environnement Amazon à l'aide d'Apache Airflow ou d'un script Python.

Apache Airflow CLI

La session shell suivante utilise votre flux d'air local CLI pour générer une chaîne de connexion. Si vous ne l'avez pas CLI installé, nous vous recommandons d'utiliser le script Python.

  1. Ouvrez une session shell Python :

    python3
  2. Entrez la commande suivante :

    >>> import json
  3. Entrez la commande suivante :

    >>> from airflow.models.connection import Connection
  4. Créez une variable pour l'extraobjet dans votre session shell. Remplacez les valeurs d'échantillon dans YOUR_EXECUTION_ROLE_ARN avec le rôle d'exécutionARN, et la région dans YOUR_REGION (tels queus-east-1).

    >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'YOUR_REGION'})
  5. Créez l'objet de connexion. Remplacez la valeur d'échantillon myconn par le nom de la connexion Apache Airflow.

    >>> myconn = Connection(
  6. Utilisez la touche « tab » de votre clavier pour mettre en retrait chacune des paires clé-valeur suivantes dans votre objet de connexion. Remplacez les valeurs d'échantillon dans red.

    1. Spécifiez le type de AWS connexion :

      ... conn_id='aws',
    2. Spécifiez l'option de base de données Apache Airflow :

      ... conn_type='mysql',
    3. Spécifiez l'interface utilisateur d'Apache Airflow URL sur Amazon MWAA :

      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
    4. Spécifiez l'ID de clé d' AWS accès (nom d'utilisateur) pour vous connecter à Amazon MWAA :

      ... login='YOUR_AWS_ACCESS_KEY_ID',
    5. Spécifiez la clé d'accès AWS secrète (mot de passe) pour vous connecter à Amazon MWAA :

      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
    6. Spécifiez la variable de session extra shell :

      ... extra=extra
    7. Fermez l'objet de connexion.

      ... )
  7. Imprimez la URI chaîne de connexion :

    >>> myconn.get_uri()

    Vous devriez voir la URI chaîne de connexion dans la réponse :

    '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

Le script Python suivant ne nécessite pas Apache AirflowCLI.

  1. Copiez le contenu de l'exemple de code suivant et enregistrez-le localement sousmwaa_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. Remplacez les espaces réservés par red.

  3. Exécutez le script suivant pour générer une chaîne de connexion.

    python3 mwaa_connection.py

Étape 4 : ajouter les variables dans Secrets Manager

La section suivante décrit comment créer le secret d'une variable dans Secrets Manager.

Pour créer le secret
  1. Ouvrez la AWS Secrets Manager console.

  2. Choisissez Store a new secret (Stocker un nouveau secret).

  3. Choisissez Autre type de secret.

  4. Dans le volet Spécifiez les paires clé/valeur à stocker dans ce volet secret, choisissez Texte en clair.

  5. Ajoutez la valeur de la variable sous forme de texte brut au format suivant.

    "YOUR_VARIABLE_VALUE"

    Par exemple, pour spécifier un entier :

    14

    Par exemple, pour spécifier une chaîne :

    "mystring"
  6. Pour Clé de chiffrement, choisissez une option de AWS KMS clé dans la liste déroulante.

  7. Entrez un nom dans le champ de texte pour le nom du secret au format suivant.

    airflow/variables/YOUR_VARIABLE_NAME

    Par exemple :

    airflow/variables/test-variable
  8. Choisissez Suivant.

  9. Sur la page Configurer le secret, dans le volet Nom et description du secret, procédez comme suit.

    1. Dans Nom du secret, saisissez le nom de votre secret.

    2. (Facultatif) Dans Description, fournissez une description de votre secret.

    Choisissez Suivant.

  10. Dans le champ Configurer la rotation - facultatif, laissez les options par défaut et choisissez Next.

  11. Répétez ces étapes dans Secrets Manager pour toutes les variables supplémentaires que vous souhaitez ajouter.

  12. Sur la page Révision, vérifiez votre secret, puis choisissez Store.

Étape 5 : ajouter la connexion dans Secrets Manager

La section suivante explique comment créer le secret de votre chaîne de connexion URI dans Secrets Manager.

Pour créer le secret
  1. Ouvrez la AWS Secrets Manager console.

  2. Choisissez Store a new secret (Stocker un nouveau secret).

  3. Choisissez Autre type de secret.

  4. Dans le volet Spécifiez les paires clé/valeur à stocker dans ce volet secret, choisissez Texte en clair.

  5. Ajoutez la URI chaîne de connexion sous forme de texte brut au format suivant.

    YOUR_CONNECTION_URI_STRING

    Par exemple :

    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
    Avertissement

    Apache Airflow analyse chacune des valeurs de la chaîne de connexion. Vous ne devez pas utiliser de guillemets simples ou doubles, sinon la connexion sera analysée sous la forme d'une chaîne unique.

  6. Pour Clé de chiffrement, choisissez une option de AWS KMS clé dans la liste déroulante.

  7. Entrez un nom dans le champ de texte pour le nom du secret au format suivant.

    airflow/connections/YOUR_CONNECTION_NAME

    Par exemple :

    airflow/connections/myconn
  8. Choisissez Suivant.

  9. Sur la page Configurer le secret, dans le volet Nom et description du secret, procédez comme suit.

    1. Dans Nom du secret, saisissez le nom de votre secret.

    2. (Facultatif) Dans Description, fournissez une description de votre secret.

    Choisissez Suivant.

  10. Dans le champ Configurer la rotation - facultatif, laissez les options par défaut et choisissez Next.

  11. Répétez ces étapes dans Secrets Manager pour toutes les variables supplémentaires que vous souhaitez ajouter.

  12. Sur la page Révision, vérifiez votre secret, puis choisissez Store.

Exemple de code

Ressources

  • Pour plus d'informations sur la configuration des secrets de Secrets Manager à l'aide de la console et du AWS CLI, consultez la section Créer un secret dans le Guide de AWS Secrets Manager l'utilisateur.

  • Utilisez un script Python pour migrer un grand volume de variables et de connexions Apache Airflow vers Secrets Manager dans Move your Apache Airflow connections and variables to. AWS Secrets Manager

Quelle est la prochaine étape ?

  • Découvrez comment générer un jeton pour accéder à l'interface utilisateur d'Apache Airflow dansAccès à Apache Airflow.