【发布时间】:2020-04-07 07:42:02
【问题描述】:
我有一个移动应用程序,它让用户通过 AWS Cognito 进行身份验证,他们最终进入用户池。他们能够将对象放入桶中没有问题,但他们不能删除。我想要做的是让每个登录用户都能够删除存储桶中的文件。
文件的路径例如:my_bucket_name/protected/eu-west-2:de55c2rf-8f1e-836d-88f9-82da662aau6dt/videos/video1
要删除,我称之为:
import { Storage } from 'aws-amplify';
。 . .
delFromS3 = async () => {
Storage.remove('protected/eu-west-2:de55c2rf-8f1e-836d-88f9-82da662aau6dt/videos/video1')
.then(result => console.log('Deleted Video from S3'))
.catch(err => console.log('Deleting video from S3 error: ', err));
}
我在调用这个时一直收到错误访问被拒绝,所以我添加了一个存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::my_bucket_name/*"
}
]
}
这个函数唯一一次返回结果是当我输入"Principal": "*" 时,但这会使我的存储桶公开给任何人,我不想这样做。它也不接受这是有效的主要政策:
"Principal": { "AWS": [ "arn:aws:cognito-idp:eu-west-2:968257789397:userpool/eu-west-2_2ecGAT74q" ] }.
所以我需要知道正确的校长是什么。
所以我要么需要一种方法来允许 cognito 用户池中的用户被授权删除对象。或者因为我手动知道每个用户子存储桶中文件的路径(例如/protected/eu-west-2:de55c2rf-8f1e-836d-88f9-82da662aau6dt/videos/video1),只需将其传递给我的delFromS3() 函数。我的存储桶策略应该读什么?我还有什么遗漏的吗?
请帮忙!
【问题讨论】:
-
你读过
${cognito-identity.amazonaws.com:sub}(见docs.aws.amazon.com/cognito/latest/developerguide/…)吗? -
是的,我尝试像这样添加:"Resource": "arn:aws:s3:::my_bucket_name/protected/${cognito-identity.amazonaws.com:sub}/*" 但它还是不行
-
你有api后端吗
-
我使用 AWS Amplify,只是为了实例化 DynamoDB 和 Cognito,仅此而已。
标签: amazon-web-services amazon-s3 amazon-cognito amazon-iam aws-amplify