将文件从不同的用户帐户上传到Amazon S3存储桶

时间:2018-04-19 05:26:44

标签: c# amazon-web-services amazon-s3 asp.net-core-mvc

我需要从我的MVC .NET Core C#应用程序上传文件到Amazon S3存储桶。如何组织此过程,以便我的应用的不同用户无法访问其他文件?

我猜他们都应该分享一个桶,我不能为每个用户创建存储桶?但是,为了我的应用程序的每个用户可以下载/仅列出他/她自己的文件,我应该指定什么?

1 个答案:

答案 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