首页 文章

如何仅允许在Amazon S3存储桶中的特定目录上使用PutObject权限

提问于
浏览
1

我正在尝试使用允许它们仅执行上传到s3存储桶的特定文件夹的策略来配置Amazon IAM用户 .

当策略编写如下时,我可以成功上传图像:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Put*"
            ],
            "Resource": "*"
        }
    ]
}

我的上传功能(在coffeescript浏览器端javascript aws-sdk):

s3.putObject data, (err, data) =>
  if err
    console.log err
    console.log 'Error uploading data: ', data
  else
    console.log 'succesfully uploaded the image!'

但是我想将权限范围仅限于允许putObject,并且只在特定目录中 . 我认为这个政策会起作用,但它会引发403错误:

{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::my_bucket/example_directory"
            }
        ]
    }

我的政策中是否存在语法错误,或者我在做其他错误的操作?我仍然是编写IAM政策的新手 .

Update

我已经通过在IAM模拟器中使用以下代码取得了一些进展,但遗憾的是,尽管我说应该允许使用putObject,但当我尝试实际上传时它仍会抛出403错误 .

simulator pass

{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Deny",
                "Action": [
                    "s3:PutObjectAcl*",
                    "s3:PutObjectVersionAcl*"
                ],
                "Resource": "*"
            }
        ]
    }

2 回答

  • 0

    我终于按预期工作了,关键是我必须在 Deny 部分使用 NotActionNotResource .

    请参阅以下代码:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject*"
                ],
                "Resource": [
                    "arn:aws:s3:::mybucket/myfolder",
                    "arn:aws:s3:::mybucket/myfolder/*"
                ]
            },
            {
                "Effect": "Deny",
                "NotAction": [
                    "s3:PutObjectAcl*",
                    "s3:PutObjectVersionAcl*"
                ],
                "NotResource": [
                    "arn:aws:s3:::mybucket/myfolder",
                    "arn:aws:s3:::mybucket/myfolder/*"
                ]
            }
        ]
    }
    
  • 1

    尝试:

    "Resource": "arn:aws:s3:::my_bucket/example_directory/*"
    

相关问题