Configurer un accès privé à un compartiment Amazon S3 via un point de terminaison VPC - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configurer un accès privé à un compartiment Amazon S3 via un point de terminaison VPC

Créée par Martin Maritsch (AWS), Gabriel Rodriguez Garcia (AWS), Shukhrat Khodjaev (AWS), Nicolas Jacob Baer (AWS), Mohan Gowda Purushothama (AWS) et Joaquin Rinaudo (AWS)

Récapitulatif

Dans Amazon Simple Storage Service (Amazon S3), les fichiers URLs présignés vous permettent de partager des fichiers de taille arbitraire avec des utilisateurs cibles. Par défaut, les Amazon S3 presigned URLs sont accessibles depuis Internet dans un délai d'expiration, ce qui les rend pratiques à utiliser. Cependant, les environnements d'entreprise nécessitent souvent que l'accès à Amazon S3 présigné URLs soit limité à un réseau privé uniquement.

Ce modèle présente une solution sans serveur pour interagir en toute sécurité avec les objets S3 en utilisant une signature préalable URLs depuis un réseau privé sans traversée d'Internet. Dans l'architecture, les utilisateurs accèdent à un Application Load Balancer via un nom de domaine interne. Le trafic est acheminé en interne via Amazon API Gateway et un point de terminaison de cloud privé virtuel (VPC) pour le compartiment S3. La AWS Lambda fonction génère des fichiers présignés URLs pour les téléchargements via le point de terminaison VPC privé, ce qui permet d'améliorer la sécurité et la confidentialité des données sensibles.

Conditions préalables et limitations

Prérequis

  • Un VPC qui inclut un sous-réseau déployé dans un réseau Compte AWS d'entreprise connecté (par exemple, via). AWS Direct Connect

Limites

Versions

  • Python version 3.11 ou ultérieure

  • Terraform version 1.6 ou ultérieure

Architecture

Pile technologique cible

Les services AWS suivants sont utilisés dans la pile technologique cible :

  • Amazon S3 est le service de stockage principal utilisé pour charger, télécharger et stocker des fichiers en toute sécurité.

  • Amazon API Gateway expose les ressources et les points de terminaison permettant d'interagir avec le compartiment S3. Ce service joue un rôle dans la génération de données présignées URLs pour le téléchargement ou le chargement de données.

  • AWS Lambdagénère des fichiers présignés URLs pour le téléchargement de fichiers depuis Amazon S3. La fonction Lambda est appelée par API Gateway.

  • Amazon VPC déploie des ressources au sein d'un VPC pour isoler le réseau. Le VPC inclut des sous-réseaux et des tables de routage pour contrôler le flux de trafic.

  • Application Load Balancer achemine le trafic entrant soit vers API Gateway, soit vers le point de terminaison VPC du compartiment S3. Il permet aux utilisateurs du réseau d'entreprise d'accéder aux ressources en interne.

  • Le point de terminaison VPC pour Amazon S3 permet une communication directe et privée entre les ressources du VPC et Amazon S3 sans passer par l'Internet public.

  • AWS Identity and Access Management (IAM) contrôle l'accès aux AWS ressources. Les autorisations sont configurées pour garantir des interactions sécurisées avec l'API et les autres services.

Architecture cible

Configuration de l'accès privé à un compartiment S3 via un point de terminaison VPC

Le diagramme illustre les éléments suivants :

  1. Les utilisateurs du réseau d'entreprise peuvent accéder à l'Application Load Balancer via un nom de domaine interne. Nous supposons qu'une connexion existe entre le réseau d'entreprise et le sous-réseau intranet dans le Compte AWS (par exemple, via une AWS Direct Connect connexion).

  2. L'Application Load Balancer achemine le trafic entrant soit vers API Gateway pour générer des données présignées URLs pour le téléchargement ou le chargement vers Amazon S3, soit vers le point de terminaison VPC du compartiment S3. Dans les deux scénarios, les demandes sont acheminées en interne et n'ont pas besoin de passer par Internet.

  3. API Gateway expose les ressources et les points de terminaison pour interagir avec le compartiment S3. Dans cet exemple, nous fournissons un point de terminaison pour télécharger des fichiers depuis le compartiment S3, mais cela pourrait également être étendu pour fournir une fonctionnalité de téléchargement.

  4. La fonction Lambda génère l'URL présignée pour télécharger un fichier depuis Amazon S3 en utilisant le nom de domaine de l'Application Load Balancer au lieu du domaine public Amazon S3.

  5. L'utilisateur reçoit l'URL présignée et l'utilise pour télécharger le fichier depuis Amazon S3 à l'aide de l'Application Load Balancer. L'équilibreur de charge inclut une route par défaut pour envoyer le trafic qui n'est pas destiné à l'API vers le point de terminaison VPC du compartiment S3.

  6. Le point de terminaison VPC achemine l'URL présignée avec le nom de domaine personnalisé vers le compartiment S3. Le compartiment S3 doit porter le même nom que le domaine.

