Consolidez la génération d'URL présignées Amazon S3 et le téléchargement d'objets en utilisant un point de terminaison associé à des adresses IP statiques - 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.

Consolidez la génération d'URL présignées Amazon S3 et le téléchargement d'objets en utilisant un point de terminaison associé à des adresses IP statiques

Song Jin, Eunhye Jo et Jun Soung Lee, Amazon Web Services

Récapitulatif

Ce modèle simplifie l'accès à Amazon Simple Storage Service (Amazon S3) en créant une URLs signature présignée sécurisée et personnalisée pour le téléchargement d'objets. La solution fournit un point de terminaison unique doté d'un domaine unique et d'adresses IP statiques. Il est conçu pour les clients qui ont besoin de consolider à la fois l'API et les points de terminaison Amazon S3 sous un domaine unifié avec des adresses IP statiques. Le cas d'utilisation implique que les utilisateurs suivent une politique de pare-feu basée sur des adresses IP et des listes de domaines autorisés, limitant l'accès aux API à des domaines et adresses IP spécifiques.

L'architecture utilise des clés Services AWS AWS Global Accelerator, notamment Amazon API Gateway AWS Lambda, Application Load Balancer et Amazon S3. AWS PrivateLink Cette conception centralise l'API pour générer le pré-signé URLs et le point de terminaison Amazon S3 sous un seul domaine, lié à un accélérateur doté de deux adresses IP statiques. Par conséquent, les utilisateurs peuvent facilement demander URLs et télécharger des objets Amazon S3 présignés via un point de terminaison de domaine unifié avec des adresses IP statiques.

Cette architecture est particulièrement avantageuse pour les clients soumis à des politiques ou à des exigences de conformité strictes, tels que ceux des secteurs public, médical et financier.

Conditions préalables et limitations

Prérequis

  • Un actif Compte AWS

  • Une zone hébergée publique pour votre nom de domaine personnalisé

  • Un domaine importé dans AWS Certificate Manager (ACM) dans le domaine Région AWS de votre choix

Limites

  • Le nom du compartiment Amazon S3 doit correspondre au nom de domaine du point de terminaison. Cette exigence vise à garantir que le point de terminaison Amazon S3 peut être desservi via le point de terminaison d'API unique.

  • Le nom de domaine personnalisé utilisé dans API Gateway doit correspondre au nom de domaine de l'unique point de terminaison de l'API.

  • Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section AWS Services par région. Pour des points de terminaison spécifiques, consultez Points de terminaison de service et quotas, puis choisissez le lien correspondant au service.

Architecture

Le schéma suivant montre l'architecture et le flux de travail cibles pour ce modèle.

Composants et flux de travail pour la génération d'URL présignées et le téléchargement d'objets.

Le diagramme illustre le concept et le flux de travail suivants :

  1. Un utilisateur lance une demande pour générer une URL présignée en utilisant le point de terminaison personnalisé desservi AWS Global Accelerator, en utilisant le nom de domaine personnalisé et les adresses IP associées.

  2. Une fonction Lambda génère l'URL présignée, pointant vers le point de terminaison personnalisé. Il répond par une redirection 301 qui contient l'URL présignée générée. Par le biais de l'URL présignée redirigée, l'utilisateur télécharge automatiquement l'objet en utilisant le point de terminaison personnalisé servi via Global Accelerator.

Les composants de l'architecture globale pour la génération d'URL présignées et le flux de téléchargement d'objets sont les suivants :

  • Fourniture d'adresses IP statiques par Global Accelerator.

  • Enregistrement de l'alias de l'accélérateur en tant qu'enregistrement A dans la zone hébergée publique Amazon Route 53 avec le nom de domaine personnalisé.

  • Création d'un compartiment Amazon S3 avec un nom de compartiment correspondant au nom de domaine personnalisé enregistré.

  • Création de points de terminaison VPC pour API Gateway et le service Amazon S3.

  • Configuration d'un Application Load Balancer orienté vers l'interne pour se connecter à Global Accelerator.

  • Attribution d'un nom de domaine personnalisé pour API Gateway avec un certificat ACM attaché.

  • Déploiement d'une API Gateway privée intégrée à une fonction Lambda.

  • La fonction Lambda est dotée d'un rôle AWS Identity and Access Management (IAM) attaché (avec GetObjectautorisations).

Outils

