调用 PutBucketPolicy 操作上传策略 JSON 时出现 MalformedPolicy:策略必须是有效的 JSON,且第一个字节必须是 '{'

问题描述 投票:0回答:1

我尝试使用 AWS CLI 将策略附加到 S3 存储桶,并使用包含策略作为输入的 JSON 文件。我的命令是:

aws s3api put-bucket-policy --bucket myBucketName --policy file://policy.json

但是,我不断收到此错误:

An error occurred (MalformedPolicy) when calling the PutBucketPolicy operation: Policies must be valid JSON and the first byte must be '{'

策略文件的内容是:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::redacted:role/redacted"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::myBucketName/*"
        }
    ]
}

我的 JSON 文件格式似乎正确。第一个字节肯定是“{”。文件路径非常简单,文件位于使用cli的当前工作目录中。 “{”之前没有空格或其他字符。这是我第一次收到此错误。我之前已经成功上传并应用了其他策略。但这项政策失败了。

我比较了之前成功的政策内容,没有发现任何明显的错误。

为了保持理智,我将策略更改为仅是一个左大括号 { } ,没有任何内容,并且我得到了相同的错误。

请注意,所显示的 JSON 中的 arn 已被编辑,但我已确认它对于我的帐户来说是正确的;这个问题似乎与arn无关。

我还看到了这个相关问题:AWS S3 Bucket 给出“策略必须是有效的 JSON 并且第一个字节必须是 '{' 本例的解决方案是在左大括号“{”之前包含空格。我的情况并非如此。

另外,我尝试添加“版本”字段,但这并没有修复错误(“版本”:“2008-10-17”,)

进一步更新:我尝试使用 AWS 管理控制台应用该策略。完全相同的 JSON 保存并成功应用!现在怎么办?

为什么这个 JSON 策略文件无效?

json amazon-web-services amazon-s3 aws-cli
1个回答
0
投票

原来问题出在 JSON 文件的编码上。该文件是由 Powershell 脚本生成的;在我没有意识到的情况下,Powershell 的编码是 UTF-16 LE BOM。

更改创建 .json 文件的语句以使用 ANSII 编码修复了问题:

输出文件-FilePath“policy.json”-InputObject $policy -编码ansii

我怀疑 AWS CLI 使用 UTF-8 编码,并且对 UTF-16 LE BOM 格式不满意。

如果您收到此错误,并且您确定 JSON 文件以“{”开头,请确保文件的字符编码设置为 UTF-8 或 ANSII。

© www.soinside.com 2019 - 2024. All rights reserved.