amazon-web-services - 拒绝访问 Amazon S3 的策略

标签 amazon-web-services amazon-s3

使用 s3cmd,下面的策略允许我像这样列出 AllBuckets:

s3cmd ls

和 ListBucket 像这样:

s3cmd ls s3://backups/

但我无法上传这样的文件:

s3cmd put filename s3://backups/

我刚刚收到此错误:

ERROR: S3 error: Access Denied

该政策基于搜索和网络上的许多示例,但我只是看不出哪里出了问题。该策略是允许用户将文件上传到备份目录(最终我什至不知道他们要列出哪些存储桶,但我将其放入只是为了检查该策略实际上是否已被读取)。

其他可能相关的信息 -

  • 我使用 Dragon Disk(S3 的前端)与其他用户创建了存储桶
  • 该新 IAM 用户通过属于附加了该策略的组来连接到该策略。

这是策略,请注意,CreateObject 和 PutObject 是仅有的两个原始条目,添加其他条目几乎只是为了看看发生了什么:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:CreateObject",
                "s3:*"
            ],
            "Resource": "arn:aws:s3:::backups/*"
        }
    ]
}

编辑 1 -

只是说,如果我添加此策略,它就可以正常工作,所以我知道这与我的策略有关:

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

编辑2 - 我制定了另一项策略,用于创建一个名为“asdwasw432”的存储桶,以防万一我的 UI 创建的存储桶因某种原因无法使用。但我仍然无法上传任何文件(访问被拒绝)。我可以列出存储桶并创建新存储桶。所有的建议似乎都告诉我要完全按照我在下面做的事情去做,但如果有效的话就没有。我还漏掉了什么吗?

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1397834652000",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "Stmt1397834745000",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::asdwasw432",
                "arn:aws:s3:::asdwasw432/*"
            ]
        }
    ]
}

最佳答案

好吧,我已经解决了这个问题,但我仍然很困惑。

事实证明,当我运行时

s3cmd --configure

我接受了默认区域“美国”。这应该设置为“us-east-1”。我通过运行调试发现了这一点

s3cmd -d ..etc...

这向我显示了包含此内容的一行 -

'reason': 'Bad Request', 'data': '<?xml version="1.0" 
encoding="UTF-8"?>\n<Error><Code>AuthorizationHeaderMalformed</Code>
<Message>The authorization header is malformed; the region \'US\' is
 wrong; expecting \'us-east-1\'</Message><Region>us-east-1</Region>

重新运行配置并更正区域解决了这个问题。

如果该区域确实是问题所在,请有人解释一下为什么我能够在不正确的区域上正常工作?最近,我通过制作

使一切正常工作
Action : "*"

这让我陷入了另一个死胡同,假设我一定使用了错误的命令。为了完整起见,此政策对我有效(只要区域正确!):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::asdwasw432",
                "arn:aws:s3:::asdwasw432/*"
            ]
        }
    ]
}

最后一点,我已将此策略附加到用户而不是组。这对我的使用来说是有意义的,但是当我提出问题时,我将其附加到一个组并将用户添加到该组。不确定这是否会产生影响。

关于amazon-web-services - 拒绝访问 Amazon S3 的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307452/

相关文章:

amazon-web-services - 具有多个AWS凭证配置文件的PySpark s3访问?

amazon-web-services - EC2 的 AWS Elasticache 超时

python - 让客户端通过 Chalice 将图像上传到 S3 存储桶的最佳实践是什么?

browser - 缓存对 CORS : No 'Access-Control-Allow-Origin' header is present on the requested resource 的影响

node.js - 如何将多个文件直接上传到 Amazon S3?

python - 如何使用 python/boto 获取最新的 aws 卷快照 id#?

amazon-web-services - AWS云信息模板

amazon-web-services - CDK如何使用预留的rds/ec2实例?

java - Amazon S3 预签名 URL 转义 key 中的斜杠

c# - 从 amazon s3 流式传输文件