Terraform:附加非托管 IAM 角色

Posted

技术标签:

【中文标题】Terraform:附加非托管 IAM 角色【英文标题】:Terraform: Attaching an unmanaged IAM role 【发布时间】:2020-09-15 00:21:06 【问题描述】:

地形版本:12

我们有一个不受 Terraform IAM 管理的遗留角色,我想从 aws_iam_policy_attachment 块中引用它,我尝试了以下操作:

  resource "aws_iam_policy_attachment" "example-attach" 
  name = "example-attach"

  roles = [ 
    aws_iam_role.managed-role.name, 
    "arn:aws:iam::1234567890:role/unmanaged-role"
  ]

  policy_arn = aws_iam_policy.example-policy.arn

Dry-run 工作正常,但应用 TF 时说:

– ValidationError: roleName 的指定值无效。它必须只包含字母数字字符和/或以下字符:+=,.@_-

有没有一种方法可以只引用非托管角色而不在 TF 中定义它?或者是否有一些非破坏性的声明方式不会改变与非托管角色有关的任何内容?

【问题讨论】:

【参考方案1】:

在您的 roles 中,您提供的是角色 ARN,而不是角色名称。

因此,您应该使用其名称而不是 ARN:

resource "aws_iam_policy_attachment" "example-attach" 

  name = "example-attach"

  roles = [ 
    aws_iam_role.managed-role.name, 
    "unmanaged-role"
  ]

  policy_arn = aws_iam_policy.example-policy.arn

你也可以使用data_source

data "aws_iam_role" "example" 
  name = "unmanaged-role"

并在您的资源中引用它:

resource "aws_iam_policy_attachment" "example-attach" 

  name = "example-attach"

  roles = [ 
    aws_iam_role.managed-role.name, 
    data.aws_iam_role.example.name
  ]

  policy_arn = aws_iam_policy.example-policy.arn

【讨论】:

以上是关于Terraform:附加非托管 IAM 角色的主要内容,如果未能解决你的问题,请参考以下文章

Terraform:将 AWS 托管策略附加到角色的正确方法?

Terraform 依赖于 aws_iam_policy

terraform 中的任务执行 IAM 角色

创建附加到用户的 IAM 策略,限制用户使用某些操作创建自定义托管策略

使用 Terraform 创建 GCP 自定义 IAM 角色

Terraform aws_iam_role_policy 中的 JSON 语法错误