Белый шлюз API определенного IP - PullRequest
0 голосов
/ 25 сентября 2019

Я создал конечную точку шлюза API AWS, которая приводит к API, который я создал.Я хочу сделать этот API доступным для определенных IP-адресов без какой-либо аутентификации (который будет обращаться к ним через Интернет)

Это политика, которую я прикрепил

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:123412341234:abcdabcdab/*/*/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "141.223.201.10/32"
                }
            }
        }
    ]
}

IP-адрес источника - это мой IP-адрес, с которого должна быть доступна конечная точка.Но я получаю отказано в доступе.

Существует аналогичный вопрос , но он использует аутентификацию IAM, которая мне не нужна.

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 сентября 2019

Вы видели это ?

Похоже, что разрешение включено и в шаблон по умолчанию.Я пошел, чтобы повторить это и увидел, что на консоли политики ресурсов есть кнопка «Черный список диапазона IP-адресов».Если щелкнуть по нему, он создаст политику, подобную этой:


    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Deny",
                "Principal": "*",
                "Action": "execute-api:Invoke",
                "Resource": "execute-api:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}",
                "Condition" : {
                    "IpAddress": {
                        "aws:SourceIp": [ "{{sourceIpOrCIDRBlock}}", "{{sourceIpOrCIDRBlock}}" ]
                    }
                }
            },
            {
                "Effect": "Allow",
                "Principal": "*",
                "Action": "execute-api:Invoke",
                "Resource": "execute-api:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}"
            }
        ]
    }

Вы можете изменить ее из черного списка в белый список, изменив условие «IpAddress» на то же условие «NotIpAddress», которое вы используете в своемнерабочий шаблон.

Это сработало для меня просто отлично, поэтому, если это не так, я включил бы Доступ к ведению журнала в вашем API GW API и убедился, что исходный IP AWS, который вы видите, приходит, когда вы делаетезапрос (убедитесь, что вы также регистрируете идентификатор запроса).

Чтобы убедиться, что вы просматриваете правильный журнал доступа, при выполнении запроса вы должны перехватить заголовок ответа "x-amzn-requesttid",Заголовок ответа, используя пример curl:

x-amzn-requesttid: 85e403e8-210a-49e4-909e-b3fb66d6467e

FTR, я ввел * в заполнители, что кнопкасоздает в политике по умолчанию, и консоль AWS преобразует их в соответствующие значения, поэтому после преобразования консоли она выглядит примерно так.Преобразования, о которых я говорю, - это заполнители, которые у меня есть ниже (REGION, ACCID, APIID):


    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Deny",
                "Principal": "*",
                "Action": "execute-api:Invoke",
                "Resource": "arn:aws:execute-api:REGION:ACCID:APIID/*/*/*",
                "Condition": {
                    "NotIpAddress": {
                        "aws:SourceIp": "34.213.29.81/32"
                    }
                }
            },
            {
                "Effect": "Allow",
                "Principal": "*",
                "Action": "execute-api:Invoke",
                "Resource": "arn:aws:execute-api:REGION:ACCID:APIID/*/*/*"
            }
        ]
    }

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