У меня есть веб-интерфейс с AWS-Amplify для обработки аутентификации через Cognito.Сейчас я пытаюсь настроить корзину S3, чтобы пользователи могли загружать мультимедийные файлы, и это прекрасно работает, когда я не беспокоюсь об ужесточении политик корзины.
Эта политика у меня есть на данный момент:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "policy-to-allow-public-gets",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<bucketname>/uploads/users/*/public/*"
},
{
"Sid": "policy-to-allow-users-to-manage-their-own-directory",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::<bucketname>/uploads/users/${cognito-identity.amazonaws.com:sub}/*"
}
]
}
На внешнем интерфейсе я использую функцию Storage.put
Amplify:
Storage.put(`uploads/users/${userId}/public/${filename}`, base64, {
level: 'public',
bucket: <bucketname>
})
, где userId
:
Auth.currentUserInfo()
.then((user) => {
resolve(user.id);
});
Из просмотрана вкладке Сеть инструментов разработчика заголовки аутентификации передаются правильно (насколько я знаю).И если я жестко закодировал identityId
пользователя в политику корзины (то есть ap-southeast-2:xxxxxxxx-yyyy-zzzz-1111-aaa222bbb333
), то это также сработает.
Нужно ли что-то делать, чтобы AWS мог распознать сторону сервера аутентификации - получить${cognito-identity.amazonaws.com:sub}
для работы в Bucket Policy?