amazon-web-services - Cloudfront 的 Cloudformation S3 存储桶主体

标签 amazon-web-services amazon-s3 aws-cloudformation amazon-cloudfront

我正在尝试为 S3 存储桶上的 cloudfront 分发创建一个 Yaml 模板。 我不知道如何在 BucketPolicy 上添加 principal

我想知道如何替换 CloudFront 源访问身份 XXXXXXXXXX 上的 XXXXXXXXXXX 原则上用于将通过部署模板生成的云前端。

还有没有办法在 yaml 模板上添加 html、css 同步过程(我现在通过 aws cli 进行)?

请告诉我。 TIA

 AWSTemplateFormatVersion: 2010-09-09
 Resources:
   Bucket:
     Type: 'AWS::S3::Bucket'
     Properties:
       BucketName: pridesys.webbucket
       AccessControl: Private 
       WebsiteConfiguration:
         IndexDocument: index.html

   BucketPolicy:
     Type: AWS::S3::BucketPolicy
     Properties:
       Bucket: !Ref Bucket
       PolicyDocument:
         Id: ReportPolicy
         Version: "2012-10-17"
         Statement:
           - Sid: "1"
             Effect: Allow
             Action: "s3:GetObject"
             Principal:
               AWS: "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXX"
             Resource: !Join ['', ['arn:aws:s3:::', !Ref Bucket, '/*']]

   Distro:
     Type: 'AWS::CloudFront::Distribution'
     Properties:
       DistributionConfig:
         Origins:
           - DomainName: !GetAtt Bucket.DomainName
             Id: foo
             S3OriginConfig: {}
          Enabled: True
         DefaultRootObject: index.html
         DefaultCacheBehavior:
           ForwardedValues:
             QueryString: False
           TargetOriginId: foo
           ViewerProtocolPolicy: allow-all

最佳答案

以下是 CloudFront 的 S3 源身份配置的有效示例:

  WebUIBucket:
    Type: AWS::S3::Bucket
  CloudFrontOriginIdentity:
    Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: "origin identity"
  WebUIPolicy:
    Type: AWS::S3::BucketPolicy
    Properties: 
      Bucket:
        Ref: WebUIBucket
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              CanonicalUser:
                Fn::GetAtt: [ CloudFrontOriginIdentity , S3CanonicalUserId ]
            Action: "s3:GetObject"
            Resource: !Sub "${WebUIBucket.Arn}/*"
  WebpageCDN:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: !Sub "${WebUIBucket}.s3.amazonaws.com"
            Id: webpage
            S3OriginConfig:
              OriginAccessIdentity: !Sub "origin-access-identity/cloudfront/${CloudFrontOriginIdentity}"

至于将 Assets 同步到 S3 存储桶,CloudFormation 功能无法提供此功能。您要么必须实现 CustomResource,要么继续使用 CLI。

关于amazon-web-services - Cloudfront 的 Cloudformation S3 存储桶主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53871202/

相关文章:

amazon-web-services - Boto3 错误 : The AWS Access Key Id you provided does not exist in our records

java - 一个亚马逊请求可以发送多少件商品?

json - 通过 Cloudformation 在 S3 存储桶上创建 SQS 事件时,通知目标服务区域对于存储桶位置约束无效

android - Amazon S3 上传问题 Android SDK,com.amazonaws.AmazonClientException : More data read (4567265) than expected (4561427)

javascript - 将 getItem 与主键和排序键一起使用

amazon-web-services - 是否可以将 AWS Cognito 托管 UI 与 Amazon Pinpoint 集成以进行分析?

ruby-on-rails - 如何设置 Amazon S3、回形针和 ENV 变量

amazon-web-services - 我们如何检索 ec2 客户端标签

amazon-web-services - AWS Cloudformation - 使用安全组名称创建 EC2 实例

amazon-web-services - AWS Cloud Formation WordPress URL 超时