我在Web前端使用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}/*"
}
]
}
在前端,我正在使用Amplify的Storage.put
函数:
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}
能够在存储桶策略中起作用?