我正在尝试为Amazon IAM用户配置一项策略,该策略允许他们仅执行到s3存储桶的特定文件夹的上载。
编写如下策略时,我可以成功上传图像:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Put*"
],
"Resource": "*"
}
]
}
我的上传功能(在带有浏览器端javascript aws-sdk的coffeescript中):
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策略还是陌生的。
更新
通过使以下代码在IAM模拟器中运行,我已经取得了一些进展,但是不幸的是,尽管我说应该允许放置对象,但是当我尝试实际上传时,它仍然会引发403错误。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject*"
],
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"s3:PutObjectAcl*",
"s3:PutObjectVersionAcl*"
],
"Resource": "*"
}
]
}
我终于得到这个工作正常,关键是,我不得不使用NotAction
和NotResource
在Deny
部分。
请参见以下代码:
{
"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/*"
]
}
]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句