我需要从我的MVC .NET Core C#应用程序上传文件到Amazon S3存储桶。如何组织此过程,以便我的应用的不同用户无法访问其他文件?
我猜他们都应该分享一个桶,我不能为每个用户创建存储桶?但是,为了我的应用程序的每个用户可以下载/仅列出他/她自己的文件,我应该指定什么?
答案 0 :(得分:2)
为什么需要创建一个存储桶?至于我的理解是完全没有用户创建一个。
无论如何,如果您确实需要一个存储桶,则可以通过IAM
政策使用文件夹级权限。
以下是一个用户的政策:
水桶名称为mycompany
用户是David
每个用户的文件夹是/home/name
该政策允许首先列出存储桶,然后允许列出文件夹/home
和/home/name
。最后,所有操作都允许在文件夹/home/name
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringEquals":{"s3:prefix":["","home/", "home/David"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-company/home/David/*"]
}
]
}
您可以找到一个很好的分步解释以及如何here