2
votes

Donner la référence OriginAccessIdentity dans CloudFormation ou serverless.yml

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)?


2 commentaires

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 / '


3 Réponses :


2
votes

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"


2 commentaires

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.



3
votes

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


0 commentaires

0
votes

N'oubliez pas d'ajouter la politique et le bucket s3 à votre liste dependOn


0 commentaires