Terraform配置S3重定向桶CloudFront源报错问题求助
解决Terraform AWS Provider 4.x下CloudFront配置S3重定向桶Origin的问题
问题根源
AWS Provider 4.x弃用了aws_s3_bucket.website_endpoint,改用aws_s3_bucket_website_configuration.website_endpoint,但该端点是S3静态网站的对外访问域名,属于HTTP/HTTPS自定义源,而非CloudFront默认识别的S3对象存储原生源,因此直接配置会触发The parameter Origin DomainName does not refer to a valid s3 bucket错误。
正确解决方案
将CloudFront的Origin配置为自定义HTTP源,添加custom_origin_config块明确源类型,无需手动修改或降级Provider。
完整配置示例
- S3重定向桶及网站配置
resource "aws_s3_bucket" "www_bucket" { bucket = "www.myDomain.com" } resource "aws_s3_bucket_website_configuration" "www_website" { bucket = aws_s3_bucket.www_bucket.id redirect_all_requests_to { host_name = "myDomain.com" protocol = "https" } }
- CloudFront分发的Origin配置修改
resource "aws_cloudfront_distribution" "www_distribution" { # 其他分发配置(如价格类、SSL证书等)... origin { domain_name = aws_s3_bucket_website_configuration.www_website.website_endpoint origin_id = aws_s3_bucket.www_bucket.id # 关键:声明为自定义源,配置协议策略 custom_origin_config { http_port = 80 https_port = 443 origin_protocol_policy = "https-only" origin_ssl_protocols = ["TLSv1.2"] } } default_cache_behavior { allowed_methods = ["GET", "HEAD", "OPTIONS"] cached_methods = ["GET", "HEAD"] target_origin_id = aws_s3_bucket.www_bucket.id forwarded_values { query_string = false cookies { forward = "none" } } viewer_protocol_policy = "redirect-to-https" min_ttl = 0 default_ttl = 3600 max_ttl = 86400 } }
说明
- S3静态网站托管的端点本质是HTTP服务,因此CloudFront需要以自定义源的方式对接,而非S3原生对象存储源。
- 配置
origin_protocol_policy = "https-only"确保CloudFront与S3网站端点之间使用HTTPS通信,符合安全规范。 - 此方案完全适配AWS Provider 4.x,无需牺牲新功能或手动修改配置。
内容的提问来源于stack exchange,提问作者FiNaR
相关产品推荐
相关产品推荐

