如何用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角色信任策略的规则。
修复后的代码
正确的做法是把信任策略和权限策略分开:
- 信任策略仅允许Glue服务扮演该角色
- 单独创建权限策略定义Glue所需的操作权限
- 通过角色附件将权限策略绑定到角色上
# 定义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
相关产品推荐
相关产品推荐

