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

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

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

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

Я не могу найти проблему, так как ресурсная политика частного шлюза 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"
                }
            }
        }
    ]
}

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

1 ответ

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

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

замена на ...xxx:*/* починил это

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

Вход: https исходный CIDR вашего vpc.

Выход: весь трафик, 0.0.0.0/0

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

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

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

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

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

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