Как создать повторно используемый блок выписки для aws_iam_policy_document?

У меня есть несколько aws_iam_policy_document как это

Policy1

data "aws_iam_policy_document" "policy1" {
  statement {
    actions = [
      "rds:DescribeDBSnapshots"
    ]
    resources = [
      "arn:aws:rds:${var.region}:${local.account_id}:db:*
    ]
  }
  statement {
    actions = [
      "rds:RestoreDBInstanceFromDBSnapshot"
    ]
    resources = [
      "arn:aws:rds:${var.region}:${local.account_id}:db:*s",
      "arn:aws:rds:${var.region}:${local.account_id}:snapshot:*"

    ]
  }
}

policy2

data "aws_iam_policy_document" "policy2" {
  statement {
    actions = [
      "rds:DescribeDBInstances",
      "rds:ModifyDBInstance"
    ]
    resources = [
      "arn:aws:rds:${var.region}:${local.account_id}:db:*",
      "arn:aws:rds:${var.region}:${local.account_id}:db:*"
    ]
  }

}

И у меня есть еще несколько политик, которые имеют некоторые вариации.

Теперь я хочу иметь возможность вставить идентичный блок statement ко всем этим политикам.

Это еще не проверено, но утверждение будет выглядеть так:

statement {

    action = [
        "ssm:GetParameter" 

    ]
    resources = [

"arn:aws:ssm:${var.region}:${local.account_id}:parameter/lambda/*"
    ]

}

Какой самый эффективный способ сделать это? Я хочу избежать копирования и вставки одного и того же блока заявления во все политики.

1 ответ

Я могу использовать source_json ключевое слово.

Вот пример:

Прежде всего, определите общую политику в новом документе политики

  data "aws_iam_policy_document" "common" {
    statement {

        action = [
            "ssm:GetParameter" 

        ]
        resources = [

    "arn:aws:ssm:${var.region}:${local.account_id}:parameter/lambda/*"
        ]

    }
  }

Затем в существующем документе политики используйте source_json

data "aws_iam_policy_document" "policy1" {
  source_json = "${data.aws_iam_policy_document.common.json}"
  statement {
     ....
  }
}
Другие вопросы по тегам