用于扩大前端的S3存储桶策略

时间:2018-09-28 06:06:06

标签: amazon-web-services amazon-s3 amazon-cognito aws-amplify

我在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}能够在存储桶策略中起作用?

0 个答案:

没有答案