In partie 1 de cette série, nous avons montré comment résoudre un Amazon SageMakerStudio URL pré-signée à partir d'un réseau d'entreprise à l'aide de points de terminaison de VPC privés Amazon sans passer par Internet. Dans cet article, nous continuerons à nous appuyer sur la solution précédente pour montrer comment créer une passerelle API privée via Passerelle d'API Amazon en tant qu'interface proxy pour générer et accéder Amazon Sage Maker URL pré-signées. De plus, nous ajoutons une barrière de sécurité supplémentaire pour garantir que les URL pré-signées ne sont générées et accessibles que pour l'utilisateur final authentifié au sein du réseau d'entreprise.
Vue d'ensemble de la solution
Le diagramme suivant illustre l'architecture de la solution.
Le processus comprend les étapes suivantes:
- Dans le Amazon Cognito groupe d'utilisateurs, configurez d'abord un utilisateur dont le nom correspond à son profil utilisateur Studio et enregistrez Studio en tant que client d'application dans le groupe d'utilisateurs.
- L'utilisateur se fédère à partir de son fournisseur d'identité d'entreprise (IdP) et s'authentifie auprès du groupe d'utilisateurs Amazon Cognito pour accéder à Studio.
- Amazon Cognito renvoie un jeton à l'utilisateur autorisant l'accès à l'application Studio.
- L'utilisateur invoque
createStudioPresignedUrl
API sur API Gateway avec un jeton dans l'en-tête. - API Gateway invoque un personnalisé AWS Lambda approbateur et valide le jeton.
- Lorsque le jeton est valide, Amazon Cognito renvoie une stratégie d'octroi d'accès avec l'ID de profil utilisateur du studio à API Gateway.
- API Gateway appelle le
createStudioPresignedUrl
Fonction Lambda pour créer l'URL pré-signée du studio. - La
createStudioPresignedUrl
La fonction crée une URL pré-signée à l'aide du point de terminaison VPC de l'API SageMaker et renvoie à l'appelant. - L'utilisateur accède à l'URL présignée à partir de son réseau d'entreprise qui se résout sur le point de terminaison du VPC Studio.
- Les fonctions Gestion des identités et des accès AWS (IAM) s'assure que la création et l'accès à l'URL pré-signée sont effectués via des points de terminaison de VPC.
Les sections suivantes vous guident tout au long du déploiement, de la configuration et de la validation de la solution pour l'API privée API Gateway pour la création et la résolution d'une URL pré-signée Studio à partir d'un réseau d'entreprise à l'aide de points de terminaison VPC.
- Déployez la solution
- Configurer l'utilisateur Amazon Cognito
- Authentification de l'API privée pour l'URL présignée à l'aide d'un jeton Web JSON
- Configurer le serveur DNS d'entreprise pour accéder à l'API privée
- Tester l'API privée API Gateway pour une URL pré-signée du réseau d'entreprise
- Stratégie d'authentification Lambda d'URL pré-signée
- Nettoyer
Déployez la solution
Vous pouvez déployer la solution via le Console de gestion AWS au sein de l’ Modèle d'application sans serveur AWS (AWS-SAM).
Pour déployer la solution via la console, lancez les éléments suivants AWS CloudFormation modèle dans votre compte en choisissant Lancer la pile. Il faut environ 10 minutes pour que la pile CloudFormation se termine.
Pour déployer la solution à l'aide d'AWS SAM, vous pouvez trouver le dernier code dans le Référentiel GitHub aws-samples, où vous pouvez également contribuer à l'exemple de code. Les commandes suivantes montrent comment déployer la solution à l'aide de l'interface de ligne de commande AWS SAM. S'il n'est pas actuellement installé, installer l'interface de ligne de commande AWS SAM.
- Clonez le référentiel sur https://github.com/aws-samples/secure-sagemaker-studio-presigned-url.
- Après avoir cloné le dépôt, accédez à la source et exécutez le code suivant :
Configurer l'utilisateur Amazon Cognito
Pour configurer votre utilisateur Amazon Cognito, procédez comme suit :
- Créez un utilisateur Amazon Cognito avec le même nom qu'un profil utilisateur SageMaker :
- Définissez le mot de passe utilisateur :
- Obtenir un jeton d'accès:
Authentification de l'API privée pour l'URL présignée à l'aide d'un jeton Web JSON
Lorsque vous avez déployé une API privée pour créer une URL présignée SageMaker, vous avez ajouté une barrière de sécurité pour restreindre l'accès à l'URL présignée par toute personne extérieure au réseau d'entreprise et au point de terminaison VPC. Cependant, sans implémenter un autre contrôle sur l'API privée au sein du réseau d'entreprise, tout utilisateur interne au sein du réseau d'entreprise pourrait transmettre des paramètres non authentifiés pour le profil utilisateur SageMaker et accéder à n'importe quelle application SageMaker.
Pour atténuer ce problème, nous proposons de transmettre un jeton Web JSON (JWT) pour l'appelant authentifié à la passerelle API et de valider ce jeton avec un mécanisme d'autorisation JWT. Il existe plusieurs options pour implémenter un mécanisme d'autorisation pour la passerelle API privée, en utilisant soit un Autorisateur Lambda or Amazon Cognito.
Avec un mécanisme d'autorisation Lambda personnalisé, vous pouvez intégrer un nom de profil utilisateur SageMaker dans la stratégie renvoyée. Cela empêche tout utilisateur du réseau d'entreprise d'envoyer un nom de profil utilisateur SageMaker pour créer une URL présignée qu'il n'est pas autorisé à créer. Nous utilisons Amazon Cognito pour générer nos jetons et un mécanisme d'autorisation Lambda personnalisé pour valider et renvoyer la stratégie appropriée. Pour plus d'informations, reportez-vous à Création d'une autorisation précise à l'aide d'Amazon Cognito, d'API Gateway et d'IAM. L'autorisateur Lambda utilise le nom d'utilisateur Amazon Cognito comme nom de profil utilisateur.
Si vous ne parvenez pas à utiliser Amazon Cognito, vous pouvez développer une application personnalisée pour authentifier et transmettre les jetons d'utilisateur final à l'autorisateur Lambda. Pour plus d'informations, reportez-vous à Utiliser les mécanismes d'autorisation API Gateway Lambda.
Configurer le serveur DNS d'entreprise pour accéder à l'API privée
Pour configurer votre serveur DNS d'entreprise, procédez comme suit :
- Sur le Cloud de calcul élastique Amazon (Amazon EC2), choisissez votre instance DNSA EC2 sur site et connectez-vous via Gestionnaire de système Gestionnaire de session.
- Ajouter un enregistrement de zone dans le
/etc/named.conf
fichier pour résoudre le nom DNS de la passerelle API via votre Amazon Route 53 résolveur entrant, comme illustré dans le code suivant : - Redémarrez le service nommé à l'aide de la commande suivante :
Valider la demande d'une URL pré-signée à partir de l'API privée API Gateway pour les utilisateurs autorisés
Dans un scénario réel, vous implémenteriez une interface frontale qui transmettrait les en-têtes d'autorisation appropriés pour les ressources authentifiées et autorisées à l'aide d'une solution personnalisée ou d'un effet de levier. AWS Amplifier. Pour la brièveté de ce billet de blog, les étapes suivantes exploitent Postman pour valider rapidement la solution que nous avons déployée restreint en fait la demande de l'URL pré-signée pour un utilisateur interne, à moins d'y être autorisé.
Pour valider la solution avec Postman, procédez comme suit :
- Installez Postman sur l'instance WINAPP EC2. Voir les instructions ici
- Ouvrez Postman et ajoutez le jeton d'accès à votre
Authorization
en-tête: - Modifiez l'URL de la passerelle API pour y accéder depuis votre instance EC2 interne :
- Ajoutez le point de terminaison de VPC dans votre URL API Gateway :
- Ajoutez le
Host
en-tête avec une valeur de votre URL API Gateway : - Tout d'abord, changez le
EMPLOYEE_ID
à votre nom d'utilisateur Amazon Cognito et de profil d'utilisateur SageMaker. Assurez-vous de recevoir une URL présignée autorisée. - Puis changez le
EMPLOYEE_ID
à un utilisateur qui n'est pas le vôtre et assurez-vous de recevoir un échec d'accès.
- Sur la console Amazon EC2, choisissez votre instance WINAPP sur site et connectez-vous via votre client RDP.
- Ouvrez un navigateur Chrome et accédez à votre URL présignée autorisée pour lancer Studio.
Studio est lancé sur le point de terminaison d'un VPC avec une adresse distante comme adresse IP du point de terminaison du VPC Studio.
Si l'URL présignée est accessible en dehors du réseau d'entreprise, la résolution échoue car la condition de stratégie IAM pour l'URL présignée applique la création et l'accès à partir d'un point de terminaison de VPC.
Stratégie d'authentification Lambda d'URL pré-signée
La solution ci-dessus a créé la stratégie d'authentification suivante pour Lambda qui a généré une URL pré-signée pour accéder à SageMaker Studio.
Conclusion
Dans cet article, nous avons montré comment accéder à Studio à l'aide d'une passerelle API privée à partir d'un réseau d'entreprise à l'aide de points de terminaison de VPC privés Amazon, en empêchant l'accès aux URL pré-signées en dehors du réseau d'entreprise et en sécurisant la passerelle API avec un mécanisme d'autorisation JWT utilisant Amazon Cognito et Lambda personnalisé. les autorisateurs.
Essayez cette solution et expérimentez son intégration avec votre portail d'entreprise, et laissez vos commentaires dans les commentaires !
À propos des auteurs
Bélier Vittal est architecte de solutions d'apprentissage automatique chez AWS. Il a plus de 20 ans d'expérience dans l'architecture et la création d'applications distribuées, hybrides et cloud. Il est passionné par la création de solutions d'IA/ML et de Big Data sécurisées et évolutives pour aider les entreprises clientes dans leur parcours d'adoption et d'optimisation du cloud afin d'améliorer leurs résultats commerciaux. Dans ses temps libres, il aime le tennis, la photographie et les films d'action.
Jonathan Nguyen est consultant senior en sécurité de l'équipe de livraison partagée chez AWS. Son expérience est dans AWS Security avec un accent sur la détection des menaces et la réponse aux incidents. Aujourd'hui, il aide les entreprises clientes à développer une stratégie de sécurité AWS complète, à déployer des solutions de sécurité à grande échelle et à former les clients aux meilleures pratiques de sécurité AWS.
Chris Childer est architecte d'infrastructure cloud dans les services professionnels chez AWS. Il travaille avec les clients AWS pour concevoir et automatiser leur infrastructure cloud et améliorer leur adoption de la culture et des processus DevOps.