Services AWS

  • Amazon API Gateway vous aide à créer, publier, gérer, surveiller et sécuriser REST, HTTP, et ce, WebSocket APIs à n'importe quelle échelle.

  • Les équilibreurs de charge des applications distribuent le trafic applicatif entrant sur plusieurs cibles, telles que les instances Amazon Elastic Compute Cloud (Amazon EC2), dans plusieurs zones de disponibilité.

  • AWS Certificate Manager (ACM) vous aide à créer, à stocker et à renouveler des certificats et clés SSL/TLS X.509 publics et privés qui protègent vos AWS sites Web et vos applications.

  • AWS Cloud Development Kit (AWS CDK)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.

  • AWS Global Acceleratorest un service mondial qui prend en charge plusieurs Régions AWS terminaux. Vous pouvez créer des accélérateurs qui dirigent le trafic vers des points de terminaison optimaux sur le réseau AWS mondial. Il permet d'améliorer la disponibilité et les performances de vos applications Internet qui sont utilisées par un public mondial.

  • AWS Identity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.

  • AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

  • AWS PrivateLinkvous permet de créer des connexions privées unidirectionnelles entre vos clouds privés virtuels (VPCs) et des services extérieurs au VPC.

  • Amazon Route 53 est un service Web DNS hautement disponible et évolutif.

  • Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

Autres outils

  • 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.

Référentiel de code

Vous pouvez déployer ce modèle en utilisant le AWS CDK ou Terraform selon vos préférences. La section Epics contient des instructions pour les deux méthodes de déploiement. Le code de ce modèle est disponible dans les GitHub référentiels suivants :

Bonnes pratiques

  • Pour améliorer la sécurité de l'environnement de production, il est essentiel de mettre en œuvre des mécanismes d'autorisation, tels qu'Amazon Cognito, afin de restreindre l'accès à l'API de PresignedUrl génération.

  • Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections Accorder le moindre privilège et Bonnes pratiques en matière de sécurité dans la documentation IAM.

Épopées

TâcheDescriptionCompétences requises

Choisissez un nom de domaine.

Choisissez un nom de domaine public pour le point de terminaison Amazon S3 unifié. Le nom de domaine est également utilisé comme nom du compartiment Amazon S3.

Administrateur AWS, administrateur réseau

Créez une zone hébergée publique.

Créez une zone hébergée publique dans Amazon Route 53. Son nom de domaine doit correspondre au nom de domaine utilisé dans API Gateway.

Administrateur AWS, administrateur réseau

Préparez un certificat SSL.

Utilisez AWS Certificate Manager (ACM) pour demander ou importer un certificat SSL pour le domaine de votre application Web.

Administrateur AWS, administrateur réseau
TâcheDescriptionCompétences requises

Configurez l'environnement de développement Terraform.

Pour configurer l'environnement de développement, procédez comme suit :

  1. Installez Terraform version 1.0 ou ultérieure.

  2. Clonez le dépôt GitHub s3- presignedurl-staticips-endpoint-with -terraform en exécutant la commande suivante dans une fenêtre de terminal :

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform.git

Administrateur AWS, administrateur du cloud

