[英]AWS Amplify Storage permissions, S3 bucket
我正在使用 Amazon AWS Amplify 开发一个客户服务应用程序,每个客户都有自己的登录凭证,登录后,他们可以创建新票证并上传一些附件。
我有三个 Cognito 组:管理员、版主、客户。
我使用 Amplify CLI 创建了一个新存储,并以这种方式限制了组的访问:
管理员 -> 创建/更新、读取、删除
版主 -> 创建/更新,阅读
客户 -> 创建/更新,阅读
然后,当我在我的代码中上传附件时,我使用“私人”scope: https://docs.amplify.aws/lib/storage/configureaccess/q/platform/js/
我需要的是允许客户上传文件,查看但不删除。 其他客户不能对其他客户上传的文件做任何事情,他们看不到它们或做任何事情。 属于 moderators 组的用户可以看到所有文件,但不能删除它们。 相反,属于 admin 组的用户可以看到上传给每个客户的所有文件,也可以删除它们。
问题在于,使用 scope“私人”,客户可以上传和查看他们的文件,但管理员用户甚至看不到它们。 如果我设置“受保护”scope,客户可以上传并查看他们的文件,管理员用户可以管理它们,但潜在的其他客户也可以看到这些文件,因为“受保护”scope,根据文档,它是“所有人可读用户”。
如何设置“私人”scope,让每个客户只能看到他们的文件,但属于管理员组或版主组的用户也可以管理它们?
我为我的项目所做的是使用放大覆盖存储来重写我的访问策略。 覆盖在 Storage 中创建一个 override.ts 文件。 然后,您可以为您的用例编写自定义策略。 这是一个例子:
import { AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyS3ResourceTemplate) {
resources.addCfnResource({
"type": "AWS::IAM::Policy",
"properties": {
"PolicyDocument": {
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": {
"Fn::Join": [
"",
[
"arn:aws:s3:::",
{
"Ref": "S3Bucket"
},
"*"
]
]
}
}
],
"Version": "2012-10-17"
},
"PolicyName": "CognitoGroup-policy-override",
"Roles": [
{
"Fn::Join": [
"",
[
{
"Ref": "EXISTING_USER_POOL_ID_REF"
},
"-ExistingGroupRole"
]
]
}
]
}
}, "CustomizeAccessForCognitoGroup");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.