You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFront 502错误(域名解析异常)及CustomOriginConfig下OAI配置咨询

问题描述

我使用S3作为静态网站托管服务并搭配CloudFront,通过CloudFormation和Ansible进行部署,遇到两个问题:

  1. DomainName引发的502错误:在控制台选择源域名时,默认显示存储桶名称(备用域名),其解析值与我在CloudFormation中配置的一致,但手动修改该配置后,502错误就消失了。
  2. CustomOriginConfig下的OAI设置:我仅在S3Origin属性中看到OAI相关配置选项,想咨询使用CustomOriginConfig时该如何设置OAI。

相关部署代码

CloudFormation配置

SourceBucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: {{ S3.Bucket }}
    AccessControl: PublicRead
    WebsiteConfiguration:
      IndexDocument: index.html
    VersioningConfiguration:
      Status: Enabled
    BucketEncryption: 
      ServerSideEncryptionConfiguration: 
      - ServerSideEncryptionByDefault:
          SSEAlgorithm: AES256

WebsiteCDN:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      Comment: CDN for S3-backed website
      Aliases:
       - !Ref SourceBucket
      Enabled: "true"
      DefaultCacheBehavior:
        Compress: true
        TargetOriginId: testid-origin
        ViewerProtocolPolicy: redirect-to-https
        ForwardedValues:
          QueryString: "true"
      DefaultRootObject: index.html
      Origins:
      - DomainName: !Join ['', [!Ref SourceBucket, ".s3.", !Ref 'AWS::Region', ".amazonaws.com"]]
        CustomOriginConfig:
          HTTPPort: '80'
          HTTPSPort: '443'
          OriginProtocolPolicy: https-only
        Id: testid

Ansible main.yml配置

S3:
  Bucket: "test-uat12.<domain>.com.au"

问题解答

1. 502错误的原因及修复

你当前CloudFormation中配置的源DomainName是S3的REST API端点(格式为bucketname.s3.region.amazonaws.com),但S3静态网站托管依赖的是网站托管端点(格式为bucketname.s3-website-region.amazonaws.com),二者行为存在本质差异:

  • REST API端点要求请求签名(除非桶完全公开),而网站托管端点支持匿名访问静态内容;
  • 控制台修改后选择的是网站托管端点,因此能正常返回内容,502错误消失。

修复步骤:
修改CloudFormation中Origins.DomainName为网站托管端点格式,同时调整源协议策略:

Origins:
- DomainName: !Join ['', [!Ref SourceBucket, ".s3-website-", !Ref 'AWS::Region', ".amazonaws.com"]]
  CustomOriginConfig:
    HTTPPort: '80'
    HTTPSPort: '443'
    OriginProtocolPolicy: http-only  # S3网站托管端点仅支持HTTP,必须设为此值
  Id: testid

额外注意:

  • 确保S3桶已启用静态网站托管(代码中已配置WebsiteConfiguration);
  • 保持桶的AccessControl: PublicRead配置,确保匿名用户能访问静态内容。

2. CustomOriginConfig下的OAI使用说明

OAI(Origin Access Identity)是专门为S3Origin(即直接使用S3 REST API端点作为源)设计的身份认证机制,用于让CloudFront成为唯一能访问S3桶的实体,此时桶无需公开访问。

而CustomOriginConfig适用于非S3源(如EC2、自定义服务器)或S3网站托管端点——由于S3网站托管端点不支持OAI认证,因此无法在CustomOriginConfig下使用OAI。

如果想使用OAI,需切换为S3Origin配置,同时用CloudFront的配置替代S3静态网站托管功能:

# 1. 创建CloudFront OAI
CloudFrontOAI:
  Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
  Properties:
    CloudFrontOriginAccessIdentityConfig:
      Comment: OAI for S3 bucket

# 2. 修改S3桶为私有,并配置桶策略允许OAI访问
SourceBucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: {{ S3.Bucket }}
    VersioningConfiguration:
      Status: Enabled
    BucketEncryption: 
      ServerSideEncryptionConfiguration: 
      - ServerSideEncryptionByDefault:
          SSEAlgorithm: AES256
    BucketPolicy:
      Statement:
      - Effect: Allow
        Principal:
          AWS: !Sub 'arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${CloudFrontOAI}'
        Action: s3:GetObject
        Resource: !Sub '${SourceBucket.Arn}/*'

# 3. 修改CloudFront Distribution使用S3Origin
WebsiteCDN:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      Comment: CDN for S3-backed website
      Aliases:
       - !Ref SourceBucket
      Enabled: "true"
      DefaultCacheBehavior:
        Compress: true
        TargetOriginId: testid-origin
        ViewerProtocolPolicy: redirect-to-https
        ForwardedValues:
          QueryString: "true"
      DefaultRootObject: index.html  # 替代S3的IndexDocument配置
      Origins:
      - DomainName: !Join ['', [!Ref SourceBucket, ".s3.", !Ref 'AWS::Region', ".amazonaws.com"]]
        S3OriginConfig:
          OriginAccessIdentity: !Sub 'origin-access-identity/cloudfront/${CloudFrontOAI}'
        Id: testid

内容的提问来源于stack exchange,提问作者choloboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:24:22