首页 文章

Amazon S3权限

提问于
浏览
4

我正在使用GetSessionToken / GetFederationToken在Amazon S3中使用临时会话,我计划每个人都可以上传到S3超过10K用户,因此我最初想到为每个用户使用一个存储桶并为每个存储桶设置写入(上载)权限每个用户,但由于每个亚马逊帐户的存储桶数量有限制,我已经抛弃了这个想法 .

如何设置允许公共读取的权限,并仅在用户想要上载的对象的键的前缀上传?

例如,如果用户名X上传文件,则密钥必须类似于X_filename .

或者任何其他允许我拥有安全性的方式,这适用于移动应用程序,我不想在上传文件时通过我们自己的服务器 .

编辑:

我已经使用以下策略尝试了GetFederationToken操作

"{
   "Statement":[{
      "Effect":"Allow",
      "Action":["s3:PutObject","s3:GetObject","s3:GetObjectVersion",
      "s3:DeleteObject",\"s3:DeleteObjectVersion"],
      "Resource":"arn:aws:s3:::user.uploads/john/*"
   }
   ]
}"

我在S3和文件夹john上有bucket user.uploads

但是任何使用会话凭据上传到具有密钥john / filename的bucket user.uploads都会因访问被拒绝而失败“

1 回答

  • 5

    Amazon's Identity and Access Management (IAM)服务是您所需要的 . documentation有很多例子,其中一些与你的场景相符 .

    来自文档:

    示例5:允许合作伙伴将文件放入公司存储桶的特定部分在此示例中,我们创建一个名为WidgetCo的组,代表合作伙伴公司,然后为合作伙伴公司的特定人员(或应用程序)创建用户谁需要访问权限,然后将用户放入组中 . 然后,我们附加一个策略,使组PutObject可以访问公司存储桶中的以下目录:my_corporate_bucket / uploads / widgetco . 我们还希望阻止WidgetCo组对存储桶执行任何其他操作,因此我们添加一个语句,拒绝对AWS账户中任何Amazon S3资源上除PutObject之外的任何Amazon S3操作的权限 . 只有在您的AWS账户中的其他地方使用广泛的策略,才能为用户提供对Amazon S3的广泛访问权限时,才需要这样做 . {
    “声明”:[{
    “效果”:“允许”,
    “行动”: “S3:PutObject”
    “资源”: “阿尔恩:AWS:S3 ::: my_corporate_bucket /上传/ widgetco /
    },
    {
    “效果”:“拒绝”,
    “NotAction”: “S3:PutObject”
    “资源”:[ “ARN:AWS:S3 ::: my_corporate_bucket /上传/ widgetco / *”]
    },
    {
    “效果”:“拒绝”,
    “行动”: “S3:
    ”,
    “NotResource”:“arn:aws:s3 ::: my_corporate_bucket / uploads / widgetco / *”
    }]
    }

    您将为每个用户创建一个新标识,并根据需要使用该标识来控制对子文件夹(前缀)的访问 .

相关问题