

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
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

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

## Résumé
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

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
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Conditions préalables**
+ 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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

## Architecture
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

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.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


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.

1. 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 Gestion des identités et des accès AWS (IAM) attaché (avec [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)autorisations).

## Outils
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**Services AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 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](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) 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)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) 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)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner AWS Cloud l'infrastructure dans le code.
+ [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html)est 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.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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 PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)vous 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](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) est un service Web DNS hautement disponible et évolutif.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 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](https://www.terraform.io/) 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](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-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 :
+ **AWS CDK**— [s3- presignedurl-staticips-endpoint-with -cdk](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk)
+ **Terraform** — [s3](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform) - -terraform presignedurl-staticips-endpoint-with

## Bonnes pratiques
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ 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](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

## Épopées
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Préparez l'environnement
<a name="prepare-the-environment"></a>


| Sous-tâche | Description | Compé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](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) 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](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) ou [importer](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) un certificat SSL pour le domaine de votre application Web. | Administrateur AWS, administrateur réseau | 

### Déployez le modèle avec Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'environnement de développement Terraform. | Pour configurer l'environnement de développement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrateur AWS, administrateur du cloud | 
| Modifiez les **`provider.tf`**fichiers `.tfvars` et. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Notez ce qui suit :**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrateur AWS, administrateur du cloud | 
| Fournir des ressources réseau. | Pour approvisionner les ressources réseau, exécutez les commandes suivantes :<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>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 :<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrateur AWS, administrateur du cloud | 

### Déployez le modèle avec AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez l'environnement AWS CDK de développement. | Pour configurer l'environnement de développement, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | 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 :<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>Dans les commandes, remplacez chaque espace réservé par vos propres informations :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | 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 :<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrateur AWS, administrateur du cloud | 

### Testez le modèle
<a name="test-the-pattern"></a>


| Sous-tâche | Description | Compé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 :<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | 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](https://www.postman.com/product/what-is-postman/)) en utilisant le format suivant :<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>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 | 

### Nettoyez avec Terraform
<a name="clean-up-with-terraform"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détruisez les ressources API Gateway, Amazon S3 et Lambda. | Pour supprimer des ressources, utilisez les commandes suivantes :<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrateur AWS, administrateur du cloud | 
| Détruisez les ressources du réseau. | Pour supprimer des ressources réseau, utilisez les commandes suivantes :<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrateur AWS, administrateur du cloud | 

### Nettoyez avec AWS CDK
<a name="clean-up-with-cdk"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détruisez les piles. | Pour détruire à la fois le VPC et les piles d'applications, utilisez la commande suivante :<pre>$ cdk destroy --all</pre> | Administrateur AWS, administrateur du cloud | 
| Videz et supprimez les compartiments Amazon S3. | [Videz](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) et [supprimez](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) 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)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) pour supprimer les compartiments, utilisez les commandes suivantes :<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>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
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blogs**
+ [Accès à un Amazon API Gateway via des adresses IP statiques fournies par AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Générez une URL présignée en mode modulaire AWS CDK pour JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hébergement de sites Web statiques HTTPS internes avec ALB, S3 et PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 