Cloudfront 访问被拒绝

Posted

技术标签:

【中文标题】Cloudfront 访问被拒绝【英文标题】:Cloudfront Access denied 【发布时间】:2021-03-06 09:49:33 【问题描述】:

我正在尝试使用 Cloudformation 创建具有 S3 源的 Cloudfront。我想将 S3 对象限制为只能通过 Cloudfront 访问。但是,我使用 S3 直接 url 和 Cloudfront url 都被拒绝访问。

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
  CloudFrontOriginIdentity:
    Type: 'AWS::CloudFront::CloudFrontOriginAccessIdentity'
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: 'origin identity'
  BucketPolicy:
      Type: 'AWS::S3::BucketPolicy'
      Properties:
        Bucket: !Ref S3Bucket
        PolicyDocument:
          Statement:
            - Effect: Allow
              Principal:
                AWS: !Sub 'arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity $CloudFrontOriginIdentity'
              Action: 's3:GetObject'
              Resource: !Sub 'arn:aws:s3:::$S3Bucket/*'
  CloudFrontDistribution:
    Type: 'AWS::CloudFront::Distribution'
    Properties:
      DistributionConfig:
        DefaultCacheBehavior:
          AllowedMethods:
            - GET
            - HEAD
            - OPTIONS
          CachedMethods:
            - GET
            - HEAD
            - OPTIONS
          Compress: true
          DefaultTTL: 3600
          ForwardedValues:
            Cookies:
              Forward: none
            QueryString: false
          MaxTTL: 86400
          MinTTL: 60
          TargetOriginId: s3origin
          ViewerProtocolPolicy: 'redirect-to-https'
        DefaultRootObject: 'index.html'
        Enabled: true
        HttpVersion: http2
        Origins:
          - DomainName: !GetAtt 'S3Bucket.DomainName'
            Id: s3origin
            S3OriginConfig:
              OriginAccessIdentity: !Sub 'origin-access-identity/cloudfront/$CloudFrontOriginIdentity'

在 S3 中,我得到了 index.html,里面只有 Hello。

创建的存储桶策略


"Version": "2008-10-17",
"Statement": [
    
        "Sid": "",
        "Effect": "Allow",
        "Principal": 
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity xxxxxxxxxxxx"
        ,
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::mystack-s3bucket-xxxxxxxxxxx/*"
    
]

【问题讨论】:

你能发布CFn创建的桶策略吗? @jellycsc 添加 【参考方案1】:

我在我的沙盒帐户中部署了您的模板。它按预期工作。存储桶、策略、CF 发行版都很好,我的示例网站可以正常工作。

只要确保您使用 CF 域名从 Internet 访问您的静态网站,而不是存储桶 url,因为我看到有人错误地将存储桶 url 与 CF 一起使用。它的形式为

ddd7asdf234sa.cloudfront.net

【讨论】:

我使用该模板从 CF 和 s3 url 都被拒绝访问。会不会和 S3 文件权限等有关? @Jayp 你修改过它们吗?无论发生什么,这都不是您发布的模板的错。

以上是关于Cloudfront 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFront 签名 URL 的访问被拒绝

Amazon Cloudfront 签名 URL 访问被拒绝问题

带有签名 URL 的 AWS CloudFront:403 访问被拒绝

Cloudfront 提供通过 AWS CDK Python 为 S3 存储桶来源创建的访问被拒绝响应,无需公共访问

aws cloudfront - 使用 S3 拒绝访问

AWS CloudFront 拒绝访问 S3 存储桶