aws cloudfront - 使用 S3 拒绝访问

Posted

技术标签:

【中文标题】aws cloudfront - 使用 S3 拒绝访问【英文标题】:aws cloudfront - Access Denied with S3 【发布时间】:2021-06-26 08:23:23 【问题描述】:

我已经创建了一个云端分发和 S3 存储桶。 访问 Cloudfront url 时遇到 Access Denied 错误 asdf123456.cloudfront.net

我尝试在我的 cloudformation 模板中添加 custom error message,但仍然无法正常工作。

我在 Cloudformation 中的 Json 模板


    "AWSTemplateFormatVersion": "2010-09-09",

    "Parameters": 
        "S3BucketName": 
            "Type": "String",
            "Default": "test-server-dev"
        ,
        "S3BucketWebName": 
          "Type": "String",
          "Default": "test-web-dev"
        ,
        "CloudfrontDistributionOriginId": 
          "Type": "String",
          "Default": "test_dev"
        
    ,

    "Resources": 
      "S3BucketWeb": 
        "Type": "AWS::S3::Bucket",
        "Properties": 
          "BucketName": 
              "Ref": "S3BucketWebName"
           
        
      ,
      "CloudfrontDistributionWeb": 
        "Type" : "AWS::CloudFront::Distribution",
        "Properties" : 
            "DistributionConfig" : 
              "CustomErrorResponses" : [
                
                  "ErrorCachingMinTTL" : 300,
                  "ErrorCode" : 403,
                  "ResponseCode" : 200,
                  "ResponsePagePath" : "/index.html"
                
              ],
              "DefaultCacheBehavior":             
                  "AllowedMethods" : ["GET", "HEAD"],
                  "CachedMethods" : ["GET", "HEAD"],
                  "CachePolicyId" : "658327ea-f89d-4fab-a63d-7e88639e58f6",
                  "Compress" : false,
                  "TargetOriginId" : 
                    "Ref": "S3BucketWebName"
                  ,
                  "ViewerProtocolPolicy" : "redirect-to-https"
              ,
              "DefaultRootObject" : "index.html",
              "Enabled" : true,
              "HttpVersion": "http2",
              "IPV6Enabled" : true,
              "Origins" : [
                
                  "ConnectionAttempts" : 3,
                  "ConnectionTimeout" : 10,
                  "DomainName" : 
                    "Fn::GetAtt": [
                      "S3BucketWeb",
                      "DomainName"
                    ]
                  ,
                  "Id" : 
                    "Ref": "S3BucketWebName"
                  ,
                  "S3OriginConfig": 
                    "OriginAccessIdentity" : ""
                  
                
              ],
              "Restrictions" : 
                "GeoRestriction" : 
                  "RestrictionType" : "none"
                
              ,
              "ViewerCertificate" : 
                "CloudFrontDefaultCertificate" : true
              
            
        
      
    
  

更新

存储桶政策


    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        
            "Sid": "1",
            "Effect": "Allow",
            "Principal": 
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EBJE9SUE3W57Q"
            ,
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::test-web-dev/*"
        
    ]

【问题讨论】:

您是否设置了存储桶策略? @Marcin 我在上面更新了存储桶策略 为什么你的OriginAccessIdentity 是空的? @Marcin 因为我想自动创建新的 OriginAccessIdentity 进行测试,所以我在 Aws 控制台中手动创建了 OriginAccessIdentity 但它是否与您的 CF 发行版相关联?它与您的存储桶策略中的相同吗? 【参考方案1】:

我无法正确理解这个问题,但如果您在上传云形成模板时拒绝 s3 访问,那么您可能缺少允许执行此类操作然后将其附加到形成模板的安全组或 IAM 角色自己。

【讨论】:

当然感谢您尝试在 S3 中访问的对象本身具有附加限制,或者存储桶策略可能限制访问。

以上是关于aws cloudfront - 使用 S3 拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFront 拒绝访问 S3 存储桶

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

Cloudfront 访问被拒绝

AWS CloudFront 签名 URL 的访问被拒绝

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

使用 AWS S3 与 Cloudfront