具有IAM角色的Terraform AWS Newrelic集成

时间:2020-07-10 10:25:33

标签: amazon-web-services terraform amazon-iam newrelic

我的要求是将我们的AWS帐户与NewRelic与Terraform集成在一起,我能够使用控制台访问将AWS帐户与NewRelic链接,作为前提条件,我需要创建IAM角色,并在其中包含带有New-Relic帐户的受信任实体,请按照下面列出的步骤

  1. 转至Infrastructure.newrelic.com> AWS。单击可用的服务图块之一开始。

  2. 在IAM控制台中,单击“创建角色”,然后单击“另一个AWS帐户”。

  3. 对于帐户ID,请使用7XXXXXXXXXX。 选中需要外部ID框。 对于“外部ID”,请输入您的“新遗物”帐户ID。

  4. 请勿启用要求MFA(多因素身份验证)的设置。 附加策略:搜索ReadOnlyAccess,选中名为ReadOnlyAccess的策略复选框,然后单击“下一步:查看”。或者,您可以创建自己的托管策略,并根据要监视的AWS服务来限制授予New Relic的权限。 对于角色名称,输入NewRelicInfrastructure-Integrations,然后单击创建角色。

我的要求是对Terraform Script进行同样的操作 https://www.terraform.io/docs/providers/aws/r/iam_role.html,但找不到一些与上述步骤相同的相关选项(例如,包含另一个AWS帐户)。

1 个答案:

答案 0 :(得分:2)

Terraform提供了一个可能有用的aws_iam_policy_document数据源。我相信以下配置可以为您提供帮助:

data "aws_iam_policy_document" "assume_role" {
  statement {
    actions = [
      "sts:AssumeRole"
    ]

    condition {
      test = "StringEquals"

      values = [
        "New Relic Account ID"
      ]

      variable = "sts:ExternalId"
    }

    effect = "Allow"

    principals {
      identifiers = [
        "7XXXXXXXXXX"
      ]

      type = "AWS"
    }
  }
}

resource "aws_iam_role" "new_relic" {
  assume_role_policy = data.aws_iam_policy_document.assume_role.json
  name               = "NewRelicInfrastructure-Integrations"
}

resource "aws_iam_role_policy_attachment" "read_only_access" {
  policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
  role       = aws_iam_role.new_relic.name
}

实质上,它会创建一个名为NewRelicInfrastructure-Integrations的角色,并具有与其关联的两个IAM策略。

第一个策略允许调用sts:AssumeRole操作,并验证ExternalId与新的旧帐户ID相匹配。

第二个策略将ReadOnlyAccess授予假定的角色。