amazon web services - services - mensaje de recepción: respuesta prohibida desde la puerta de enlace de la API de AWS
capa gratuita aws (12)
[resuelto] Nuevo en AWS (y StackOverflow). Estoy tratando de crear un servicio lambda en AWS y hacer que se acceda desde el exterior a través de la puerta de enlace API sin necesidad de autenticación ni restricción.
Para facilitar las cosas, configuro la puerta de enlace por ahora para que sea un simulacro.
En el método Get de la API, la Autorización se establece en None
y la Clave de la API not required
es not required
.
Cuando intento esto, obtengo {"message":"Forbidden"}
(el mismo mensaje si lo conecto al servicio lambda real).
¿Algún consejo sobre cómo hacerlo accesible? Gracias
Cortafuegos local / antivirus o NGIPS ( Cisco Bluecoat ). Este último fue mi caso, donde ni siquiera obtendría registros en CloudWatch desde mi API. Estaba permitiendo mi sitio web de dominio de nivel superior, pero estaba bloqueando con 403 el subdominio de la api
, sin cuerpo en la pestaña de herramientas de desarrollo de la red del navegador.
Debe implementar su api en el escenario y usar la URL de la etapa para ir a Recursos, hacer clic en Acciones y elegir Implementar API
Ahora si te estas equivocando
{"mensaje": "Prohibido"}.
Por favor revise los siguientes pasos
1) Si habilita la copia de la clave api y pasa su clave en el cartero
2) Ahora sigue recibiendo el mismo error significa que necesitará crear un plan de uso
3) establece el límite y asigna un plan a tu api
En el panel de la puerta de enlace de la API, seleccione Recursos, haga clic en Acciones y elija Implementar API. Antes de su primera implementación, la única respuesta que obtendrá es el {"message":"Forbidden"}
.
Esto puede estar lejos de ser obvio, pero otra razón para ver el error "Prohibido" al usar AWS API Gateway puede estar llamando a una URL incorrecta que no corresponde a ningún método de API implementada. Puede ocurrir si en realidad estás golpeando la URL incorrecta (por ejemplo, en lugar de llamar a https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
(ten en cuenta que antes de los users
) https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users
(sin etapa). Esperaría obtener 404, pero obtendrá 403.
Por cierto: después de realizar una implementación en https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
llamando a https://9999xx9x99.execute-api.us-east-1.amazonaws.com/user
(note la forma del sustantivo en singular aquí) obtendrá 403 también, pero con el mensaje "Falta el token de autenticación".
Habíamos enfrentado este problema en nuestra producción cuando usamos Kong como nuestra puerta de enlace api. Nuestras solicitudes se aprobaron cuando se iniciaron desde Postman pero fallaron con 403 cuando se iniciaron a través del Código. Se habilitó el complemento Bot en Kong que solo permitió solicitudes iniciadas desde el navegador o la aplicación móvil en función del valor del encabezado del agente de usuario. Nuestras solicitudes iniciadas a través del Cliente HTTP fallaron. Una vez que deshabilitamos el plugin de bot, el error no ocurrió. Ahora permite solicitar si el agente de usuario es Apache-HttpClient / 4.5.2 (Java / 1.8.0_91).
Puede que sea demasiado tarde, pero una de las razones por las que la puerta de enlace de la API daría un mensaje "prohibido" es cuando pasa los datos del cuerpo de la solicitud en una operación GET. Para resolver el problema, haga que su recurso sea POST o no pase los datos en el cuerpo de la solicitud.
Recibí este error de un servicio nginx fargate que intentaba acceder a una API privada en la puerta de enlace API. Necesitaba agregar una política a las políticas de recursos en mi api como esta
{
"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>"
}
}
}
]
}
Si Authorization
y la API KEY Required
están configuradas en verdadero para el método, entonces asegúrese de tener los siguientes encabezados al enviar la solicitud:
- Tipo de contenido (generalmente application / x-www-form-urlencoded si se llama GET)
- ANFITRIÓN
- X-Amz-Date
- Autorización
- x-api-key
Utilizo POSTMAN
para las pruebas de API, que son bastante confiables y luego son bastante sencillas.
Nota: No agregue el encabezado de la clave x-api si ha establecido la API KEY REQUIRED
como FALSA. Y si ha establecido AUTHORIZATION
como FALSO, no agregue el encabezado de Autorización.
Si configura la opción ''Clave de API requerida'' como verdadera, marque a continuación.
- tiene que pasar el parámetro de encabezado HTTP ''x-api-key'' a la puerta de enlace API.
- La Clave API tuvo que ser creada.
- Además, debe verificar un plan de uso para la clave API en la consola de la puerta de enlace API.
Si establece la clave ''API'' requerida en true, debe pasar la clave api como encabezado.
La clave API se pasa como campo de encabezado ''x-api-key''. Incluso después de agregar este campo en el encabezado, este problema puede ocurrir. En ese caso, por favor valide los siguientes puntos.
- ¿Tienes un plan de uso? Si no es necesario crear uno.
- Enlace su API con el Plan de Uso. Para eso agrega una etapa, enlazará tu API.
- ¿Tienes API clave? si no es así, debe crear una clave API y habilitarla.
- Agregue el Plan de uso que está vinculado con su API a esta clave de API. Para eso añade Plan de uso.
Si usa un nombre de dominio personalizado y se olvida de seleccionar la puesta en escena del destino, recibirá el mensaje Forbidden
.
Simplemente vaya a Custom Domain Names
y haga clic en Edit
en su dominio, y luego seleccione la etapa en Base Path Mappings
.
Tuve un problema similar, y tuve el siguiente:
- Un dominio personalizado (borde optimizado)
- Múltiples etapas (desarrollo, puesta en escena, prod.)
Tampoco establecí ninguna Autorización ni restricciones para simplificar las cosas.
Pude solucionar el problema agregando asignaciones de ruta base para cada una de mis etapas (desarrollo, puesta en escena, prod.).