Je souhaite avoir une distribution CloudFront avec accès à un compartiment S3 privé. Pour cela, je dois créer une identité d'accès à l'origine. Je peux le faire manuellement en utilisant la console AWS, mais je voulais le créer via un script CloudFormation ou avec Serverless (en utilisant serverless.yml
). Ce faisant, je suis en mesure d'ajouter un identifiant physique de l'identité d'accès à l'origine à ma distribution CloudFront (en utilisant un script).
Documentation pertinente: https://docs.aws. amazon.com/AWSCloudFormation/latest/UserGuide/quickref-cloudfront.html
J'ai essayé ceci:
myDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Origins: - DomainName:bucket.s3.amazonaws.com Id: myS3Origin S3OriginConfig: { OriginAccessIdentity:origin-access-identity/cloudfront/ !Ref cloudfrontoriginaccessidentity } Enabled: 'true' Comment: Some comment DefaultCacheBehavior: ForwardedValues: QueryString: 'false' Cookies: Forward: none AllowedMethods: - GET - HEAD - OPTIONS TargetOriginId: myS3Origin ViewerProtocolPolicy: redirect-to-https PriceClass: PriceClass_200 ViewerCertificate: CloudFrontDefaultCertificate: 'true' cloudfrontoriginaccessidentity: Type: AWS::CloudFront::CloudFrontOriginAccessIdentity Properties: CloudFrontOriginAccessIdentityConfig: Comment: "some comment"
Je dois créer un identité d'accès à l'origine et une distribution CloudFront ayant cette identité. Pouvons-nous faire ces deux choses dans un seul script CloudFormation ou avec Serverless (en utilisant serverless.yml
)?
3 Réponses :
Oui, vous pouvez créer les deux dans le même modèle CloudFormation. cloudfrontoriginaccessidentity
est une ressource distincte et doit donc être déplacée de dessous maDistribution
.
myDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Origins: - DomainName:bucket.s3.amazonaws.com Id: myS3Origin S3OriginConfig: { OriginAccessIdentity:origin-access-identity/cloudfront/ !Ref cloudfrontoriginaccessidentity } Enabled: 'true' Comment: Some comment DefaultCacheBehavior: ForwardedValues: QueryString: 'false' Cookies: Forward: none AllowedMethods: - GET - HEAD - OPTIONS TargetOriginId: myS3Origin ViewerProtocolPolicy: redirect-to-https PriceClass: PriceClass_200 ViewerCertificate: CloudFrontDefaultCertificate: 'true' cloudfrontoriginaccessidentity: Type: AWS::CloudFront::CloudFrontOriginAccessIdentity Properties: CloudFrontOriginAccessIdentityConfig: Comment: "toyoguard-acces-identity"
J'obtiens "L'identité d'accès à l'origine spécifiée n'existe pas ou n'est pas valide. (Service: AmazonCloudFront; Code d'état: 400; Code d'erreur: InvalidOriginAccessIdentity; ID de demande: 79f6a033-3202-11e9-911d-0d536d188164)." Le problème est que nous devons mentionner l'identité d'accès à l'origine comme "OriginAccessIdentity: identité d'accès à l'origine / cloudfront / ETRA TTARR" sous la configuration d'origine s3. Mais lorsque nous utilisons "! Ref cloudfrontoriginaccessidentity", nous n'obtiendrons que l'identifiant ETRATTARR). Je souhaite ajouter cet identifiant à "OriginAccessIdentity: origin-access-identity
Ce n'est pas la réponse, juste un problème de formatage de la question d'origine.
Vous pouvez certainement créer une identité d'accès à l'origine et la distribution CloudFront dans le même serverless.yml
.
J'ai modifié votre scénario et changé le OriginAccessIdentity
en use Fn::Join
.
myDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Origins: - DomainName:bucket.s3.amazonaws.com Id: myS3Origin S3OriginConfig: OriginAccessIdentity: Fn::Join: - '' - - 'origin-access-identity/cloudfront/' - Ref: cloudfrontoriginaccessidentity Enabled: 'true' Comment: Some comment DefaultCacheBehavior: ForwardedValues: QueryString: 'false' Cookies: Forward: none AllowedMethods: - GET - HEAD - OPTIONS TargetOriginId: myS3Origin ViewerProtocolPolicy: redirect-to-https PriceClass: PriceClass_200 ViewerCertificate: CloudFrontDefaultCertificate: 'true' cloudfrontoriginaccessidentity: Type: AWS::CloudFront::CloudFrontOriginAccessIdentity Properties: CloudFrontOriginAccessIdentityConfig: Comment: "some comment"
Le repo d'exemples sans serveur en a également un excellent exemple: https://github.com/serverless/examples/blob/ master / aws-node-single-page-app-via-cloudfront / serverless.yml
N'oubliez pas d'ajouter la politique et le bucket s3 à votre liste dependOn
Quelle erreur obtenez vous?
@Alex J'obtiens "L'identité d'accès à l'origine spécifiée n'existe pas ou n'est pas valide. (Service: AmazonCloudFront; Code d'état: 400; Code d'erreur: InvalidOriginAccessIdentity; ID de demande: 79f6a033-3202-11e9-911d-0d536d188164)." Le problème est que nous devons mentionner l'identité d'accès à l'origine comme "OriginAccessIdentity: identité d'accès à l'origine / cloudfront / ETRA TTARR" sous la configuration d'origine s3. Mais lorsque nous utilisons "! Ref cloudfrontoriginaccessidentity", nous n'obtiendrons que l'identifiant ETRATTARR). Je souhaite ajouter cet identifiant à "OriginAccessIdentity: origin-access-identity / '