Terraform AWS Newreli c Интеграция с ролью IAM - PullRequest
0 голосов
/ 10 июля 2020

Мое требование - интегрировать нашу учетную запись AWS с NewReli c с Terraform, я могу связать учетную запись AWS с NewReli c, используя Консольный доступ, в качестве предварительного условия мне нужно создать роль IAM с включением доверенного лица с учетной записью New-Reli c, следуя шагам, перечисленным ниже

  1. Go, до Infrastructure.newreli c .com> AWS. Щелкните одну из доступных плиток службы, чтобы начать работу.

  2. В консоли IAM щелкните «Создать роль», затем щелкните «Другая учетная запись AWS».

  3. В качестве идентификатора учетной записи используйте 7XXXXXXXXXX. Установите флажок Требовать внешний идентификатор. Для внешнего идентификатора введите свой новый идентификатор учетной записи Reli c.

  4. Не включайте параметр «Требовать MFA» (многофакторная аутентификация). Прикрепите политику: найдите ReadOnlyAccess, установите флажок для политики с именем ReadOnlyAccess, затем нажмите Далее: Обзор. В качестве альтернативы вы можете создать свою собственную управляемую политику и ограничить разрешения, которые вы предоставляете New Reli c в соответствии с AWS службами, которые вы хотите отслеживать. В качестве имени роли введите NewRelicInfrastructure-Integrations, затем щелкните Создать роль.

Мое требование - сделать то же самое с Terraform Script, я изучил https://www.terraform.io/docs/providers/aws/r/iam_role.html, но не удалось найти некоторые соответствующие параметры, которые могут работать так же, как перечисленные выше шаги (например, включение другой учетной записи AWS).

1 Ответ

1 голос
/ 10 июля 2020

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 соответствует новому идентификатору учетной записи Reli c.

Вторая политика предоставляет ReadOnlyAccess предполагаемой роли.

...