【问题标题】:Uploading files to Amazon S3 bucket from different user accounts从不同的用户账户将文件上传到 Amazon S3 存储桶
【发布时间】:2018-04-19 05:26:43
【问题描述】:

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

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

【问题讨论】:

  • 您是否将 Amazon IAM 用于您的用户身份?换句话说,您的用户在登录时是否使用 Amazon IAM 帐户登录?
  • @Pace 我觉得可以用

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


【解决方案1】:

为什么需要创建单个存储桶?至于我的理解是完全可以由用户创建。

无论如何,如果您真的需要一个存储桶,您可以通过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

【讨论】:

  • 感谢您的回答,我不太确定单桶。可能我应该为每个用户创建单独的存储桶吗?那我还应该使用 Amazon IAM 吗?
  • 如果使用单个bucket,仍然需要IAM,但是策略会简单一些
  • 此答案假定应用程序用户也是 IAM 用户,但通常情况并非如此。
猜你喜欢
  • 2020-07-05
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多