Как разрешить только IP / диапазон доступа к ресурсам AWS API Gateway - PullRequest
0 голосов
/ 17 октября 2018

Как лучше всего ограничить доступ к определенным маршрутам в шлюзе AWS API по IP?Я хочу разрешить только моему кластеру ECS доступ к определенным маршрутам в шлюзе API.Я пытался поставить шлюз ECS NAT, диапазон CIDR VPC в aws:SourceIp, но всегда получал отказ.Я даже попробовал публичный IP-адрес своего персонального компьютера ... те же результаты ... Это правильный путь?Или мне стоит попробовать авторизаторы IAM?Недостатком авторизатора IAM является необходимость подписывать вызовы API?Возможно, с помощью API Gateway SDK?Что означает изменение кода, которое я предпочитаю избегать.

{
  "Id": "MY_API_POLICY",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": ["XX.XX.XX.XX/32"]
        }
      },
      "Resource": [
        "arn:aws:execute-*:*:apiid/stagename/*/private/route"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-*:*:apiid/stagename/*/public/route"
      ]
    }
  ]
}

1 Ответ

0 голосов
/ 26 июня 2019

Поскольку @Visal уже упоминал, что ограничение ip / range является правильным способом.Вот пример: https://aws.amazon.com/de/blogs/compute/control-access-to-your-apis-using-amazon-api-gateway-resource-policies/

Существует пример политики, которая разрешает доступ для определенного диапазона IP-адресов:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::<account_idA>:user/<user>",
                    "arn:aws:iam::<account_idA>:root"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:<account_idB>:qxz8y9c8a4/*/*/*"
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:<account_idB>:qxz8y9c8a4/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": " 203.0.113.0/24"
                }
            }
        }
    ]
}

Или, если вы хотите запретить доступ, тогда вынайдет эту политику:

{
    "Effect": "Deny",
    "Principal": "*",
    "Action": "execute-api:Invoke",
    "Resource": "arn:aws:execute-api:us-east-1:<account_idB>:qxz8y9c8a4/*",
    "Condition": {
        "IpAddress": {
            "aws:SourceIp": "203.0.113.0/24"
        }
    }
}
...