Могу ли я добавить из коробки aws_iam_policy (SecurityAudit), идентификатор учетной записи и внешний идентификатор к aws_iam_role, используя terraform? - PullRequest
0 голосов
/ 05 февраля 2019

Я настраиваю облачную защиту и мне нужно:

  1. Выберите тип доверенного лица> Другая учетная запись AWS
  2. Идентификатор учетной записи: xxxxxxxxxx
  3. Внешний идентификатор: xxxxxxxxxx
  4. Присоединение политики SecurityAudit (которая уже есть в AWS)

Я не уверен, как добавить уже существующую политику или куда добавить идентификаторы.Я не могу найти решение из документации terraform.

../Core/iam_roles.tf

# BEGIN 'foo'
resource "aws_iam_role" "foo" {
  name               = "${terraform.workspace}_Foo"
  path               = "/"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "automation.amazonaws.com",
          "events.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "foo" {
  policy_arn = "${aws_iam_policy.security_audit.arn}"
  role = "${aws_iam_role.foo.name}"
}

Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019
`# BEGIN 'Foo'
resource "aws_iam_role" "foo" {
  name = "${terraform.workspace}_Foo"
  path = "/"

  assume_role_policy = <<EOF
{
 "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::INSERT_ACCOUNT_NUMBER:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "INSERT_EXTERNAL_ID"
        }
      }
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "foo" {
  policy_arn = "arn:aws:iam::aws:policy/SecurityAudit"
  role       = "${aws_iam_role.foo.name}"
}

resource "aws_iam_instance_profile" "foo" {
  name = "${terraform.workspace}_Foo"
  role = "${aws_iam_role.foo.name}"
}

# END
`
0 голосов
/ 07 февраля 2019

Если вы присоединяете политику, которая уже существует в учетной записи, я бы использовал источник данных для ее запроса.Вы должны знать ARN, чтобы использовать источник данных политики IAM, чтобы он не сильно отличался от указания ARN непосредственно в ресурсе aws_iam_role_policy_attachment, за исключением того, что он позволяет команде terraform plan проверить, что политика существует до запуска apply, этодополнительная гарантия для вас.Источник данных также дает вам дополнительную информацию о ресурсе, если он вам нужен.

data "aws_iam_policy" "security_audit" {
  arn = "arn:aws:iam::${var.target_account_id}:policy/SecurityAudit"
}


# BEGIN 'foo'
resource "aws_iam_role" "foo" {
  name               = "${terraform.workspace}_Foo"
  path               = "/"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "automation.amazonaws.com",
          "events.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::${var.other_aws_account_id}:role/your_role_name_and_path_here"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "foo" {
  policy_arn = "${data.aws_iam_policy.security_audit.arn}"
  role = "${aws_iam_role.foo.name}"
}
...