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

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Cette page décrit différents mécanismes de contrôle des accès pour l'interface utilisateur d'Airflow et l'UI du DAG. Vous pouvez utiliser ces mécanismes, en plus du contrôle des accès fournies par IAM, pour séparer les utilisateurs Interface utilisateur d'Airflow et de DAG de votre environnement

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

Un accès à l'interface utilisateur Airflow et à l'interface utilisateur du DAG la visibilité des données et des opérations dans ces interfaces utilisateur est contrôlée à deux niveaux dans Cloud Composer:

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

    Si un compte ne dispose pas d'un rôle permettant de consulter les environnements Cloud Composer dans votre projet, l'interface utilisateur d'Airflow et l'interface utilisateur du DAG ne sont pas disponibles.

    IAM ne fournit aucun contrôle d'autorisation supplémentaire dans l'interface utilisateur d'Airflow ni dans l'interface utilisateur du DAG.

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

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

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

Vous pouvez également attribuer Autorisations au niveau du DAG pour les DAG individuels Par exemple, pour que seuls les utilisateurs disposant d'un rôle Airflow spécifique puissent voir un DAG spécifique dans l'interface utilisateur Airflow. Dans Cloud Composer, vous pouvez attribuer automatiquement des autorisations au niveau du DAG ; en fonction du sous-dossier contenant le fichier DAG bucket.

Avant de commencer

  • L'interface utilisateur Airflow avec contrôle des accès est disponible pour les versions de Cloud Composer 1.13.4 ou ultérieures et pour les versions d'Airflow 1.10.10 ou ultérieures. 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 le contrôle des accès à l'interface utilisateur d'Airflow

Airflow 2

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

Airflow 1

Pour activer l'interface utilisateur d'Airflow avec contrôle d'accès, remplacez la valeur 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 d'Airflow avec accès au lieu de l'interface utilisateur d'Airflow classique.

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

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

Dans l'interface utilisateur d'Airflow, vous pouvez configurer les paramètres de contrôle des accès le 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 de l'interface utilisateur Airflow.

Airflow 1 utilise le rôle Utilisateur comme modèle pour tous les rôles personnalisés. Airflow copie en permanence les autorisations du rôle "Utilisateur" vers tous les rôles personnalisés, à l'exception des autorisations pour all_dags.

Airflow gère sa propre liste d'utilisateurs. Utilisateurs disposant d'un accès administrateur (ou équivalent) peut consulter la liste des utilisateurs ayant ouvert l'interface utilisateur d'Airflow d'un environnement et ont été enregistrés dans Airflow. Cette liste comprend également les utilisateurs manuellement préenregistrée 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 pour la première fois l'interface utilisateur Airflow d'un environnement Cloud Composer.

Lors de l'enregistrement, le rôle spécifié dans l'option de configuration Airflow [webserver]rbac_user_registration_role est attribué aux utilisateurs. Vous pouvez contrôler le rôle des utilisateurs nouvellement inscrits en remplaçant ce paramètre ; Option de configuration Airflow avec 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 de l'environnement ouvrent l'interface utilisateur 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 Commande CLI Airflow 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 Airflow pour le nouvel élément environnement, où ils sont automatiquement enregistrés auprès de Admin rôle de ressource.

  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 un 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, ce qui inclut l'attribution du rôle Admin à d'autres utilisateurs.

Préenregistrer des utilisateurs

Les utilisateurs sont automatiquement enregistrés avec les ID numériques des comptes utilisateur Google (et non les adresses e-mail) comme nom d'utilisateur. Vous pouvez aussi préinscrire manuellement un utilisateur et attribuez-leur un rôle en ajoutant un enregistrement utilisateur avec le champ "username" défini à l'adresse e-mail principale de l'utilisateur. Lorsqu'un utilisateur disposant d'une adresse e-mail la mise en correspondance d'un enregistrement utilisateur préinscrit avec l'interface utilisateur Airflow pour la première fois, son nom d'utilisateur est remplacé par l'identifiant actuel de la première connexion) identifiés par leur adresse e-mail. La relation entre Identités Google (adresses e-mail) et comptes utilisateur (User-ID) n'est pas fixe. Les groupes Google ne peuvent pas être préinscrits.

Pour préenregistrer des utilisateurs, vous pouvez utiliser l'UI Airflow ou exécuter une commande CLI Airflow via la CLI Google Cloud.

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 où 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 sont automatiquement réenregistrés la prochaine fois qu'ils accéderont à l'interface utilisateur d'Airflow. Pour révoquer l'accès à l'ensemble de l'interface utilisateur Airflow, supprimez l'autorisation composer.environments.get de la stratégie d'autorisation correspondante dans votre projet.

