Garantir la confidentialité et la sécurité des données des utilisateurs finaux pour l'apprentissage automatique à l'aide du cloud privé virtuel AWS

Karan -, Enrique Garcia Perez et Tassilo Klein (ML Research Berlin)

La disponibilité des mégadonnées, associée à la diminution constante des coûts liés à la puissance de calcul, constituent la base de l'apprentissage automatique moderne (ML). Ce développement, associé aux améliorations algorithmiques récentes, a annoncé une nouvelle ère d'intelligence artificielle: l'apprentissage en profondeur.

Bien que la technologie ait ses racines dans les années 60, elle a récemment connu des avancées sans précédent dans toutes sortes de domaines allant de la vision par ordinateur au traitement du langage naturel. Sans surprise, l'apprentissage en profondeur est devenu le centre d'attention des milieux universitaires et industriels. Tout en continuant d'évoluer à grande échelle, il devient un produit standard de facto pour les scientifiques.

Le succès de l'apprentissage en profondeur engendre l'appétit pour des ensembles de données de plus en plus volumineux. Cependant, gérer correctement les données volumineuses requises peut s'avérer délicat et pénible. Certaines informations peuvent être sensibles et ne peuvent être exposées au monde extérieur, car la confidentialité des données doit être garantie à tout moment. L'exemple le plus frappant à cet égard est celui des données de santé nécessitant la collecte et le stockage de grandes quantités d'informations personnelles identifiables. En général, le traitement du Big Data a des besoins d'infrastructure très dynamiques et évolutifs en raison de la fluctuation des tâches et des données. Une fusion de ces récents développements peut être délicate et nécessite des mesures de sauvegarde, ainsi qu'une planification délibérée.

Imaginez maintenant que vous êtes un petit groupe de recherche universitaire ou d'entreprise et que vous souhaitez exploiter une infrastructure ML tout en garantissant la confidentialité des données. Notre équipe de SAP ML Research s’efforce de résoudre ce problème en proposant une infrastructure Amazon Virtual Private Cloud (VPC) afin de s’assurer que les solutions d’apprentissage automatique vont de pair avec la confidentialité des données. Cet article définit une topologie VPC de base idéale pour le développement et le déploiement de ML. En bref, les VPC dans le cloud vous permettent de définir et de réguler différentes exigences d'accès dans un environnement très évolutif. Bien que les composants de ce VPC puissent naturellement être configurés à l'aide de la console AWS, cette opération manuelle n'est ni vraiment pratique ni reproductible. L'automatisation de cette étape est donc essentielle lors de la configuration d'un tel réseau d'infrastructure.

Ici, un puissant moteur d'automatisation open-source entre en jeu: Ansible. À la fin de ce didacticiel, il ne vous reste plus qu’à exécuter une commande simple qui exécute un livre de jeu Ansible (c’est-à-dire un script de déploiement, de configuration), et vous êtes prêt! En particulier, il n'est pas nécessaire de recréer cette infrastructure une fois qu'elle est configurée. Toutefois, vous souhaiterez peut-être attacher des instances supplémentaires au VPC, par exemple. donner aux nouveaux étudiants ou employés un nœud informatique individuel.

Le VPC que nous avons créé se compose de deux sous-réseaux: public et privé.

Le sous-réseau public contient des composants, tels que l'hôte bastion, qui est une instance dédiée qui contrôle l'accès au réseau privé en formant une chaîne de connexions SSH, par exemple un bastion vers un nœud de calcul.

Dans le sous-réseau privé, certains composants hébergent des données potentiellement (confidentielles) ou les exploitent. Cela peut comprendre des instances informatiques utilisées pour des modèles d'apprentissage ou des serveurs de base de données. Comme tout le trafic entrant traverse l'hôte bastion, cela permet de contrôler le trafic. En théorie, vous pouvez chaîner plusieurs hôtes bastions pour une sécurité encore accrue. Cependant, pour des raisons de simplicité, nous avons utilisé un seul exemple, mais suffisant. Enfin, pour donner aux composants un accès à Internet, par exemple pour installer des packages logiciels, un composant supplémentaire est nécessaire. C'est là que la passerelle NAT entre en jeu. Dans notre exemple, il est implémenté avec une adresse IP publique élastique associée.

