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
  • Les secrets que vous créez vous seront facturés. Pour plus d'informations sur les tarifs de Secrets Manager, consultez la section AWS Tarification.

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

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

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

  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 console Amazon MWAA 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 console Amazon MWAA.

  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"} Ceci 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'appels d'API qu'Amazon MWAA envoie à 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 Amazon MWAA.

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

Troisième étape : générer une chaîne d'URI de AWS connexion 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 chaîne d'URI de connexion Apache Airflow pour un environnement Amazon MWAA à l'aide d'Apache Airflow ou d'un script Python.

Apache Airflow CLI

La session shell suivante utilise votre CLI Airflow locale pour générer une chaîne de connexion. Si la CLI n'est pas installée, 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'exemple dans YOUR_EXECUTION_ROLE_ARN par l'ARN du rôle d'exécution et par la région dans YOUR_REGION (telle que). us-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 par du rouge.

    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'URL de l'interface utilisateur Apache Airflow 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 chaîne URI de connexion :

    >>> myconn.get_uri()

    Vous devriez voir la chaîne d'URI 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 la CLI Apache Airflow.

  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 du rouge.

  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 en 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 du nom 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 décrit comment créer le secret pour l'URI de votre chaîne de connexion 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 chaîne d'URI de connexion en 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 du nom 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.