Amazon web services AWS boto-将文件上载到S3导致S3ResponseError:403被禁止

Amazon web services AWS boto-将文件上载到S3导致S3ResponseError:403被禁止,amazon-web-services,amazon-s3,boto,Amazon Web Services,Amazon S3,Boto,我在爱尔兰(s3.eu-west-1.amazonaws.com) 我正在尝试使用以下策略上载文件: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::db-backup-production/*" } ]

我在爱尔兰(s3.eu-west-1.amazonaws.com)

我正在尝试使用以下策略上载文件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::db-backup-production/*"
        }
    ]
}
我一直都有以下错误

boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
使用此策略上载时:

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

上传工作正常。我做错了什么?

如果你只做s3“看跌期权”,你的保单应该给你足够的权利。但是,如果要通过sdk、cli调用等列出或获取bucket对象,还需要对bucket本身拥有权限

要提供这些权限,请将策略的“资源”部分用作数组,并在此数组中添加“arn:aws:s3:::db backup production”作为资源。我是这样想的:

"Resource": ["arn:aws:s3:::db-backup-production/*", "arn:aws:s3:::db-backup-production" ]

当指定S3桶权限时,需要考虑桶本身的权限,并单独考虑桶内容的权限。

一种方法是要求为同一个bucket指定两个资源:

"Resource": ["arn:aws:s3:::db-backup-production","arn:aws:s3:::db-backup-production/*"]
第一个资源指定bucket级别的范围,db backup production/*将用于对象级别的范围

但是,您可以在以下两个语句中考虑单独的对象和桶级权限:

  "Version": "2012-10-17",   "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::db-backup-production"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::db-backup-production/*"]
    }   ] }
此表单为您提供了对资源的更细粒度控制,包括bucket级和对象级


请参见

您是否有任何技术参考/理由说明您为什么需要这样的双资源参考?不,实际上第一个策略应该可以放置对象。我现在无法测试,但我很确定我也遇到了类似的情况,我不得不添加bucket资源。值得一试,但没有以这种方式链接到文档。Asaf,你是否只执行boto的putObject,或者你是否也启动了任何其他s3操作?你是否得到了这些建议?是的,实际上@Tom的回答很有帮助