it-roy-ru.com

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

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

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

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

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

Любой совет о том, как сделать его доступным? Спасибо

24
Fab

Если вы установили для параметра «API Key Required» значение true, проверьте ниже. 

  1. вы должны передать параметр HTTP-заголовка «x-api-key» в API-шлюз. 
  2. Ключ API должен быть создан. 
  3. Кроме того, вам необходимо проверить план использования для ключа API на консоли API Gateway.
40
Daniel Jihoon Oh

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

31
jneves

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

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

13
kontrollanten

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

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

Я также не установил ни Авторизацию, ни ограничения, чтобы сделать вещи простыми.

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

6
Joben R. Ilagan

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

  1. Content-Type (обычно application/x-www-form-urlencoded, если вызывается GET)
  2. Хозяин
  3. X-Amz-Date
  4. Авторизация
  5. х-апи-ключ

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

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

3
illusionx

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

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

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

Это может быть далеко не очевидно, но еще одной причиной появления «Запрещенной» ошибки при использовании AWS API Gateway может быть неправильный URL-адрес, который не соответствует ни одному развернутому методу API. Это может произойти, если вы на самом деле нажали неверный URL (например, вместо вызова https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users (примечание dev stage перед users) вы вызвали https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users (no stage). Вы ожидаете получить 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»!

1
madhead

Я получил эту ошибку от службы 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>"
                }
            }
        }
    ]
}
1
gary69

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

1
Radu

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

CORS включен?

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

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

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

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

1
Max Lans

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

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

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

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

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

 enter image description here

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

 enter image description here

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

 enter image description here

0
vaquar khan

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

0
Cshah

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

0
Ignitious Nkwinika