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 в частную подсеть. Тогда следующий процесс должен работать;
- SSH на экземпляр в публичной подсети
- из публичного экземпляра SSH в экземпляр в частной подсети
- выполнить действие вызова из этого экземпляра EC2 в частной подсети