Utiliser le contrôle des accès à l'interface utilisateur Airflow

Cloud Composer 1 | Cloud Composer 2

Cette page décrit différents mécanismes de contrôle des accès pour les interfaces utilisateur Airflow et DAG. En plus du contrôle des accès fourni par IAM, vous pouvez utiliser ces mécanismes pour séparer les utilisateurs dans l'UI Airflow et l'UI des DAG de votre environnement.

Présentation du contrôle des accès à l'interface utilisateur Airflow dans Cloud Composer

L'accès à l'interface utilisateur Airflow et l'interface utilisateur DAG ainsi que la visibilité des données et des opérations dans ces interfaces sont contrôlés à deux niveaux dans Cloud Composer:

  1. L'accès à l'interface utilisateur Airflow et à l'interface utilisateur des DAG dans Cloud Composer est contrôlé par IAM.

    Si un compte ne dispose pas d'un rôle permettant d'afficher les environnements Cloud Composer dans votre projet, les interfaces utilisateur Airflow et DAG ne sont pas disponibles.

    IAM ne fournit aucun contrôle d'autorisation plus précis dans l'interface utilisateur d'Airflow ou de DAG.

  2. Le modèle de contrôle des accès Apache Airflow permet de réduire la visibilité dans l'interface utilisateur Airflow et l'interface utilisateur des DAG, en fonction du rôle utilisateur.

    Le contrôle des accès Apache Airflow est une fonctionnalité d'Airflow, avec son propre modèle d'utilisateurs, de rôles et d'autorisations, ce qui est différent d'IAM.

Le contrôle des accès Apache Airflow utilise des autorisations basées sur les ressources. Tous les utilisateurs Airflow dotés d'un rôle Airflow spécifique disposent des autorisations de ce rôle. Par exemple, les utilisateurs Airflow disposant d'un rôle doté de l'autorisation can delete on Connections peuvent supprimer des connexions sur la page "Connexions" de l'interface utilisateur Airflow.

Vous pouvez également attribuer des autorisations au niveau du DAG à des DAG individuels. Par exemple, afin que seuls les utilisateurs disposant d'un rôle Airflow spécifique puissent voir un certain DAG dans l'interface utilisateur Airflow. Dans Cloud Composer, vous pouvez attribuer automatiquement des autorisations au niveau du DAG en fonction du sous-dossier où se trouve le fichier DAG dans le bucket de l'environnement.

Avant de commencer

  • L'interface utilisateur Airflow avec contrôle des accès est disponible pour Cloud Composer 1.13.4 ou version ultérieure et Airflow 1.10.10 ou version ultérieure. L'environnement doit également exécuter Python 3.

  • L'enregistrement des rôles par dossier est disponible dans Cloud Composer 1.18.12 et versions ultérieures dans Airflow 2, et dans Cloud Composer 1.13.4 et versions ultérieures dans Airflow 1.

Activer l'interface utilisateur Airflow avec le contrôle des accès

Airflow 2

L'interface utilisateur Airflow avec contrôle des accès est toujours activée dans Airflow 2.

Airflow 1

Pour activer l'interface utilisateur Airflow avec le contrôle des accès, remplacez l'option de configuration Airflow suivante:

Section Clé Valeur
webserver rbac True

Vous pouvez le faire pour un environnement existant ou lors de la création d'un environnement.

Avec cette configuration, votre environnement exécute l'interface utilisateur Airflow avec le contrôle des accès au lieu de l'interface utilisateur Airflow classique.

Gérer les rôles Airflow et les paramètres de contrôle des accès

Les utilisateurs disposant du rôle Administrateur (ou équivalent) peuvent afficher et modifier les paramètres de contrôle des accès dans l'interface utilisateur Airflow.

Dans l'interface utilisateur d'Airflow, vous pouvez configurer les paramètres de contrôle des accès à partir du menu Sécurité. Pour en savoir plus sur le modèle de contrôle des accès Airflow, les autorisations disponibles et les rôles par défaut, consultez la documentation sur le contrôle des accès à l'interface utilisateur Airflow.

Airflow 1 traite le rôle Utilisateur comme un modèle pour tous les rôles personnalisés. Airflow copie continuellement les autorisations du rôle Utilisateur dans tous les rôles personnalisés, à l'exception des autorisations pour all_dags.

Airflow gère sa propre liste d'utilisateurs. Les utilisateurs disposant du rôle Administrateur (ou équivalent) peuvent afficher la liste des utilisateurs qui ont ouvert l'interface utilisateur Airflow d'un environnement et qui étaient enregistrés dans Airflow. Cette liste inclut également les utilisateurs préinscrits manuellement par un administrateur, comme décrit dans la section suivante.

Enregistrer des utilisateurs dans l'interface utilisateur d'Airflow