Modifiez les provider.tffichiers .tfvars et.

  1. Création des .tfvars fichiers requis : créez des apg.tfvars fichiers à la fois dans les 2.apigw_s3_lambda répertoires 1.vpc_alb_ga et. Ces fichiers contiendront les valeurs des variables spécifiques à votre environnement.

    • Pour 1.vpc_alb_ga/apg.tfvars créer un fichier avec le modèle suivant :

      hcl environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
    • Pour 2.apigw_s3_lambda/apg.tfvars créer un fichier avec le modèle suivant (vous devrez le mettre à jour une vpc_id fois l'étape 1 terminée) :

      hcl vpc_id = "vpc-xxxxxxxxx" # Update this with the VPC ID output from step 1 environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
  2. Modifier les provider.tf fichiers : dans les 2.apigw_s3_lambda dossiers 1.vpc_alb_ga et, modifiez les provider.tf fichiers en fonction de votre AWS configuration locale :

    hcl provider "aws" { region = "ap-northeast-2" # Change to your preferred region profile = "apg" # Change to your AWS profile name }

Notez ce qui suit :

  • Remplacez les valeurs d'espace réservé dans les .tfvars fichiers par vos valeurs réelles.

  • Après avoir terminé le premier déploiement de Terraform (1.vpc_alb_ga), mettez à jour la vpc_id valeur 2.apigw_s3_lambda/apg.tfvars avec l'ID VPC de la sortie.

  • Assurez-vous que le nom AWS de votre profil dans le provider.tf fichier correspond à un profil existant dans votre ~/.aws/credentials fichier.

  • La valeur du domaine doit correspondre à votre domaine de zone hébergée Route 53.

  • Le domaine s3_bucket_prefix combiné avec formera le nom de votre compartiment Amazon S3 (par exemple,your-bucket-prefix.your-domain.com).

  • Si vous modifiezaws_region, vous devrez peut-être également mettre à jour les zones de disponibilité codées en dur dans les main.tf fichiers pour qu'elles correspondent à celles que vous avez choisies Région AWS.

Administrateur AWS, administrateur du cloud

Fournir des ressources réseau.

Pour approvisionner les ressources réseau, exécutez les commandes suivantes :

cd ./2.vpc_alb_ga terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars

Pendant l'exécution de la apply commande, tapez yes lorsque vous y êtes invité.

Administrateur AWS, administrateur du cloud

Provisionnez API Gateway, Amazon S3 et Lambda.

Pour provisionner des ressources réseau, utilisez les commandes suivantes :

cd ./2.apigw_s3_lambda terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars
Administrateur AWS, administrateur du cloud
TâcheDescriptionCompétences requises

Configurez l'environnement AWS CDK de développement.

Pour configurer l'environnement de développement, procédez comme suit :

  1. Installez le AWS CDK.

  2. Clonez le dépôt GitHub s3- presignedurl-staticips-endpoint-with -cdk en exécutant la commande suivante dans une fenêtre de terminal :

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk.git

Administrateur AWS, administrateur du cloud

Configurez les paramètres du domaine dans le config/index.ts fichier.

Pour modifier les options de la variable constante, utilisez les commandes suivantes :

export const options = { certificateArn: '{arn of the acm which created before}', dnsAttr: { zoneName: '{public hosted zone name}', hostedZoneId: 'hosted zone Id', }, domainNamePrefix: '{Prefix for the domain}', presignPath: 'presign', objectsPath: 'objects', };

Dans les commandes, remplacez chaque espace réservé par vos propres informations :

  • Remplacez '{arn of the acm which created before}' par votre certificat ACM Amazon Resource Name (ARN).

  • '{public hosted zone name}'Remplacez-le par votre nom de domaine.

  • 'hosted zone Id'Remplacez-le par votre ID de zone hébergée Route 53.

  • '{Prefix for the domain}'Remplacez-le par le préfixe de domaine que vous souhaitez utiliser.

  • En option, modifiez 'presign' et 'objects' tracez les chemins si nécessaire pour votre cas d'utilisation spécifique.

Administrateur AWS, administrateur du cloud

Déployez les piles.

Pour déployer deux piles, l'une pour le cloud privé virtuel (VPC) et l'autre pour l'application, utilisez la commande suivante :

$ npm install $ cdk synth $ cdk deploy --all
Administrateur AWS, administrateur du cloud
TâcheDescriptionCompétences requises

Vérifiez les adresses IP du point de terminaison.

Pour vérifier que le domaine correspondant à ce modèle possède des adresses IP statiques, utilisez la commande suivante :

nslookup ${s3-bucket-prefix}.${domain}
Administrateur réseau

Téléchargez un fichier de test que vous pourrez télécharger ultérieurement.

Téléchargez le fichier de test dans le '/objects' dossier du compartiment Amazon S3.

Administrateur AWS, administrateur du cloud

Appelez l'API pour générer une URL présignée.

Pour générer une URL présignée, appelez l'URL depuis un navigateur ou un client API (par exemple, Postman) en utilisant le format suivant :

https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}

Remplacez les valeurs d'espace réservé dans ${s3-bucket-prefix} et ${domain} par les valeurs que vous avez définies lors des étapes précédentes.

Propriétaire de l'application

Vérifiez le résultat.

Le résultat attendu est que vous devriez recevoir un code d'état de redirection 301 (déplacé définitivement). Cette réponse contiendra l'URL présignée, qui devrait automatiquement lancer le téléchargement de votre fichier de test.

Ingénieur de test
TâcheDescriptionCompétences requises

Détruisez les ressources API Gateway, Amazon S3 et Lambda.

Pour supprimer des ressources, utilisez les commandes suivantes :

cd ./2.apigw_s3_lambda terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Administrateur AWS, administrateur du cloud

Détruisez les ressources du réseau.

Pour supprimer des ressources réseau, utilisez les commandes suivantes :

cd ./1.vpc_alb_ga terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
Administrateur AWS, administrateur du cloud
TâcheDescriptionCompétences requises

Détruisez les piles.

Pour détruire à la fois le VPC et les piles d'applications, utilisez la commande suivante :

$ cdk destroy --all
Administrateur AWS, administrateur du cloud

Videz et supprimez les compartiments Amazon S3.

Videz et supprimez l'objet (compartiment Amazon S3) et les journaux (compartiment Amazon S3) qui ne sont pas supprimés par défaut.

Les noms des compartiments Amazon S3 sont ${s3-bucket-prefix}.${domain} et${s3-bucket-prefix}.${domain}-logs.

Si vous préférez utiliser le AWS Command Line Interface (AWS CLI) pour supprimer les compartiments, utilisez les commandes suivantes :

$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force $ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force

Remplacez ${s3-bucket-prefix} et ${domain} par les valeurs que vous avez définies dans les étapes précédentes. , /p>

Administrateur AWS, administrateur du cloud

Ressources connexes

AWS Blogs