我正进入(状态
调用ListObjects操作时发生错误(AccessDenied):拒绝访问
当我尝试从我的S3存储桶中获取文件夹时 .
使用此命令
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
存储桶的IAM权限如下所示
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
我需要更改才能成功 copy
和 ls
?
6 回答
您已授权对S3存储桶内的对象执行命令,但您未授权对存储桶本身执行任何操作 . 将您的政策修改为以下内容:
如果你想使用你提到的命令“aws s3 cp s3:// bucket-name / data / all-data /.-recursive”递归复制所有s3桶对象,这里是执行此操作所需的最小策略:
此策略中的第一个语句允许列出存储桶内的对象 . 请注意,使用此设置,您还可以在此存储桶的子目录中列出对象 . 似乎不能仅对s3子目录赋予ls权限,因此尝试将此操作应用于资源“arn:aws:s3 ::: // bucket-name / data / all-data /”won'按预期工作(我已经测试并尝试了多种方法,这里的帮助将不胜感激) .
此策略中的第二个语句允许在特定子目录中获取存储桶内的对象 . 这意味着您将能够复制“s3:// bucket-name / data / all-data /”路径中的任何内容 . 请注意,这不允许您从父路径复制,例如“s3:// bucket-name / data /” .
在这里可以找到类似的问题,这使我得到了解决方案 . https://github.com/aws/aws-cli/issues/2408
希望这有帮助!
您必须通过“arn:aws:3 ::: bucketname”或“arn:aws:3 ::: bucketname *”为存储桶指定资源 . 后者是首选,因为它也允许对铲斗的物体进行操纵 . 注意没有斜线!
列表对象是Bucket上的操作 . 因此,需要操作“s3:ListBucket” . 将对象添加到Bucket是对Object的操作 . 因此,需要动作“s3:PutObject” . 当然,您可能希望根据需要添加其他操作 .
我无法访问S3,因为
首先我在实例上配置了密钥访问(然后在启动后无法附加角色)
忘记了几个月
附加角色到实例
试图访问 . 配置的密钥具有比角色更高的优先级,并且访问被拒绝,因为未授予用户必要的S3权限 .
解决方案:
rm -rf .aws/credentials
,然后aws
使用角色 .我在使用如下策略时遇到了同样的错误,尽管我对s3:ListObjects操作有“s3:ListBucket” .
然后我通过添加一行来修复它 "arn:aws:s3:::bucketname"
我当时认为错误是由于"s3:ListObjects"动作但我不得不添加动作 "s3:ListBucket" 以解决问题"AccessDenied for ListObjects for S3 bucket"