С недавним выпуском API Gateway Cognito Custom Authorizers я пытаюсь использовать Cognito, API Gateway и S3 вместе для аутентифицированного контроля доступа без лямбда-символов .
Авторизация с помощью API-шлюза работает должным образом (с доверительными отношениями для роли выполнения API-шлюза, установленной правильно), но я не могу получить политику ресурсов для захвата вспомогательной переменной Cognito User ID для точного доступауправление ресурсами S3 на основе идентификатора пользователя.
Вот текущий поток, который я пытаюсь выполнить:
- Аутентификация с помощью Cognito и получение действительного токена
- Отправить токенк шлюзу API для получения доступа к корзине S3 (через тип интеграции службы AWS)
- точный доступ только к каталогу идентификатора пользователя
- возврат объекта S3 (на основе конечной точки API)
Вот моя текущая политика ресурсов для роли выполнения API-шлюза:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cognito-idp:*",
"cognito-sync:*",
"cognito-identity:*"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:Get*",
],
"Resource": [
"arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}
Все работает как надо, но эта переменная IAM (в политике, связанной с ролью выполнения API-шлюза) не выглядитчтобы быть правым.
Я наткнулся на эту статью StackOverflow и попытался использовать оба формата us-east-1:xxxx-xxxx-xxxx-xxxx
и xxxx-xxxx-xxxx-xxxx
, но оба дине похоже на работу.Я использую атрибут sub
, найденный в информации о пользователе пула Cognito.Если я жестко закодирую папку в S3 в подпрограмме Cognito User ID Sub, она будет работать нормально.
Как заставить переменную Cognito работать в политике ролей выполнения API-шлюза?
Вот несколько других статей, которые я нашел, связанных с вопросом на форумах AWS:
Переменные Cognito IAM не работают для политик предполагаемой роли
Какую когнитивную информацию мы можем использовать в качестве переменных IAM?