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

如何通过CloudFormation YAML配置仅允许CloudFront访问的S3策略

正确的CloudFormation YAML配置:S3桶仅允许指定CloudFront分发访问

直接上可复用的完整配置片段,包含桶的创建和对应的权限策略:

Resources:
  MyPrivateS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-private-bucket-example # 替换成你的桶名
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true

  MyBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref MyPrivateS3Bucket
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: cloudfront.amazonaws.com
            Action:
              - s3:GetObject
            Resource: !Sub 'arn:aws:s3:::${MyPrivateS3Bucket}/*'
            Condition:
              StringEquals:
                AWS:SourceArn: !Sub 'arn:aws:cloudfront::${AWS::AccountId}:distribution/${MyCloudFrontDistributionId}' # 替换MyCloudFrontDistributionId为你的分发ID

关键配置说明

  • 彻底锁死公共访问:PublicAccessBlockConfiguration的四个参数全部设为true,从根源上杜绝任何公开访问桶的可能,哪怕不小心设置了公开ACL也不会生效。
  • 用!Sub避免硬编码错误:
    • Resource通过!Sub动态拼接桶的ARN和对象路径,不用手动输入桶名,减少拼写错误。
    • 条件里的AWS:SourceArn同样用!Sub生成CloudFront分发的ARN,自动填充当前账户ID,只需替换MyCloudFrontDistributionId为你实际的分发ID即可,确保只有指定的CloudFront分发能访问桶内对象。
  • 最小权限原则:只给CloudFront服务授予s3:GetObject权限,刚好满足分发静态资源的需求,避免过度授权。

之前出现"Policy has invalid"错误,大概率是硬编码ARN时格式不对,或者没正确使用CloudFormation的变量替换函数。用!Sub自动填充动态值后,就能规避这类格式问题。

内容的提问来源于stack exchange,提问作者Stéphane GRILLON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:41