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

使用Terraform创建专属IAM用户访问S3存储桶出现权限拒绝问题

问题根因与解决方案

1. aws iam get-policy查询失败原因

你执行命令时输入的策略ARN拼写错误:

  • 策略列表返回的正确ARN后缀是AllowUsercsgoserverAccessTocsgofiles
  • 你执行命令时少写了末尾的s,变成了AllowUsercsgoserverAccessTocsgofile,修正ARN即可正常查询。

2. aws iam get-user-policy查询失败原因

这里涉及两个IAM策略的基础概念:

  • aws_iam_user_policy资源创建的是内联策略,直接绑定在用户身上,不属于托管策略范畴
  • 你当前user.tf配置中,内联策略的name参数设置为用户名csgoserver,而非你查询时用的AllowUsercsgoserverAccessTocsgofiles,所以查询返回不存在。

另外你在list-attached-user-policies中看到的绑定策略是独立的托管策略,并非当前Terraform代码生成的资源,属于之前操作的残留配置。

3. S3上传AccessDenied原因

你的IAM权限配置的资源范围不完整:
当前权限只覆盖了存储桶本身的ARN arn:aws:s3:::${var.bucket_name},仅允许执行存储桶级别的操作(比如查看桶列表),而PutObject等对象操作需要匹配桶内对象的ARN,需要在资源列表中新增arn:aws:s3:::${var.bucket_name}/*。


修正后的Terraform配置参考
resource "aws_iam_user" "s3user" {
  name = var.user_name
  force_destroy = true
}

data "aws_iam_policy_document" "default" {
  statement {
    sid       = "AllowUser${var.user_name}AccessTo${var.bucket_name}"
    actions   = ["s3:*"]
    # 新增对象级资源路径
    resources = [
      "arn:aws:s3:::${var.bucket_name}",
      "arn:aws:s3:::${var.bucket_name}/*"
    ]
    effect    = "Allow"
  }
}

resource "aws_iam_user_policy" "s3user_policy" {
  # 修改策略名称方便后续查询
  name = "AllowUser${var.user_name}AccessTo${var.bucket_name}"
  user = aws_iam_user.s3user.name

  policy = data.aws_iam_policy_document.default.json
}

resource "aws_iam_access_key" "s3user_ak" {
  user    = aws_iam_user.s3user.name
}

验证步骤
  1. 执行terraform apply更新配置
  2. 清理之前残留的托管策略绑定:aws iam detach-user-policy --user-name csgoserver --policy-arn arn:aws:iam::370179080679:policy/AllowUsercsgoserverAccessTocsgofiles
  3. 验证内联策略:aws iam get-user-policy --user-name csgoserver --policy-name AllowUsercsgoserverAccessTocsgofiles
  4. 测试S3上传操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:54:05