Один документ политики Terraform для нескольких очередей - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть несколько очередей с разными именами и один документ политики iam, который я хочу использовать для всех этих очередей. Можно ли применить одну политику для всех без необходимости перечислять все имена очередей в разделе ресурсов?

пример очереди

resource "aws_sqs_queue" "first_queue"{
  name = "first_queue"
  policy = "${data.aws_iam_policy_document.sqs_all.json}"
}
resource "aws_sqs_queue" "second_queue"{
  name = "second_queue"
  policy = "${data.aws_iam_policy_document.sqs_all.json}"
}

документ политики iam

data "aws_iam_policy_document" "sqs_all" {
  statement {
    effect = "Allow",

    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::${var.deploy_account}:user/some_user"]
    }

    actions = [
      "SQS:SendMessage",
      "SQS:DeleteMessage",
      "SQS:ReceiveMessage",
      "SQS:GetQueueAttributes"
    ],
    resources = [
      "FIXME",
    ]
  }
}

Итак, я хочу заменить FIXME из вышеприведенного кода чем-то, чтобы политика применялась для обеих очередей сверху, но делаю это без перечисления очередей, поскольку в реальном скрипте terraform много очередей.

Спасибо

1 Ответ

0 голосов
/ 26 февраля 2020

Вы можете использовать шаблоны. Синтаксис отличается в зависимости от вашей версии terraform. Вы можете проверить это здесь для 0,11 или здесь для 0,12

Вам нужно будет создать файл со следующим содержимым в каком-то месте вашего проекта. Допустим, вы назовете его sqs_policy_template.tpl:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSQSInvocation",
      "Effect": "Allow",
      "Action": [
        "SQS:SendMessage",
        "SQS:DeleteMessage",
        "SQS:ReceiveMessage",
        "SQS:GetQueueAttributes"
      ],
      "Resource": [${queue_arn_list}]
    }
  ]
}

Внутри вашего шаблона terraform вы используете следующий ресурс для визуализации шаблона и compile it:

Для версии 0.11:

data "template_file" "sqs_policy" {
  template = "${file("sqs_policy_template.tpl")}"
  vars = {
    queue_arn_list = [arn1, arn2, arn3]
  }
}

Для версии 0.12 немного проще. Вы просто вызываете функцию:

templatefile("sqs_policy_template.tpl", [arn1, arn2, arn3])
...