【问题标题】:Lookup AWS IAM role using tags使用标签查找 AWS IAM 角色
【发布时间】:2020-08-19 01:39:27
【问题描述】:

您能帮我解决通过 terraform 获取 AWS IAM 角色名称的问题吗?

简而言之,我之前创建了一个角色,名称为:test-platform-testenv-eks2020041915272704860006。 不同的角色有不同的名称,名称中包含变量(平台/堆栈名称)。 现在我有一个必须获取此 IAM 角色名称的 Terraform 文件(以将策略附加到此角色)。 我可以使用角色的确切名称来做到这一点。 但是没有硬编码怎么办(知道标签和这个角色的一些其他参数)?

非常感谢。

【问题讨论】:

  • 你能把它作为模板的输入参数吗?
  • 你到底是什么意思?我们不能使用先前(eks)堆栈创建的输出。我正在尝试数据源:aws_iam_role 并使用标签查找,但数据源的必需参数:aws_iam_role 是名称,我们不能在其中使用掩码。
  • 编写一个脚本以根据您想要的任何自定义标准(例如标签)查找角色,然后将其作为输入提供给下一组基础架构。
  • 我认为这是个好主意。但是客户的标准只允许在这个堆栈中使用 terraform 代码。

标签: amazon-web-services terraform amazon-iam lookup amazon-eks


【解决方案1】:

您可以将角色名称存储在 AWS Systems Manager Parameter Store resource 中,作为原始堆栈的一部分。

随后的堆栈可以使用aws_ssm_parameter data source 从参数存储中选择角色名称,如下面的 sn-p:

data "aws_ssm_parameter" "role" {
  name = "/path/to/role/name"
}

resource "aws_iam_policy_attachment" "policy-attachment" {
  roles = ["${data.aws_ssm_parameter.role.value}"] # pull value from parameter store
  ...
}

【讨论】:

  • 感谢您的帮助。我将向客户询问 AWS Systems Manager Parameter Store 资源。但如果没有它,我将不得不继续寻找解决方案。
【解决方案2】:

我有一个解决办法。也许不是最好的,但它对我有用。所以,

  1. 使用data "aws_instance"获取创建的EKS节点的iam_instance_profile,例如:
data "aws_instance" "eks_node" {
  filter {...}
}
  1. 使用 data "aws_iam_instance_profile"(从步骤 1 aws_instance 中定义)获取先前创建的 EKS 节点的角色名称,例如:
data "aws_iam_instance_profile" "eks_node_profile" {
  name = data.aws_instance.eks_node.iam_instance_profile
}
  1. 将新创建的策略附加到之前定义的 EKS 角色,例如:
resource "aws_iam_role_policy_attachment" "attach_policy_to_eks" {
  policy_arn = aws_iam_policy.created_policy_eks.arn
  role       = data.aws_iam_instance_profile.eks_node_profile.role_name
}

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2018-11-10
    • 2018-08-19
    • 2016-08-27
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多