Terraform:附加非托管 IAM 角色

Fre*_*sen 7 amazon-web-services terraform terraform-provider-aws

地形版本:12

\n

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

\n
  resource "aws_iam_policy_attachment" "example-attach" {\n  name = "example-attach"\n\n  roles = [ \n    aws_iam_role.managed-role.name, \n    "arn:aws:iam::1234567890:role/unmanaged-role"\n  ]\n\n  policy_arn = aws_iam_policy.example-policy.arn\n}\n
Run Code Online (Sandbox Code Playgroud)\n

试运行效果很好,但应用 TF 时说:

\n
\n

\xe2\x80\x93 ValidationError: 指定的 roleName 值无效。它必须仅包含字母数字字符和/或以下内容:+=,.@_-

\n
\n

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

\n

Mar*_*cin 10

在您的 中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
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用data_source

data "aws_iam_role" "example" {
  name = "unmanaged-role"
}
Run Code Online (Sandbox Code Playgroud)

并在您的资源中引用它:

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
}
Run Code Online (Sandbox Code Playgroud)