Политика S3 Bucket для расширенного интерфейса - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть веб-интерфейс с 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?

...