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

如何用Terraform创建AWS Glue的IAM角色并解决策略配置错误?

修复IAM角色AssumeRole策略错误

你的代码问题出在AssumeRole策略(信任策略)的定义上:这个策略只能用来指定谁有权限扮演该角色,仅允许包含sts:AssumeRole动作,不能把Glue的操作权限、iam:PassRole这类权限直接写在这里。

错误原因

报错提示"AssumeRole policy may only specify STS AssumeRole actions",就是因为你在信任策略里加入了glue:*和iam:PassRole这类非STS扮演角色的动作,违反了IAM角色信任策略的规则。

修复后的代码

正确的做法是把信任策略和权限策略分开:

  1. 信任策略仅允许Glue服务扮演该角色
  2. 单独创建权限策略定义Glue所需的操作权限
  3. 通过角色附件将权限策略绑定到角色上
# 定义IAM角色,仅设置信任策略
resource "aws_iam_role" "test_role" {
  name = "test_role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect    = "Allow"
        Principal = {
          Service = "glue.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      }
    ]
  })
}

# 定义Glue所需的权限策略
resource "aws_iam_policy" "glue_role_policy" {
  name        = "glue_role_policy"
  description = "Permissions for Glue crawlers and notebooks"

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect   = "Allow"
        Action   = "glue:*"
        Resource = "*"
      },
      {
        Effect   = "Allow"
        Action   = "iam:PassRole"
        Resource = aws_iam_role.test_role.arn
      }
    ]
  })
}

# 将权限策略附加到角色上
resource "aws_iam_role_policy_attachment" "glue_role_attach" {
  role       = aws_iam_role.test_role.name
  policy_arn = aws_iam_policy.glue_role_policy.arn
}

说明

  • 信任策略(assume_role_policy)仅保留sts:AssumeRole动作,明确指定Glue服务作为可信主体
  • 权限策略单独定义Glue的操作权限和iam:PassRole权限,其中iam:PassRole的资源限定为当前角色的ARN,遵循最小权限原则
  • 通过aws_iam_role_policy_attachment完成角色与权限策略的关联

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:20