Les transferts depuis Amazon S3 peuvent utiliser une distribution Amazon CloudFront comme chemin de sortie.
Les transferts de données via CloudFront peuvent bénéficier de coûts de sortie AWS inférieurs à ceux d'un transfert direct depuis S3. Pour en savoir plus, consultez les tarifs CloudFront et les frais de sortie S3.L'utilisation de CloudFront comme chemin de sortie n'expose pas vos objets S3 au public. Consultez la section L'utilisation de CloudFront expose-t-elle mes objets au public ?
Présentation
Pour transférer des données S3 via CloudFront, procédez comme suit :
- Configurer les autorisations IAM
- Configurer l'accès à votre bucket S3
- Créer une distribution CloudFront pour votre bucket S3
- Créer une tâche de transfert
Configurer les autorisations IAM
Suivez les instructions de la section Autorisations de transfert sans agent pour accorder les autorisations Google Cloud requises.
Configurer l'accès à votre bucket S3
Suivez les instructions de la section Configurer l'accès à une source : Amazon S3 pour configurer l'accès à vos données dans Amazon S3.
Créer une distribution CloudFront pour votre bucket S3
- Dans votre compte AWS, accédez à CloudFront.
- Cliquez sur Create a CloudFront distribution (Créer une distribution CloudFront).
- Sous Origin domain (Domaine d'origine), sélectionnez votre bucket S3.
- Le champ Origin path (Chemin d'origine) doit être laissé vide.
- Acceptez le Origin name (Nom d'origine) rempli automatiquement ou spécifiez votre propre valeur.
- Dans la section Origin access (Accès à l'origine), sélectionnez Public. Cela ne rend pas votre bucket public, mais indique à CloudFront qu'aucun mécanisme d'accès ne doit être configuré.
- Dans la section Cache key and origin requests (Clé de cache et requêtes d'origine) :
- Pour Cache policy (Règle de cache), sélectionnez CachingDisabled. Cela empêche CloudFront de mettre en cache les requêtes et de les diffuser auprès des utilisateurs non authentifiés.
- Pour Origin request policy (Règle de requête d'origine), sélectionnez AllViewerExceptHostHeader. Cela permet à CloudFront de transférer les en-têtes d'authentification vers S3, afin que le service de transfert de stockage puisse accéder à votre bucket avec vos identifiants sécurisés.
- Dans la section Web Application Firewall (WAF) (Pare-feu d'application Web), sélectionnez Do not enable (Ne pas activer).
- Vous pouvez également choisir une Price class (Classe de prix). Le service de transfert de stockage sélectionne des pools de workers en fonction de la région du bucket source. Les tarifs CloudFront sont donc appliqués dans cette région. Pour bénéficier des tarifs les plus bas, assurez-vous que votre bucket source se trouve aux États-Unis ou en Europe, ou sélectionnez Use only North America and Europe (Utiliser uniquement l'Amérique du Nord et l'Europe) comme Price class (Classe de prix) dans CloudFront.
Cliquez sur Create CloudFront distribution (Créer une distribution CloudFront).
Une fois la distribution créée, la page de détails de la distribution CloudFront s'affiche.
Notez le Distribution domain name (Nom de domaine de la distribution). Exemple :
https://dy1h2n3l4ob56.cloudfront.net. Si la page d'informations n'inclut pas le protocolehttps://devant le nom de domaine de la distribution, vous devrez l'ajouter vous-même lors de la création de la tâche de transfert.
Créer une tâche de transfert
Le transfert via une distribution CloudFront est compatible avec la Google Cloud console et l'API REST.
N'incluez pas d'informations sensibles telles que des informations permettant d'identifier personnellement l'utilisateur ou des données de sécurité dans le nom de votre tâche de transfert. Les noms de ressources peuvent être propagés aux noms d'autres ressources Google Cloud et peuvent être exposés à des systèmes internes de Google en dehors de votre projet.Google Cloud Console
Pour créer un transfert à l'aide de la Google Cloud console, suivez les instructions pour créer un transfert.
Lorsque vous êtes invité à saisir le CloudFront domain (Domaine CloudFront), saisissez le nom de domaine de la distribution
que vous avez noté dans la section précédente. Vous pouvez également trouver cette valeur dans la section CloudFront de la console Amazon Web Services. Elle se présente au format https://dy1h2n3l4ob56.cloudfront.net.
API REST
Pour créer un transfert à l'aide de l'API REST, suivez l'exemple de la page Créer des transferts.
Spécifiez le nom de domaine de la distribution comme valeur du champ transferSpec.awsS3DataSource.cloudfrontDomain :
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
"awsAccessKey": {
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
},
...
}
Dépannage
Erreur AuthorizationHeaderMalformed
Si vous rencontrez une erreur AuthorizationHeaderMalformed qui spécifie une
incompatibilité de région (par exemple, the region 'Location A' is wrong; expecting
'Location B'), cela est probablement dû à une configuration CloudFront non compatible.
Cette erreur se produit si vous utilisez une seule distribution CloudFront pour plusieurs buckets S3 situés dans différentes régions AWS.
Pour résoudre ce problème, assurez-vous que chaque distribution CloudFront est associée à des buckets S3 dans une seule région AWS. Si vous avez des buckets S3 dans différentes régions, créez une distribution CloudFront distincte pour chaque région.
Questions fréquentes
L'utilisation de CloudFront expose-t-elle mes objets au public ?
Non. Si vous avez suivi les étapes de configuration de cette page, vos objets ne sont pas exposés au public.
- CloudFront n'a pas d'accès direct à vos objets S3.
- Les utilisateurs reçoivent une erreur
permission denied(autorisation refusée) s'ils tentent d'accéder à vos objets directement ou via CloudFront (si votre bucket est privé). - Le service de transfert de stockage signe les requêtes adressées à CloudFront à l'aide des identifiants que vous avez fournis dans la tâche de transfert, ce qui nous permet de télécharger vos objets de manière sécurisée comme si nous les téléchargions directement depuis S3. Cela fonctionne grâce au paramètre de transfert d'en-tête
AllViewerExceptHostHeader.