Topologie VPC: comment les composants interagissent

La figure 1 montre le schéma de l'infrastructure VPC composée de sous-réseaux privés et publics.

Fig. 1: Représentation de l'infrastructure VPC

Automatisation Ansible

Les playbooks Ansible utilisent des rôles et des tâches pour structurer le contenu de la configuration en composants modulaires. Notre projet consiste en playbook.yml, qui contient le rôle unique de créer un VPC. Le fichier main.yml subdivise en outre le rôle en une liste de tâches, qui sont au niveau de base rien de plus qu’un appel à un module Ansible. Dans notre cas, les tâches consistent à créer un VPC, des sous-réseaux publics et privés, une passerelle NAT, une passerelle Internet et des groupes de sécurité. Veuillez vous reporter aux fichiers du référentiel github pour des détails sur les tâches spécifiques.

Outre les fichiers mentionnés ci-dessus, vars.yml, contrairement aux autres, nécessite quelques modifications mineures de votre part. Il contient la définition de toutes les variables d'environnement nécessaires, telles que l'espace adresse du sous-réseau et les clés d'accès.

La figure 2 fournit un aperçu et une explication de toutes les variables clés dans le fichier vars.yml. Vous pouvez trouver les variables à modifier dans l'extrait de fichier

REMARQUE: Veuillez modifier les variables du fichier var.yml, telles que votre clé d'accès et votre nom de VPC, en fonction de vos besoins.

Extrait de livre de lecture (vars.yml) pour la configuration de VPC

# Variables d'autorisation pour AWS
aws_access_key: "Fournissez votre clé d'accès"
aws_secret_key: "Fournissez votre clé secrète"
aws_region: "eu-west-1"
# Informations sur le VPC
vpc_name: "ML_Research_VPC"
vpc_cidr_block: "10.0.0.0/16"
# Pour la règle de groupe de sécurité - facultatif (flexible et facile à modifier ultérieurement)
mon_ip: "X.X.X.X"
# définition du sous-réseau public
public_subnet_1_cidr: "10.0.0.0/24"
# définition du sous-réseau privé
private_subnet_1_cidr: "10.0.1.0/24"

Une fois que vous avez téléchargé tous les fichiers du Playbook, tout ce que vous avez à faire pour configurer la configuration du VPC dans AWS consiste à exécuter le script principal du Playbook à l'aide de:

ansible-playbook “votre playbook fichier.yml“ –i inventaire –e @ vars.yml

En créant avec succès la configuration VPC, votre terminal devrait ressembler à la figure 3:

Fig. 3: Exécution réussie du Playbook pour la création de VPC