Vous pouvez également définir le rôle de l'utilisateur sur "Public", ce qui conserve l'enregistrement de l'utilisateur mais supprime toutes ses autorisations pour l'interface utilisateur 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 respectif. Cela simplifie la gestion des rôles Airflow personnalisés et de 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. Par conséquent, elle 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, l'utilisation de ces mécanismes est désactivée lorsque L'enregistrement des rôles par dossier est activé. Toute 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 à un DAG l'accès à des rôles via la propriété access_control définie dans le code source du DAG.
  • Accorder manuellement des autorisations DAG (via l'interface utilisateur d'Airflow ou gcloud CLI) peuvent provoquer des conflits. Par exemple, si vous accorder manuellement des autorisations au niveau du DAG à un rôle par dossier, les autorisations peuvent être supprimées ou remplacées lorsque le processeur DAG synchronise un DAG. Nous vous recommandons de ne pas accorder manuellement d'autorisations DAG.
  • Les rôles possèdent une union d'autorisations d'accès au DAG enregistrées via les autorisations par dossier Enregistrement des rôles et défini dans la propriété access_control de le DAG.

Les DAG situés directement dans le dossier /dags de premier niveau ne sont pas attribués automatiquement n'importe quel rôle par dossier. Ils ne sont pas accessibles avec un rôle par dossier. D'autres rôles tels qu'administrateur, opérateur, utilisateur ou tout rôle personnalisé auquel des autorisations sont accordées peuvent y accéder via l'interface utilisateur d'Airflow et l'interface utilisateur du DAG.

Si vous importez des DAG dans des sous-dossiers dont le nom correspond aux rôles Airflow intégrés et les rôles créés par Cloud Composer, ainsi que les autorisations associées aux DAG ces sous-dossiers sont toujours attribués à ces rôles. Par exemple, importer un DAG dans le dossier /dags/Admin accorde des autorisations à ce DAG au rôle Administrateur. Les rôles Airflow intégrés incluent les rôles Administrateur, Opération, Utilisateur, Lecteur et Public. Cloud Composer crée les NoDags et UserNoDags après le paramètre "Per-folder" La fonctionnalité d'enregistrement des rôles est activée.

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

Attribuer automatiquement des DAG aux rôles par dossier

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

  1. Remplacez l'option de configuration Airflow suivante:

    Section Clé Valeur
    webserver rbac_autoregister_per_folder_roles True
  2. Remplacez le rôle d'enregistrement de l'utilisateur par un rôle sans accès aux 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.

    UserNoDags et NoDags sont des rôles créés par Cloud Composer uniquement lorsque la fonctionnalité d'enregistrement des rôles par dossier est activée. Ils sont équivalents au rôle "Utilisateur", mais n'ont accès à aucun DAG. Le rôle UserNoDags est créé dans Airflow 2, et le rôle NoDags est créé dans Airflow 1.

    Dans Airflow 2, remplacez la configuration Airflow suivante. l'une des options suivantes:

    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 inscrits dans Airflow.

  4. Attribuez des rôles aux utilisateurs à l'aide de l'une des approches suivantes :

    • Laissez Airflow créer automatiquement des rôles en fonction des sous-dossiers des DAG, puis attribuez des utilisateurs à ces rôles.
    • Précréer des rôles vides pour les sous-dossiers des DAG, avec des noms de rôles correspondants le nom d'un sous-dossier, puis attribuez des utilisateurs à ces rôles. 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 sous-dossier bucket de l'environnement. Airflow ajoute des autorisations aux DAG dans un sous-dossier de ce type, de sorte que seuls les utilisateurs disposant du rôle correspondant puissent y accéder via l'interface utilisateur d'Airflow et l'interface utilisateur du DAG.

Configurer manuellement des 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 qui sont visibles pour des groupes d'utilisateurs spécifiques.

Pour configurer des 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 des rôles appropriés aux utilisateurs.
  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 du DAG Interface utilisateur d'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ôle(s) dans l'interface utilisateur d'Airflow.

Cette opération n'est pas possible dans l'interface utilisateur du DAG.

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

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

Airflow 2

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

Airflow 1

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

Mappez les journaux d'audit dans l'UI d'Airflow aux utilisateurs

Les journaux d'audit dans l'interface utilisateur d'Airflow sont mappés sur les ID numériques des comptes utilisateur Google. Par exemple, si un utilisateur met en pause 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 d'Airflow.

Une entrée sur la page "Journaux d'audit" dans Airflow 2
Figure 1. 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 Browse > Logs (Parcourir > Journaux).

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

Une entrée typique indique 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 Identités Google (adresses e-mail) et comptes utilisateur (User-ID) n'est pas fixe.

Étape suivante