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

如何用Terraform创建私有S3 Bucket?解决创建后自动公开问题

问题描述

我想创建一个私有S3 Bucket,通过AWS控制台创建的私有桶可正常生效,但使用Terraform创建时,桶虽能成功创建却始终显示为公开状态。

代码

resource "aws_s3_bucket" "audio" {
  bucket = "my-dev-audio"
}

resource "aws_s3_bucket_acl" "audio" {
  bucket = aws_s3_bucket.audio.id
  acl = "private"
}

执行日志

[...]
# aws_s3_bucket_acl.audio will be created
+ resource "aws_s3_bucket_acl" "audio" {
    + acl    = "private"
    + bucket = (known after apply)
    + id     = (known after apply)

    + access_control_policy {
        + grant {
            + permission = (known after apply)

            + grantee {
                + display_name  = (known after apply)
                + email_address = (known after apply)
                + id            = (known after apply)
                + type          = (known after apply)
                + uri           = (known after apply)
              }
          }

        + owner {
            + display_name = (known after apply)
            + id           = (known after apply)
          }
      }
  }

截图说明

  • 桶列表中,该桶显示为公开状态:
    桶列表显示公开
  • 桶的权限标签页中,同样显示为公开状态:
    权限标签页显示公开

环境信息

  • Terraform 1.2.1
  • AWS Provider 4.45.0

已做调研

  • 查阅了AWS Provider的aws_s3_bucket_acl资源文档,未发现代码与示例存在差异。

核心问题

如何使用Terraform创建一个真正私有状态的S3 Bucket?


解决方案

原因分析

仅设置ACL为private不足以确保桶完全私有,因为S3的块公共访问设置默认可能未启用,或者桶继承了账户级的公共访问配置,导致控制台显示桶为公开状态,甚至存在实际的公共访问路径。

正确配置代码

需要同时配置私有ACL和块公共访问策略,彻底阻断所有公共访问途径:

resource "aws_s3_bucket" "audio" {
  bucket = "my-dev-audio"
}

# 配置私有ACL
resource "aws_s3_bucket_acl" "audio" {
  bucket = aws_s3_bucket.audio.id
  acl    = "private"
}

# 启用全量块公共访问
resource "aws_s3_bucket_public_access_block" "audio" {
  bucket = aws_s3_bucket.audio.id

  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

注意事项

  1. aws_s3_bucket_public_access_block是确保桶私有核心配置,它会覆盖所有账户级、桶级的公共访问规则,彻底阻止公共访问。
  2. 执行terraform apply后,刷新S3控制台即可看到桶状态变为私有。
  3. 若已创建问题桶,单独添加aws_s3_bucket_public_access_block资源并执行apply即可修复权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:45:34