He creado la puerta de enlace API con TERRAFORM y luego estoy adjuntando la API para que use el marco sin servidor.

He creado una política de recursos basada en este tutorial de AWS (https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-resource-policy-access/) ya que quiero poder utilizar dominios personalizados de API Gateway pero no quiero mi Cualquiera puede acceder a las API a través de Internet, a menos que su dirección IP esté en mi lista blanca.

Aquí está mi política renderizada:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow",
            "Effect": "Allow",
            "Principal": "*",
            "Resource": "arn:aws:execute-api:eu-west-1:*:/*/*/*"
        },
        {
            "Sid": "ipwhitelist",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:eu-west-1:*:/*/*/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                       <<excluded>>
                    ]
                }
            }
        }
    ]
}

He vuelto a implementar mi API y ahora estoy bloqueado independientemente de si mi dirección IP está en la lista permitida o no y, según el tutorial, esto debería funcionar.

También he probado la política eliminando toda la sección de nebil para que solo permita todo el tráfico y esto todavía está resultando en que se bloqueen mis llamadas, cuando eliminé la política y el proyecto RedEpeguen, lo que funciona de nuevo, por lo que se dice que es una razón por la cual la política de Permitir aún bloquee todo

Estoy buscando ideas sobre dónde buscar para averiguar por qué la lista blanca no funciona.

1
berimbolo 1 sep. 2020 a las 16:10

1 respuesta

La mejor respuesta

La respuesta a esto es que me faltaba un permiso de mi política de permisos, el permiso explícito es necesario para permitir cualquier cosa que luego esté excluida por la política de denegación pero faltaba alguna acción, tenía que asegurarme de que lo siguiente estuviera presente en terraform que generó la parte de permiso de la política:

actions = ["execute-api:Invoke"]

Luego se traduce a lo siguiente en la política real de IAM:

"Action": "execute-api:Invoke"

1
berimbolo 1 sep. 2020 a las 18:39