AWS anonymous не авторизован для выполнения: execute-api: Вызвать ресурс.Частный API-шлюз - PullRequest
0 голосов
/ 28 января 2019

У меня есть функция REST API Lambda, развернутая в частной подсети, где тип шлюза API является закрытым.После this я настроил конечную точку vpc для частного шлюза api в две общедоступные подсети того же vpc, что и частная подсеть лямбда-функций.Соответствующая группа безопасности vpce разрешает весь трафик.

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

 anonymous is not authorized to perform: execute-api:Invoke on resource.

Iне могу найти проблему, так как политика ресурсов частного шлюза API выглядит следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:eu-central-1:xxxxxxx:xxxxxx/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "vpce-xxxxxxxx"
                }
            }
        }
    ]
}

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

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

Не могли бы вы проверить свою группу безопасности на конечных точках шлюза API?Вам нужно использовать

Ingress: CIDR источника https вашего vpc.

Outgress: весь трафик, 0.0.0.0/0

Я обнаружил, что если вы используете sg-insg (Ingress), это не сработает.После того, как я изменился как CIDR, он работает сейчас.Я могу вызвать этот API с бастиона.

0 голосов
/ 05 августа 2019

На самом деле, то, что сказал @peterhack, было ответом и для меня.При использовании предоставленного шаблона «Белый список VPC» со всеми заполнителями возникла проблема:

...xxx:/{{stageNameOrWildcard}}/{{httpVerbOrWildcard}}/{{resourcePathOrWildcard}}

с заменой на ...xxx:*/* исправили его

0 голосов
/ 16 февраля 2019

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

Как вы уже упоминали, вы создали экземпляр EC2 в общедоступной подсети.По умолчанию в этой подсети будет доступен интернет-шлюз, поэтому фактически ваша конечная точка VPC не будет использоваться для доступа к частному шлюзу API.В документах также говорится следующее:

Чтобы подчеркнуть «конфиденциальность» этого API, протестируйте его на ресурсе, который находится только внутри вашего VPC и не имеет прямого доступа к нему в сети, втрадиционный сетевой подход.

Если ваша политика верна, в вашем блоке ресурсов используется правильный регион, а идентификатор конечной точки vpc верен, вам просто нужно развернуть другой экземпляр ec2 внутри частной подсети.Затем должен работать следующий процесс:

  1. ssh на экземпляр в публичной подсети
  2. из публичного экземпляра ssh в экземпляр в частной подсети
  3. выполнить действие вызова из этогоЭкземпляр EC2 в частной подсети
...