使用Terraform创建的IAM策略为什么无法绑定到IAM角色?
问题排查与解决
首先纠正一个认知误区:你通过aws_iam_policy资源创建的就是客户托管策略,aws_iam_role_policy_attachment本身同时支持AWS托管策略、客户托管策略和IAM角色的绑定,你选择的绑定资源类型没有问题,这不是绑定失败的原因。
以下是你遇到的绑定不生效的常见原因和排查步骤:
- 先确认资源是否成功部署到Terraform状态中
执行terraform state list命令,检查aws_iam_role_policy_attachment.lambda_attach资源是否存在于状态文件中。如果不存在,说明父模块调用子模块时没有包含该资源,或者该资源被注释、过滤掉了,没有被纳入部署范围。 - 检查是否有未应用的变更
执行terraform plan命令,如果输出显示需要创建aws_iam_role_policy_attachment.lambda_attach资源,说明上次流水线的apply操作没有实际完成该资源的创建。你需要检查流水线的Terraform执行日志:要么是只执行了plan没执行apply,要么是创建attachment时出现了权限不足等隐藏报错,但是流水线的错误捕获逻辑漏判,误返回了部署成功的结果。 - 确认控制台查看的资源匹配
你当前的配置中IAM角色和IAM策略用了同一个名称var.lambda_role,很容易在控制台查看时混淆资源。你可以在Terraform中添加输出打印aws_iam_role_policy_attachment.lambda_attach.id,其格式为[角色名]/[策略ARN],拿着打印出的策略ARN到对应角色的「权限管理」页面比对,确认你查看的是正确的角色,且没有同名不同ARN的策略干扰。 - 检查是否有覆盖类操作
如果有其他Terraform配置、或者手动操作针对同一个IAM角色做过策略绑定/解绑操作,可能会覆盖你当前配置的绑定关系。尤其是如果其他地方也用aws_iam_role_policy_attachment绑定同一个角色,且资源标识重复的情况下,会出现状态覆盖的问题。
内容的提问来源于stack exchange,提问作者208_man
相关产品推荐
相关产品推荐

