如何在Serverless Framework中为CloudFront S3源配置自定义OriginCustomHeader
在Serverless Framework中配置CloudFront源自定义User-Agent头以限制S3访问
给CloudFront源添加自定义User-Agent头
你只需在CloudFront的Origin配置块中加入OriginCustomHeaders字段,定义要发送到S3的User-Agent头即可。修改后的完整配置如下:
Origins: - DomainName: mybucketsite.com Id: bucketsitepath # 添加自定义User-Agent头配置 OriginCustomHeaders: - HeaderName: User-Agent HeaderValue: "SecretHash" CustomOriginConfig: HTTPPort: 80 HTTPSPort: 443 OriginProtocolPolicy: 'http-only'
优化建议:避免硬编码密钥
直接在配置里写死SecretHash存在安全风险,推荐用Serverless Framework的参数引用功能,从AWS SSM参数存储或Secrets Manager读取密钥:
从SSM参数存储读取的示例
CloudFront源配置:
OriginCustomHeaders: - HeaderName: User-Agent HeaderValue: ${ssm:/myapp/cloudfront-s3-user-agent~true}
对应的S3桶策略同步引用该参数,保持配置一致性:
Statement: - Sid: PublicReadForGetBucketObjects Effect: Allow Principal: '*' Action: s3:GetObject Resource: arn:aws:s3:::mybucketname/* Condition: StringEquals: aws:UserAgent: ${ssm:/myapp/cloudfront-s3-user-agent~true}
额外提示
如果你的S3静态网站使用AWS原生的S3网站域名(例如mybucketname.s3-website-us-east-1.amazonaws.com),建议改用S3OriginConfig替代CustomOriginConfig,配置逻辑完全一致,同样添加OriginCustomHeaders即可:
Origins: - DomainName: mybucketname.s3-website-us-east-1.amazonaws.com Id: bucketsitepath OriginCustomHeaders: - HeaderName: User-Agent HeaderValue: ${ssm:/myapp/cloudfront-s3-user-agent~true} S3OriginConfig: OriginAccessIdentity: ''
内容的提问来源于stack exchange,提问作者CO2 Software
相关产品推荐
相关产品推荐

