Получение сообщения: запрещенный ответ от шлюза API AWS

[решено] Новое для AWS (и StackOverflow). Я пытаюсь создать лямбда-сервис на AWS и получить доступ к нему извне через шлюз API без необходимости аутентификации или ограничения.

Чтобы упростить задачу, я теперь установил шлюз как макет.

В методе Get API API для авторизации установлено значение None, а ключ API not required.

Когда я пытаюсь это сделать, я получаю {"message":"Forbidden"} (это же сообщение, если я подключу его к фактической лямбда-службе).

Любые советы о том, как сделать его доступным? Благодаря

Ответ 1

Если вы установите для параметра "API-ключ обязательно" значение "Истина", проверьте ниже.

  • вам нужно передать HTTP-заголовок "x-api-key" в API Gateway.
  • Необходимо было создать API-ключ.
  • Кроме того, вам необходимо проверить План использования API-ключа на консоли API-шлюза.

Ответ 2

На панели инструментов API-шлюза выберите "Ресурсы", нажмите "Действия" и выберите "Развернуть API". До вашего первого развертывания единственный ответ, который вы получите, это {"message":"Forbidden"}.

Ответ 3

Если вы используете пользовательское доменное имя и забыли выбрать этап назначения, вы получите сообщение Forbidden.

Просто перейдите к Custom Domain Names и нажмите Edit в вашем домене, а затем выберите этап под Base Path Mappings.

Ответ 4

У меня была аналогичная проблема, и у меня было следующее:

  • Пользовательский домен (Edge Optimized)
  • Несколько этапов (dev, staging, prod)

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

Мне удалось исправить проблему, добавив сопоставления базового пути для каждого из моих этапов (dev, staging, prod).

Ответ 5

Если для метода Authorization и API KEY Required для метода установлено значение true, то при отправке запроса убедитесь, что у вас есть следующие заголовки:

  • Content-Type (обычно application/x-www-form-urlencoded, если GET-вызов)
  • HOST
  • X-Amz-Date
  • Разрешение
  • х-апи ключ

Я использую POSTMAN для тестирования API, который является достаточно надежным, а затем направляет его прямо вперед.

Примечание. Не добавляйте заголовок ключа x-api, если вы установили API KEY Required как FALSE. И если вы установили Authorization как FALSE, не добавляйте заголовок авторизации.

Ответ 6

Если для ключа 'API' необходимо установить значение true, необходимо передать ключ API в качестве заголовка.

Ключ API передается в виде поля заголовка "x-api-key". Даже после добавления этого поля в заголовок эта проблема может возникнуть. В этом случае, пожалуйста, подтвердите ниже пункты

  • У вас есть план использования? если не нужно его создавать.
  • Свяжите свой API с Планом использования. Для этого добавьте этап, он свяжет ваш API.
  • У вас есть API Key? если нет, вам нужно создать ключ API и включить его.
  • Добавьте план использования, связанный с вашим API, к этому ключу API. Для этого добавьте план использования.

Ответ 7

Я получил эту ошибку от службы nginx fargate, пытающейся получить доступ к частному API в API Gateway. Мне нужно было добавить политику под политиками ресурсов в моем API, как это

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:<AccountID>:<RestApiID>/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "<VPC Endpoint ID for execute-api>"
                }
            }
        }
    ]
}

Ответ 8

