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

如何通过Terraform创建仅访问S3单个文件夹的IAM用户

使用Terraform创建仅能访问S3单个文件夹的IAM用户

要实现仅让IAM用户访问S3存储桶的单个文件夹,核心是通过IAM策略的资源路径前缀限制(S3的“文件夹”本质是对象前缀)。以下是补全后的完整Terraform代码,包含关键的策略定义:

# 定义IAM策略文档,限制仅访问指定S3文件夹
data "aws_iam_policy_document" "username-s3-access" {
  statement {
    actions = [
      "s3:ListBucket",
    ]
    resources = [
      "arn:aws:s3:::your-bucket-name", # 桶的ARN,列表操作需要指定桶资源
    ]
    condition {
      test     = "StringLike"
      variable = "s3:prefix"
      values   = ["target-folder/*"] # 仅允许列出该文件夹下的内容
    }
  }

  statement {
    actions = [
      "s3:GetObject",
      "s3:PutObject", # 如果需要上传权限,保留这行;不需要则删除
      "s3:DeleteObject" # 如果需要删除权限,保留这行;不需要则删除
    ]
    resources = [
      "arn:aws:s3:::your-bucket-name/target-folder/*", # 该文件夹下所有对象的ARN
    ]
  }
}

# 你提供的现有资源定义
resource "aws_iam_policy" "username-s3-access" {
  name   = "username-s3-access"
  path   = "/"
  policy = data.aws_iam_policy_document.username-s3-access.json
}

resource "aws_iam_user" "username-s3-access" {
  name = "username-s3-access"
  path = "/machine/"
}

resource "aws_iam_user_policy_attachment" "username-s3-access" {
  user       = aws_iam_user.username-s3-access.name
  policy_arn = aws_iam_policy.username-s3-access.arn
}

关键说明:

  • 替换代码中的your-bucket-name为你的S3桶名称,target-folder为目标文件夹名称(注意末尾的/*,确保匹配该文件夹下的所有对象)
  • s3:ListBucket是桶级操作,必须单独指定桶ARN,通过condition限制仅能列出目标文件夹的内容
  • 根据实际需求调整actions:如果只需要读权限,保留s3:GetObject即可;需要写权限则添加s3:PutObject,删除权限添加s3:DeleteObject
  • 确保策略中的资源路径格式正确,S3 ARN的格式为arn:aws:s3:::bucket-name/object-key-prefix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:05:22