具有资源策略的AWS API网关的地形循环依赖关系

时间:2020-02-19 14:20:30

标签: amazon-web-services terraform aws-api-gateway

问题陈述 我正在尝试使用terraform跟随自动化aws api网关,这是我的代码的一部分

用于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}"
}

用于资源政策 请注意,我要在json策略文档中自动插入api id

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政策

{
    "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}/*"
        }
    ]
}

当我尝试提供类似于以下操作的资源策略时

错误:周期:module.simple-api-gw.data.template_file.init, module.simple-api-gw.aws_api_gateway_rest_api.rest_api

如何解决此错误?我想在json文件中动态提供api id。

2 个答案:

答案 0 :(得分:1)

您正在生成的策略为appropriate to assign to an IAM role or IAM user,以允许他们调用API。将特定策略直接分配给API网关没有任何意义。本质上,您说的是“具有调用API权限的任何人都可以具有调用API的权限”。

策略appropriate for assigning to an API Gateway的作用类似于将请求限制到特定的主体或特定的IP地址。

请参阅上面链接的文档。它概述了两种单独的方法,这些方法用于通过IAM权限或资源策略来控制对API网关的访问。您正在尝试将IAM权限分配为资源策略,该策略将无法正常工作。

答案 1 :(得分:0)

问题是您正在尝试在创建资源时引用该资源的输出。您无需为策略中的资源填充执行信息,而可以使用“ execute-api:/ *”代替。