Это может быть далеко не очевидно, но еще одной причиной появления "Запрещенной" ошибки при использовании AWS API Gateway может быть неправильный URL-адрес, который не соответствует ни одному из развернутых методов API. Это может произойти, если вы на самом деле нажали неправильный URL (например, вместо того, чтобы позвонить по https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users (обратите внимание на этап dev перед users), который вы назвали https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users (без этапа). Вы ожидаете получить 404, но вы получите 403.

Кстати, после того, как вы выполните развертывание на https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users вызов https://9999xx9x99.execute-api.us-east-1.amazonaws.com/user (обратите внимание на форму единственного существительного здесь), вы также получите… 403, но с сообщением "Missing Authentication Token"!

Ответ 9

Локальный брандмауэр/антивирус или NGIPS (Cisco Bluecoat). Последнее было моим случаем, когда я даже не получил бы логи в CloudWatch от моего API. Он разрешал мой веб-сайт, размещенный на домене верхнего уровня, но блокировал с помощью 403 субдомена api, но на вкладке dev-tools в браузере не было тела.

Ответ 10

Есть несколько вещей, которые нужно сделать, когда мы получим {сообщение: запрещено} в шлюзе API:

CORS включен?

  1. Проверьте, включен ли CORS в API (для начала разрешите источник '*', чтобы мы могли безопасно выполнять тестирование)
  2. Разверните API, чтобы убедиться, что все настройки соответствуют ожиданиям.

Ключ API включен?

  1. Проверьте, включен ли ключ API в шлюзе API
  2. Проверьте, настроен ли ключ API.
  3. Проверьте, назначен ли ваш ключ API для правильного плана использования, и добавьте этап API, без этапа API вы всегда получите {сообщение: запрещено}

Если вы все еще сталкиваетесь с проблемами, дайте мне знать, чтобы я или один из наших облачных гуру @levarne могли помочь.

Ответ 11

Мы столкнулись с этой проблемой в нашем производстве, когда использовали Kong в качестве шлюза API. Наши запросы прошли через, когда инициировались из Почтальона, но не были выполнены с 403, когда инициированы через Код. Был включен плагин Bot в Kong, который разрешал только запросы, инициированные из браузера или мобильного приложения на основе значения заголовка пользовательского агента. Наши запросы, инициированные через Http Client, не были выполнены. После того, как мы отключили плагин бота, ошибка не возникла. Теперь он позволяет запрашивать, является ли пользователь-агент Apache-HttpClient/4.5.2 (Java/1.8.0_91).

Ответ 12

Возможно, я опоздал, но одна из причин, по которой API-шлюз может выдавать "запрещенные" сообщения, - это когда вы передаете данные в теле запроса для операции GET. Для решения проблемы либо сделайте POST вашего ресурса, либо вы не передадите данные в тело запроса.

Ответ 13

Вам нужно развернуть свой API на этапе и использовать URL-адрес этапа, перейти к разделу Ресурсы, нажать Действия и выбрать Deploy API.

Теперь, если вы получаете ошибку

{ "Сообщение": "Forbidden"}.

Пожалуйста, проверьте следующие шаги

1) Если вы включили копирование ключа API и передали свой ключ в почтальоне

enter image description here

2) Теперь вы все еще получаете ту же ошибку означает, что вам нужно будет создать план использования

enter image description here

3) установить лимит и назначить план для вашего API

enter image description here

Ответ 14

Я получил {"message":"Forbidden"} в API с EndpointConfiguration, установленным в PRIVATE, и для него создана VpcEndpoint в частных подсетях Vpc (это межсервисный API)

Я получил {"message":"Forbidden"} той причине, что у меня сложилось впечатление, что я должен использовать один из URL-адресов VpcEndpoint. Используемый URL все еще тот, который связан со сценой (в консоли ApiGateway). Это:

https://${RestApiId}.execute-api.${Region}.amazonaws.com/${StageName}

Ответ 15

Я мог бы найти решение этой проблемы. У меня была та же проблема прямо сейчас на MacOS. Я попытался очистить свой DNS, и тогда это сработало!

Попробуйте это в терминале:

Mac OS X Yosemite и более поздние версии

sudo killall -HUP mDNSResponder

Mac OS X Yosemite с версии 10.10 до версии 10.10.3

sudo discoveryutil mdnsflushcache

Mac OS X Mavericks, Горный Лев и Лев

sudo killall -HUP mDNSResponder

Mac OS X Snow Leopard

sudo dscacheutil -flushcache