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

如何通过Terraform脚本禁用S3 Bucket ACL并配置对象所有权归桶所有者?

解决方案

要实现AWS建议的禁用ACL、默认对象所有权归桶所有者,不能仅依赖aws_s3_bucket_acl资源,需要通过aws_s3_bucket_ownership_controls配置对象所有权规则,具体实现如下:

核心原理

当将对象所有权设置为BucketOwnerEnforced时,AWS会自动禁用桶的ACL功能,所有上传的对象默认归桶所有者所有,完全符合AWS最新的安全建议。

完整Terraform代码

# 创建S3桶
resource "aws_s3_bucket" "s3-bucket" {
  bucket = "your-unique-bucket-name" # 替换为你的专属桶名
}

# 配置对象所有权控制,强制禁用ACL并让对象默认归桶所有者
resource "aws_s3_bucket_ownership_controls" "bucket_ownership" {
  bucket = aws_s3_bucket.s3-bucket.id

  rule {
    object_ownership = "BucketOwnerEnforced"
  }
}

# 可选:添加公共访问阻止(安全最佳实践,建议启用)
resource "aws_s3_bucket_public_access_block" "bucket_public_access" {
  bucket = aws_s3_bucket.s3-bucket.id

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

data "aws_caller_identity" "current" {}

关键说明

  • 移除原有的aws_s3_bucket_acl资源:因为BucketOwnerEnforced模式会直接禁用ACL,保留该资源会导致配置冲突。
  • BucketOwnerEnforced是核心配置:启用后,任何针对桶或对象的ACL设置操作都会被拒绝,对象所有权强制归桶所属账户。
  • 公共访问阻止是可选但推荐的配置:进一步强化桶的安全性,防止意外的公共访问暴露。

验证方式

应用配置后,可通过以下方式确认生效:

  1. 登录AWS控制台进入目标桶的「权限」标签,查看「对象所有权」为「桶所有者强制」,且ACL配置入口被灰化禁用。
  2. 上传测试对象后,查看对象的所有者信息,确认是桶所属的AWS账户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:25:16