代码之家  ›  专栏  ›  技术社区  ›  Friedrich 'Fred' Clausen

Terraform:附加非托管IAM角色

  •  0
  • Friedrich 'Fred' Clausen  · 技术社区  · 4 年前

    我们有一个遗产,不受Terraform IAM角色的管理,我想从 aws_iam_policy_attachment block和我尝试了以下操作:

      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
    }
    

    干运行工作正常,但当应用TF时表示:

    ValidationError:为roleName指定的值无效。它只能包含字母数字字符和/或以下内容:+=@_-

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

    1 回复  |  直到 4 年前
        1
  •  1
  •   Marcin    4 年前

    在你的 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
    }