Automatisation et mise à l'échelle

Ce modèle utilise Terraform pour déployer l'infrastructure depuis le référentiel de code dans un. Compte AWS

Outils

Outils

  • Python est un langage de programmation informatique polyvalent.

  • Terraform est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources cloud et sur site.

  • AWS Command Line Interface (AWS CLI) est un outil open source qui vous permet d'interagir avec les AWS services par le biais de commandes dans votre interface de ligne de commande.

Référentiel de code

Le code de ce modèle est disponible dans un GitHub dépôt sur https://github.com/aws-samples/private-s3-vpce.

Bonnes pratiques

L'exemple d'architecture de ce modèle utilise les autorisations IAM pour contrôler l'accès à l'API. Toute personne disposant d'informations d'identification IAM valides peut appeler l'API. Si votre cas d'utilisation nécessite un modèle d'autorisation plus complexe, vous souhaiterez peut-être utiliser un autre mécanisme de contrôle d'accès.

Épopées

TâcheDescriptionCompétences requises

Obtenez des AWS informations d'identification.

Vérifiez vos AWS informations d'identification et votre accès à votre compte. Pour obtenir des instructions, consultez la section Configuration et paramètres des fichiers d'identification dans la AWS CLI documentation.

AWS DevOps, AWS en général

Pour cloner le référentiel.

Clonez le GitHub référentiel fourni avec ce modèle :

git clone https://github.com/aws-samples/private-s3-vpce
AWS DevOps, AWS en général

Configurez les variables.

  1. Sur votre ordinateur, dans le GitHub référentiel, ouvrez le terraform dossier :

    cd terraform
  2. Ouvrez le example.tfvars fichier et personnalisez les paramètres en fonction de vos besoins.

AWS DevOps, AWS en général

Déployez la solution.

  1. Dans le terraform dossier, exécutez Terraform et transmettez les variables que vous avez personnalisées :

    terraform apply -var-file="example.tfvars"
  2. Vérifiez que les ressources indiquées dans le schéma d'architecture ont été déployées avec succès.

AWS DevOps, AWS en général
TâcheDescriptionCompétences requises

Créez un fichier de test.

Chargez un fichier sur Amazon S3 afin de créer un scénario de test pour le téléchargement du fichier. Vous pouvez utiliser la console Amazon S3 ou la AWS CLI commande suivante :

aws s3 cp /path/to/testfile s3://your-bucket-name/testfile
AWS DevOps, AWS en général

Testez la fonctionnalité des URL présignées.

  1. Envoyez une demande à l'Application Load Balancer pour créer une URL présignée pour le fichier de test à l'aide de awscurl :

    awscurl https://your-domain-name/api/get_url?key=testfile

    Cette étape crée une signature valide à partir de vos informations d'identification, qui sera validée par API Gateway.

  2. Analysez le lien contenu dans la réponse que vous avez reçue à l'étape précédente et ouvrez l'URL présignée pour télécharger le fichier.

AWS DevOps, AWS en général

Nettoyer.

Assurez-vous de supprimer les ressources lorsqu'elles ne sont plus nécessaires :

terraform destroy
AWS DevOps, AWS en général

Résolution des problèmes

ProblèmeSolution

Les noms de clés d'objets S3 comportant des caractères spéciaux tels que des signes numériques (#) interrompent les paramètres d'URL et génèrent des erreurs.

Codez correctement les paramètres d'URL et assurez-vous que le nom de la clé de l'objet S3 est conforme aux directives d'Amazon S3.

Ressources connexes

Amazon S3 :

Amazon API Gateway :

Application Load Balancer :