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

GitHub Actions部署Terraform至S3时遇DynamoDB权限拒绝错误求助

解决GitHub Actions部署Terraform到S3时DynamoDB权限拒绝问题

问题背景

我正在学习Udemy的《DevOps Deployment Automation with Terraform, AWS and Docker》项目,通过GitHub Actions部署TF文件到S3 bucket时遇到权限错误。已检查iam.tf和variables.tf,用terraform output获取的凭证也没问题,尝试过修改TF文件、更换凭证、重新登录AWS SSO CLI、检查AWS策略等操作,仍未解决。

GitHub Actions报错信息:

operation error DynamoDB: PutItem, https response error StatusCode: 400, RequestID: 0NTHCFGF856DKB38SVBASDQQKVVV4KQNSO5AEMVJF66Q9ASUAAJG, api error AccessDeniedException: User: arn:aws:iam::891376961380:user/recipe-app-api-cd is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:891376961380:table/devops-recipe-app-api-terraform-lock because no identity-based policy allows the dynamodb:PutItem action

Unable to retrieve item from DynamoDB table "devops-recipe-app-api-terraform-lock": operation error DynamoDB: GetItem, https response error StatusCode: 400, RequestID: 7I0K14A5GSCKNDA99PARPF3F63VV4KQNSO5AEMVJF66Q9ASUAAJG, api error AccessDeniedException: User: arn:aws:iam::891376961380:user/recipe-app-api-cd is not authorized to perform: dynamodb:GetItem on resource: arn:aws:dynamodb:us-east-1:891376961380:table/devops-recipe-app-api-terraform-lock because no identity-based policy allows the dynamodb:GetItem action

解决步骤

1. 为IAM用户添加DynamoDB权限策略

直接给recipe-app-api-cd用户附加包含所需DynamoDB操作的身份型策略,策略内容如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:UpdateItem"
            ],
            "Resource": "arn:aws:dynamodb:us-east-1:891376961380:table/devops-recipe-app-api-terraform-lock"
        }
    ]
}

如果用Terraform管理IAM权限,在iam.tf的用户权限策略块中添加上述DynamoDB操作声明。

2. 确认Terraform状态锁配置的资源匹配

检查Terraform后端配置(通常在backend.tf或主TF文件中),确保DynamoDB表名称与报错中的完全一致,避免资源ARN不匹配导致权限失效。示例后端配置:

terraform {
  backend "s3" {
    bucket         = "your-s3-bucket-name"
    key            = "terraform/state"
    region         = "us-east-1"
    dynamodb_table = "devops-recipe-app-api-terraform-lock"
  }
}

3. 验证IAM策略的生效逻辑

  • 确保添加的是身份型策略(直接附加到用户/用户组/角色),而非资源型策略(附加到DynamoDB表),报错明确指出缺少身份型策略的权限。
  • 检查是否存在其他**拒绝策略(Deny)**覆盖了允许权限,IAM中拒绝策略优先级高于允许策略。

4. 刷新GitHub Actions中的AWS凭证

确认GitHub Secrets中存储的AWS凭证是有效的:

  • 若使用AWS SSO,确保临时凭证未过期,可重新生成后更新到GitHub Secrets。
  • 若使用IAM用户长期密钥,确认密钥未被禁用或过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:35:10