terraform cycli c зависимость для aws API-шлюза с политикой ресурсов - PullRequest
0 голосов
/ 19 февраля 2020

Постановка проблемы Я пытаюсь автоматизировать aws API-шлюз с помощью terraform. Это часть моего кода

для API-шлюза

resource "aws_api_gateway_rest_api" "rest_api" {
  #some code
policy = "${data.template_file.init.rendered}"
}

output "id" {
  value = "${aws_api_gateway_rest_api.rest_api.id}"
}

output "execution_arn" {
  value = "${aws_api_gateway_rest_api.rest_api.execution_arn}"
}

output "arn" {
  value = "${aws_api_gateway_rest_api.rest_api.arn}"
}

для политики ресурсов обратите внимание, я хочу автоматизировать вставку идентификатора API в json документ политики

data "aws_region" "current" {}
data "aws_caller_identity" "current" {}
data "template_file" "init" {
  template = "${file("${path.root}/${var.policy_file_location}")}"
  vars = {
    current_region      = "${data.aws_region.current.name}"
    current_aws_account = "${data.aws_caller_identity.current.account_id}"
    current_api_id              = "${aws_api_gateway_rest_api.rest_api.id}"
  }
}

json policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:${current_region}:${current_aws_account}:${current_api_id}/*"
        }
    ]
}

Когда я пытаюсь предоставить политику ресурсов, аналогичную следующей, я получаю

Ошибка: Cycle: module.simple-api-gw.data.template_file.init, module.simple-api-gw.aws_api_gateway_rest_api. rest_api

как я могу устранить эту ошибку? Я хочу предоставить api id динамически в файле json.

1 Ответ

1 голос
/ 19 февраля 2020

Генерируемая вами политика будет подходящей для назначения роли IAM или пользователю IAM , чтобы позволить им вызывать API. Присвоение указанной политики c непосредственно шлюзу API не имеет смысла. По сути, вы говорите, что «любой, у кого есть разрешение на вызов API, может иметь разрешение на вызов API», что является циклическим утверждением.

Политика , подходящая для назначения шлюзу API , может подойти что-то вроде лимитных запросов для c Принципалов или c IP-адресов.

Пожалуйста, ознакомьтесь с документацией, которую я связал выше. В нем описаны два отдельных метода управления доступом к вашему API-шлюзу через разрешения IAM или с помощью политик ресурсов. Вы пытаетесь назначить разрешение IAM в качестве политики ресурсов, которая не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...