Comment résoudre les problèmes d'intégration de Secrets Manager avec Amazon MWAA ?

Lecture de 5 minute(s)
0

Je souhaite résoudre les problèmes d'intégration d'AWS Secrets Manager avec Amazon Managed Workflows pour Apache Airflow (Amazon MWAA).

Brève description

Pour stocker les connexions et les variables airflow, un secret Secrets Manager peut être configuré en tant que backend de secrets pour Amazon MWAA. Des configurations airflow incorrectes peuvent entraîner des problèmes lors de la création ou de la mise à jour d'un environnement Amazon MWAA.

Les causes courantes des problèmes d'intégration de Secrets Manager avec Amazon MWAA sont les suivantes :

  • Le rôle Amazon MWAA ne dispose pas des autorisations requises pour Secrets Manager.
  • Les sous-réseaux privés Amazon MWAA ne disposent pas des routes appropriées vers Secrets Manager.
  • Les options de configuration airflow sont incorrectes pour Secrets Manager. Par exemple, le nom de la classe est incorrect. La clé Nom de classe doit être secrets.backend et la valeur doit être airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend.
  • Le rôle Amazon MWAA ne dispose pas d'autorisations pour la clé AWS Key Management Service (AWS KMS) utilisée pour le chiffrement de Secrets Manager.

Résolution

Remédiez à vos problèmes d'intégration de Secrets Manager avec Amazon MWAA en vous basant sur les scénarios suivants :

Amazon MWAA n'est pas dans un état Disponible

Les raisons courantes pour lesquelles votre environnement Amazon MWAA n'est pas dans l'état Disponible sont les suivantes :

  • Options de configuration airflow incorrectes avec la classe de backend Secrets sur Amazon MWAA.
  • L’accès réseau vers Secrets Manager est indisponible.
  • Les autorisations sont manquantes pour Secrets Manager.
  • La connexion Airflow aws_default a été modifiée.

Pour résoudre ces problèmes, procédez comme suit :

  1. Pour vérifier que le package du fournisseur Amazon est installé, procédez comme suit :
    Ouvrez l'interface utilisateur airflow.
    Dans l'onglet Administrateur, sélectionnez Fournisseur.
    Consultez le package du fournisseur apache-airflow-providers-amazon.
  2. Vérifiez que la classe de configuration airflow correcte est spécifiée pour secrets.backend :
    Clé : secrets.backend
    Valeur : airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
  3. Vérifiez la connexion à Secrets Manager depuis les sous-réseaux privés Amazon MWAA. La connexion peut provenir d'une passerelle NAT ou d'un point de terminaison Amazon Virtual Private Cloud (Amazon VPC) de Secrets Manager.
  4. Vérifiez que le rôle Amazon MWAA dispose des autorisations appropriées pour Secrets Manager et que la clé AWS KMS est utilisée avec Secrets Manager.
  5. Vérifiez que la connexion airflow aws_default n’est pas modifiée. De même, ne créez pas de secret Secrets Manager avec le nom aws_default.

AWS CloudTrail affiche une erreur pour l'appel d'API GetSecretValue effectué par Amazon MWAA

L'erreur suivante peut apparaître lorsque vous exécutez l'API GetSecretValue via Amazon MWAA :

« errorCode » : « ResourceNotFoundException »,
« errorMessage » : « Secrets Manager ne trouve pas le secret spécifié. »

Pour corriger cette erreur, procédez comme suit :

  1. Pour récupérer les détails de l’API GetSecretValue, utilisez l'API CloudTrail qui est appelée par l'utilisateur AmazonMWAA-airflow.
  2. Vérifiez le secret Secrets Manager configuré sur la connexion ou la variable airflow Amazon MWAA. Le préfixe et le nom connections_prefix:airflow/connections doivent correspondre au nom des secrets.
  3. Vérifiez si la connexion ou la variable Airflow existe dans Secrets Manager.

Le rôle Amazon MWAA ne dispose pas des autorisations requises pour Secrets Manager

L'erreur suivante apparaît lorsque le rôle Amazon MWAA ne dispose pas des autorisations requises pour Secrets Manager :

« botocore.exceptions.ClientError : Une erreur s’est produite (AccessDeniedException) lors de l’appel de l’opération GetSecretValue : User: arn:aws:sts::123456789:assumed-role/rjf-use2-dev-demo-mwaa-env-mwaa-execution-role/AmazonMWAA-airflow is not authorized to perform: secretsmanager:GetSecretValue on resource: <connection_prefix>/secret_name because no identity-based policy allows the secretsmanager:GetSecretValue action"

Pour résoudre cette erreur, consultez la section Étape 1 : Autoriser Amazon MWAA à accéder aux clés secrètes Secrets Manager.

Grand nombre d'appels d'API Secrets Manager pour aws_default par Amazon MWAA

Pour réduire le nombre d'appels d'API qu'Amazon MWAA émet sur Secrets Manager, utilisez un modèle de recherche. Pour plus d'informations, consultez la section Recherche facultative sur le site Web d'Apache Airflow. Lorsque vous spécifiez un modèle de recherche, vous pouvez réduire le nombre de chemins recherchés par Apache Airflow. Par conséquent, vous réduisez vos coûts lorsque vous utilisez Secrets Manager avec Amazon MWAA.

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

"connections_lookup_pattern" : "^(?!aws-default).*"

Remarque : Pour utiliser les paramètres connections_lookup_pattern et variables_lookup_pattern, apache-airflow-providers-amazon version 7.3.0 ou ultérieure doit être installé. Pour plus d'informations, consultez la section Spécification de nouveaux packages fournisseur.

Impossible d'accéder à la connexion à Secrets Manager

Lorsque Secrets Manager est configuré avec Amazon MWAA, la connexion créée sur le chemin connections_prefix configuré est accessible. Pour accéder à la connexion, utilisez le nom du Secret attribué par l'opérateur airflow.

Exemple :
Remarque : Remplacez example-mysql-task par votre tâche MySQL et example-connection_prefix/mysql-connection par votre préfixe de connexion et votre ID de connexion MySQL.

mysql_uri_operator = MySqlOperator(
        task_id='example-mysql-task',
        mysql_conn_id = '<example-connection_prefix>/example-mysql-connection
        sql=CREATE_SQL
    )

Informations connexes

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

Déplacer vos connexions et variables Apache Airflow vers Secrets Manager

Code source de airflow.providers.amazon.aws.secrets.secrets_manager sur le site Web d'Apache Airflow