在Cloudformation中将对API网关端点的访问权限限制为VPC

时间:2019-03-14 16:47:01

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

我试图将对API网关端点的访问限制为来自VPC的请求。有示例API网关资源策略,甚至还包括RestApi资源上的Policy属性,但是当尚未创建API时,我无法弄清楚如何编写需要API ID的策略。 我有一个示例,可以根据AWS文档了解堆栈的外观:

MyRestApi:
Type: 'AWS::ApiGateway::RestApi'
Properties:
  Name: My Great API
  Policy:
    Version: 2012-10-17
    Statement:
      - Effect: Allow
        Principal: '*'
        Action: execute-api:Invoke
        Resource:
          Fn::Join:
            - - ''
              - 'arn:aws:execute-api:'
              - Ref: region
              - ':'
              - Ref: accountId
              - ':'
              - Ref: MyRestApi
      - Effect: Deny
        Principal: '*'
        Action: execute-api:Invoke
        Resource:
          Fn::Join:
            - - ''
              - 'arn:aws:execute-api:'
              - Ref: Region
              - ':'
              - Ref: AccountId
              - ':'
              - Ref: MyRestApi
        Condition:
          StringNotEquals:
            "aws:SourceVpc":
              Ref: VpcId

问题在于,仍无法创建策略中的 MyRestApi 。我敢肯定我不是唯一想要这样做的人。我宁愿认为这是一个普遍的问题,所以很有可能我还没有找到答案。

感谢您的帮助,

Stefan

PS:我使用的文档是https://docs.aws.amazon.com/de_de/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-policyhttps://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-examples.html

1 个答案:

答案 0 :(得分:1)

根据AWS documentation,由于此问题,该策略支持Resource的特殊语法。

   "Resource": [
     "execute-api:/stage/method/path"
   ]

在评论中,他们称之为:

  

//这里支持简化格式,因为尚不知道apiId,并且可以在导入时导出分区/区域/帐户