Les nouveaux utilisateurs sont automatiquement enregistrés lorsqu'ils ouvrent l'interface utilisateur Airflow d'un environnement Cloud Composer pour la première fois.

Lors de l'inscription, les utilisateurs se voient attribuer le rôle spécifié dans l'option de configuration Airflow [webserver]rbac_user_registration_role. Vous pouvez contrôler le rôle des utilisateurs nouvellement inscrits en remplaçant cette option de configuration Airflow par une valeur différente.

S'il n'est pas spécifié, le rôle d'enregistrement par défaut est Op dans les environnements avec Airflow 2.

Dans les environnements Airflow 1.10.*, le rôle d'enregistrement par défaut est Admin.

Les étapes suivantes sont recommandées pour créer une configuration de rôle de base pour l'interface utilisateur d'Airflow:

Airflow 2

  1. Les administrateurs d'environnement ouvrent l'interface utilisateur d'Airflow pour le nouvel environnement.

  2. Attribuer le rôle Admin aux comptes administrateur. Le rôle par défaut pour les nouveaux comptes dans les environnements avec Airflow 2 est Op. Pour attribuer le rôle Admin, exécutez la commande CLI Airflow suivante avec gcloud:

      gcloud composer environments run ENVIRONMENT_NAME \
        --location LOCATION \
        users add-role -- -e USER_EMAIL -r Admin
    

    Remplacez :

    • ENVIRONMENT_NAME par le nom de l'environnement.
    • LOCATION par la région dans laquelle se trouve l'environnement.
    • USER_EMAIL par l'adresse e-mail d'un compte utilisateur.
  3. Les administrateurs peuvent désormais configurer le contrôle des accès pour les nouveaux utilisateurs, ce qui inclut l'attribution du rôle Admin à d'autres utilisateurs.

Airflow 1

  1. Les administrateurs d'environnement ouvrent l'interface utilisateur d'Airflow pour le nouvel environnement, où ils sont automatiquement enregistrés avec le rôle Admin.

  2. Remplacez l'option de configuration Airflow suivante par le rôle requis pour les nouveaux utilisateurs. Par exemple, User.

    Section Clé Valeur
    webserver rbac_user_registration_role User ou tout autre rôle non administrateur
  3. Les administrateurs peuvent désormais configurer le contrôle des accès à l'interface utilisateur d'Airflow pour les nouveaux utilisateurs, y compris en attribuant le rôle Admin à d'autres utilisateurs.

Préinscrire les utilisateurs

Les utilisateurs sont automatiquement enregistrés avec l'ID numérique des comptes utilisateur Google (et non les adresses e-mail) comme nom d'utilisateur. Vous pouvez également préenregistrer manuellement un utilisateur et lui attribuer un rôle en ajoutant un enregistrement d'utilisateur dans lequel le champ de nom d'utilisateur est défini sur l'adresse e-mail principale de l'utilisateur. Lorsqu'un utilisateur dont l'adresse e-mail correspond à un enregistrement d'utilisateur préenregistré se connecte pour la première fois à l'interface utilisateur d'Airflow, son nom d'utilisateur est remplacé par l'ID utilisateur actuellement (au moment de la première connexion) identifié par son adresse e-mail. La relation entre les identités Google (adresses e-mail) et les comptes utilisateur (ID utilisateur) n'est pas fixe. Les groupes Google ne peuvent pas être préenregistrés.

Pour préenregistrer les utilisateurs, vous pouvez utiliser l'interface utilisateur d'Airflow ou exécuter une commande de CLI Airflow via Google Cloud CLI.

Pour préenregistrer un utilisateur avec un rôle personnalisé via Google Cloud CLI, exécutez la commande de CLI Airflow suivante:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  users create -- \
  -r ROLE \
  -e USER_EMAIL \
  -u USER_EMAIL \
  -f FIRST_NAME \
  -l LAST_NAME \
  --use-random-password # The password value is required, but is not used

Remplacez les éléments suivants :

  • ENVIRONMENT_NAME: nom de l'environnement
  • LOCATION: région dans laquelle se trouve l'environnement
  • ROLE: rôle Airflow pour l'utilisateur, par exemple Op
  • USER_EMAIL: adresse e-mail de l'utilisateur
  • FIRST_NAME et LAST_NAME: prénom et nom de l'utilisateur

Exemple :

gcloud composer environments run example-environment \
  --location us-central1 \
  users create -- \
  -r Op \
  -e "example-user@example.com" \
  -u "example-user@example.com" \
  -f "Name" \
  -l "Surname" \
  --use-random-password

Supprimer des comptes utilisateur

