首页 > 解决方案 > 我们如何允许 iam 用户只上传对象而拒绝他删除和列出对象?

问题描述

我想创建一个任何人都可以获取对象但只有 iam 用户可以上传对象的 S3 存储桶。

我的存储桶策略是这样的。任何人都可以读取对象,但不能执行删除、列出、创建操作。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicRead",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "*"
    }
  ]
}

我附加了以下策略,以允许将对象上传到用户和组。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1347416638923",
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my_bucket/*" //fixed as @Marcin mentioned

    }
  ]
}

问题是这个用户可以列出对象,从 javascript 中删除对象。我们怎样才能允许这个用户只上传对象?

顺便说一句,我们使用芥末存储。

标签: amazon-web-servicesamazon-s3

解决方案


arn:aws:s3:::my_bucket是一个桶,不是对象。因此它应该是:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1347416638923",
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my_bucket/*"
    },
    {
      "Sid": "ExplityDeny",
      "Effect": "Deny",
      "Action": "s3:DeleteObject",
      "Resource": "arn:aws:s3:::my_bucket/*"
    },
    {
      "Sid": "ExplityDeny2",
      "Effect": "Deny",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::my_bucket"
    }
  ]
}

推荐阅读