如何通过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
相关产品推荐
相关产品推荐

