Ограничить доступ к конечной точке шлюза API до VPC в облачной информации - PullRequest
5 голосов
/ 14 марта 2019

Я пытаюсь ограничить доступ к моим конечным точкам шлюза API запросами от моего VPC. Существуют примеры политик ресурсов API-шлюза и даже свойства Policy для ресурса RestApi, но я не могу понять, как написать политику, для которой требуется идентификатор API, когда API еще не создан. У меня есть пример моего понимания того, как должен выглядеть стек, основываясь на документации 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-policy и https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-examples.html

1 Ответ

2 голосов
/ 16 марта 2019

Согласно документации AWS политика поддерживает специальный синтаксис для Resource из-за этой проблемы.

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

В комментариях они называют это:

// здесь поддерживается упрощенный формат, поскольку apiId еще не известен, а раздел / регион / учетная запись могут быть получены во время импорта

...