La suppression d'un utilisateur d'Airflow ne révoque pas son accès, car il sera automatiquement réenregistré la prochaine fois qu'il accédera à l'interface utilisateur d'Airflow. Pour révoquer l'accès à l'ensemble de l'interface utilisateur d'Airflow, supprimez l'autorisation composer.environments.get de la règle d'autorisation associée à votre projet.

Vous pouvez également définir le rôle de l'utilisateur sur "Public", ce qui permet de conserver l'inscription de l'utilisateur, mais supprime toutes les autorisations pour l'interface utilisateur d'Airflow.

Configurer automatiquement les autorisations au niveau du DAG

La fonctionnalité d'enregistrement des rôles par dossier crée automatiquement un rôle Airflow personnalisé pour chaque sous-dossier directement dans le dossier /dags et accorde à ce rôle un accès au niveau du DAG à tous les DAG dont le fichier source est stocké dans ce sous-dossier. Cela simplifie la gestion des rôles Airflow personnalisés et leur accès aux DAG.

Fonctionnement de l'enregistrement des rôles par dossier

L'enregistrement des rôles par dossier est un moyen automatisé de configurer les rôles et leurs autorisations au niveau du DAG. En tant que tel, cela peut entraîner des conflits avec d'autres mécanismes Airflow qui accordent des autorisations au niveau du DAG:

Pour éviter de tels conflits, l'activation de l'enregistrement des rôles par dossier modifie également le comportement de ces mécanismes.

Dans Airflow 1, la possibilité d'utiliser ces mécanismes est désactivée lorsque l'enregistrement des rôles par dossier est activé. La gestion des autorisations au niveau du DAG ne s'effectue que via l'enregistrement des rôles par dossier.

Dans Airflow 2:

  • Vous pouvez accorder aux rôles un accès DAG via la propriété access_control définie dans le code source du DAG.
  • L'attribution manuelle d'autorisations DAG (via l'interface utilisateur d'Airflow ou de gcloud CLI) peut entraîner des conflits. Par exemple, si vous accordez manuellement des autorisations au niveau du DAG à un rôle par dossier, ces autorisations peuvent être supprimées ou remplacées lorsque le processeur DAG synchronise un DAG. Nous vous recommandons de ne pas accorder manuellement les autorisations DAG.
  • Les rôles combinent les autorisations d'accès au DAG enregistrées via l'enregistrement des rôles par dossier et définies dans la propriété access_control du DAG.

Les DAG situés directement dans le dossier /dags de premier niveau ne sont pas attribués automatiquement à un rôle par dossier. Ils ne sont pas accessibles avec un rôle par dossier. D'autres rôles, tels qu'administrateur, d'exploitation, d'utilisateur ou tout rôle personnalisé disposant d'autorisations, peuvent y accéder via l'interface utilisateur d'Airflow et celle des DAG.

Si vous importez des DAG dans des sous-dossiers dont le nom correspond aux rôles Airflow intégrés et aux rôles créés par Cloud Composer, les autorisations associées aux DAG de ces sous-dossiers sont toujours attribuées à ces rôles. Par exemple, l'importation d'un DAG dans le dossier /dags/Admin accorde des autorisations à ce DAG sur le rôle d'administrateur. Les rôles Airflow intégrés sont les suivants : Administrateur, Opérations, Utilisateur, Lecteur et Public. Cloud Composer crée les NoDags et UserNoDags une fois que la fonctionnalité d'enregistrement des rôles par dossier est activée.

Airflow effectue l'enregistrement des rôles par dossier lorsqu'il traite les DAG dans le programmeur Airflow. S'il y a plus d'une centaine de DAG dans votre environnement, vous constaterez peut-être une augmentation du temps d'analyse des DAG. Dans ce cas, nous vous recommandons d'augmenter le paramètre [scheduler]max_threads pour un environnement Airflow 1 ou [scheduler]parsing_processes pour Airflow 2.

Attribuer automatiquement des DAG à des rôles par dossier