Après avoir suivi les étapes précédentes, vous pouvez accéder à votre console AWS et vérifier la configuration de votre VPC récemment créée (dans notre cas, il s'agit de ML_RESEARCH_VPC):

Maintenant que vous avez configuré l'infrastructure, vous pouvez commencer à lancer des instances dans. La première instance que vous voudrez peut-être instancier est l'hôte bastion. Comme décrit précédemment, il agit simplement comme un pont, permettant l’accès aux instances du sous-réseau privé uniquement aux utilisateurs autorisés.

Configuration de l'hôte bastion

Étant donné que l'hôte bastion remplit la tâche unique consistant à exécuter une application ou un service pour résister aux attaques, il suffit de choisir un type d'instance EC2 plus petit (serveur virtuel dans la terminologie Amazon Web Services), tel que t2.micro. Il est important que l'instance soit associée au sous-réseau public, car elle doit être accessible depuis Internet sur le port 22 pour SSH. Dans notre cas, toutes les exigences sont satisfaites par la manière dont les groupes de sécurité sont mis en œuvre (par défaut, seuls les accès SSH sont accessibles), permettant l'accès autorisé aux instances privées uniquement en passant par l'hôte bastion. L'hôte bastion agit donc comme un point de contrôle dans le sous-réseau public.

Voici une démonstration interactive rapide sur la manière de lancer un bastion: Dans ce cas, la plage d'adresses IP autorisées est globale, mais vous pouvez vouloir le contraindre pour des raisons de sécurité via le manuel Ansible en fonction de votre cas d'utilisation.

Une fois que l'hôte bastion est opérationnel, vous pouvez accéder à vos instances privées à l'aide de SSH uniquement, car elles résident sur le réseau privé. Pour être accessible par SSH, vous devez vous assurer d’ajouter les clés publiques des utilisateurs autorisés dans le fichier .ssh / allowed_keys à la fois sur le bastion et l’instance. Veuillez vous référer à ce tutoriel pour plus de détails.

Lancer une instance EC2 dans le sous-réseau privé de VPC

Maintenant que nous avons configuré tout l'environnement, nous avons presque terminé et il ne reste plus qu'une étape: le lancement d'une instance EC2 pour l'apprentissage automatique. Laissez-nous vous montrer un exemple de la manière dont vous pouvez lancer une instance de GPU dans votre VPC et pour développer ou exécuter vos solutions d’apprentissage approfondi. Tout ce que vous avez à faire est de choisir le type d'instance que vous souhaitez lancer en fonction de votre objectif, puis attachez-le au VPC créé.

Configuration SSH pour accéder à votre instance

Maintenant que votre instance est en cours d'exécution, l'étape suivante consiste à établir une connexion avec celle-ci. Vous pouvez accéder directement à votre instance privée en activant le transfert SSH via l'hôte bastion. Cela nécessite simplement l'édition du fichier /.ssh/config sur votre ordinateur local. Vous éviterez ainsi la fastidieuse procédure de connexion manuelle à votre bastion, puis à l'hôte. Tout ce que vous avez à faire est d’adapter les composants en gras.

Hôte 10.0.1. *
    IdentityFile /path-to-your-private-key.pem
    Utilisateur ec2-utilisateur
    ProxyCommand ssh ec2-user @ bastion -W% h:% p
    UseKeychain oui
Bastion d'accueil
    HostName [adresse IP du bastion]
    Utilisateur ec2-utilisateur
    IdentityFile /path-to-your-private-key.pem
    ForwardAgent Oui

Cela vous permettra essentiellement d'accéder à une instance privée depuis votre ordinateur local sans vous connecter manuellement à votre bastion, puis à votre instance privée. Cependant, vous souhaiterez peut-être toujours vous connecter au bastion pour des tâches telles que la mise en place de clés SSH.

Après avoir inséré votre code IP, vous vous connectez à votre instance privée:

                    ssh [adresse IP privée de l'instance]

Cependant, vous souhaiterez peut-être toujours vous connecter au bastion pour des tâches administratives, telles que l'inclusion de clés SSH. Pour vous connecter à l'hôte bastion, il vous suffit de:

                            bastion de ssh

Voici comment accéder à l'hôte bastion à l'aide des commandes suivantes: (l'instance privée lancée a l'adresse 10.0.1.99)

Important à garder à l'esprit: il est généralement recommandé de disposer de deux clés différentes, une pour l'hôte bastion et une pour votre instance privée. Ne stockez jamais vos clés privées sur l'hôte bastion, car cela compromettrait la confidentialité souhaitée.

Enfin, l’infrastructure décrite assure un réseau sécurisé pour développer des solutions ML et maintenir les données. Toutefois, afin de la rendre plus robuste et moins sujette aux interruptions de service en cas de défaillance de votre zone de disponibilité, la topologie peut être étendue au-delà de ce didacticiel. Cette étape supplémentaire pourrait impliquer la conception d'un VPC couvrant plusieurs zones de disponibilité, afin que toutes les ressources ne soient pas situées à un emplacement physique spécifique et pour éviter les retards ou les temps d'arrêt inutiles.

Vous pouvez maintenant commencer à créer votre propre VPC en fonction de votre cas d'utilisation. N'hésitez pas à commenter pour des questions ou des idées!

Accédez à l'intégralité du playbook à l'aide du référentiel github suivant.

Karan, M.Sc. Un étudiant de l’Université Berlin a concentré son attention sur l’infrastructure de niveau ML décrite dans ce message.