Pour attribuer automatiquement des DAG à des rôles par dossier:

  1. Ignorez l'option de configuration Airflow suivante:

    Section Clé Valeur
    webserver rbac_autoregister_per_folder_roles True
  2. Remplacez le nouveau rôle d'enregistrement des utilisateurs par un rôle n'ayant accès à aucun DAG. De cette manière, les nouveaux utilisateurs n'ont accès à aucun DAG tant qu'un administrateur n'a pas attribué à leurs comptes un rôle disposant d'autorisations pour des DAG spécifiques.

    Les rôles UserNoDags et NoDags ne sont créés par Cloud Composer que lorsque la fonctionnalité d'enregistrement des rôles par dossier est activée. Ils équivalent au rôle Utilisateur, mais n'ont pas accès aux DAG. Le rôle UserNoDags est créé dans Airflow 2, et le rôle NoDags dans Airflow 1.

    Dans Airflow 2, remplacez l'option de configuration Airflow suivante:

    Section Clé Valeur
    webserver rbac_user_registration_role UserNoDags

    Dans Airflow 1, remplacez l'option de configuration Airflow suivante:

    Section Clé Valeur
    webserver rbac_user_registration_role NoDags
  3. Assurez-vous que les utilisateurs sont enregistrés dans Airflow.

  4. Attribuez des rôles aux utilisateurs en utilisant l'une des approches suivantes:

    • Laissez Airflow créer automatiquement des rôles en fonction des sous-dossiers des DAG, puis attribuez ces rôles aux utilisateurs.
    • Précréez des rôles vides pour les sous-dossiers des DAG, avec des noms de rôle correspondant au nom d'un sous-dossier, puis attribuez ces rôles à des utilisateurs. Par exemple, pour le dossier /dags/CustomFolder, créez un rôle nommé CustomFolder.
  5. Importez des DAG dans des sous-dossiers dont le nom correspond aux rôles attribués aux utilisateurs. Ces sous-dossiers doivent se trouver dans le dossier /dags du bucket de l'environnement. Airflow ajoute des autorisations aux DAG d'un tel sous-dossier, de sorte que seuls les utilisateurs disposant du rôle correspondant puissent y accéder via l'interface utilisateur Airflow et l'interface utilisateur des DAG.

Configurer manuellement les autorisations au niveau du DAG

Vous pouvez configurer des autorisations au niveau du DAG pour les rôles personnalisés afin de spécifier les DAG visibles par des groupes d'utilisateurs spécifiques.

Pour configurer les autorisations au niveau du DAG dans l'interface utilisateur d'Airflow:

  1. L'administrateur crée des rôles vides pour regrouper les DAG.
  2. L'administrateur attribue les utilisateurs aux rôles appropriés.
  3. L'administrateur ou les utilisateurs attribuent des DAG aux rôles.
  4. Dans l'interface utilisateur d'Airflow, les utilisateurs ne peuvent voir que les DAG attribués à leur groupe.

Les DAG peuvent être attribués à des rôles via les propriétés des DAG ou depuis l'UI Airflow.

Attribuer des DAG à des rôles dans l'interface utilisateur d'Airflow

Un administrateur peut attribuer les autorisations requises au niveau du DAG aux rôles appropriés dans l'interface utilisateur Airflow.

Cette opération n'est pas disponible dans l'interface utilisateur des DAG.

Attribuer des DAG aux rôles en utilisant les propriétés de DAG

Vous pouvez définir le paramètre DAG access_control sur un DAG, en spécifiant le ou les rôles de regroupement des DAG auxquels le DAG est attribué.

Dans les versions Airflow 2 antérieures à la version 2.1.0, l'administrateur, le développeur DAG ou un processus automatisé doit exécuter la commande Airflow sync-perm pour appliquer les nouveaux paramètres de contrôle des accès.

Dans Airflow 2.1.0 et versions ultérieures, l'exécution de cette commande n'est plus nécessaire, car le programmeur applique des autorisations au niveau du DAG lors de l'analyse d'un DAG.

Airflow 2

dag = DAG(
  access_control={
    'DagGroup': {'can_edit', 'can_read'},
  },
  ...
  )

Airflow 1

dag = DAG(
  access_control={
    'DagGroup': {'can_dag_edit', 'can_dag_read'},
  },
  ...
  )

Mapper les journaux d'audit sur les utilisateurs dans l'interface utilisateur Airflow

Les journaux d'audit de l'interface utilisateur d'Airflow sont mappés avec les ID numériques des comptes utilisateur Google. Par exemple, si un utilisateur suspend un DAG, une entrée est ajoutée aux journaux.

Airflow 2

Dans Airflow 2, vous pouvez afficher les journaux d'audit sur la page Parcourir > Journaux d'audit de l'interface utilisateur Airflow.

Une entrée de la page Journaux d'audit dans Airflow 2
Figure 1. Une entrée sur la page "Journaux d'audit" dans Airflow 2

Airflow 1

Dans Airflow 1, vous pouvez afficher les journaux d'audit sur la page Parcourir > Journaux.

Une entrée de la page "Journaux" dans Airflow 1
Figure 1. Une entrée de la page "Journaux" dans Airflow 1

Une entrée type affiche un ID numérique dans le champ Owner (Propriétaire) : accounts.google.com:NUMERIC_ID. Vous pouvez mapper des ID numériques aux adresses e-mail des utilisateurs sur la page Sécurité > Répertorier les utilisateurs. Cette page est disponible pour les utilisateurs disposant du rôle Admin.

Notez que la relation entre les identités Google (adresses e-mail) et les comptes utilisateur (ID utilisateur) n'est pas fixe.

Étapes suivantes