kpo*_*ock 6 amazon-s3 amazon-web-services
我正在尝试使用put-bucket-policy通过aws s3api(Windows)将策略添加到s3存储桶.
我正在使用此处给出的政策代码http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html 在"授予匿名用户权限"下,我的桶名被替换.
我正进入(状态
A client error (MalformedPolicy) occured: policies must be valid JSON and the first byte must be '{'
Run Code Online (Sandbox Code Playgroud)
有线索吗?
编辑:内联JSON工作 - 因此它是某种文件格式问题 - 只是我看不到的.很高兴能够使用文件.
编辑:为了帮助那些可能在这里结束的人,应该用小写命名桶.如果没有,一些s3/s3api操作可以正常工作,但其他操作则不然.看到这里
您必须将file://协议方案添加到策略文件路径
$ aws s3api put-bucket-policy --bucket kryptonite \
--policy file:///home/superman/aws-example/public-bucket-policy.json
Run Code Online (Sandbox Code Playgroud)
$ aws s3api put-bucket-policy --bucket kryptonite \
--policy file://C:\Temp\public-bucket-policy.json
Run Code Online (Sandbox Code Playgroud)
$ aws s3api put-bucket-policy --bucket kryptonite \
--policy file://public-bucket-policy.json
Run Code Online (Sandbox Code Playgroud)
首先,让我们确保没有其他政策:
$ s3api get-bucket-policy --bucket kryptonite
A client error (NoSuchBucketPolicy) occurred when calling the GetBucketPolicy
operation: The bucket policy does not exist
Run Code Online (Sandbox Code Playgroud)
现在让我们确保我们在当前目录中有策略文件,它包含有效的json(kryptonite桶的名称)
$ ls
public-bucket-policy.json
$ cat public-bucket-policy.json
{
"Statement": [
{
"Resource": "arn:aws:s3:::kryptonite/*",
"Action": "s3:GetObject",
"Principal": "*",
"Effect": "Allow",
"Sid": "AddPerm"
}
],
"Version": "2012-10-17"
}
Run Code Online (Sandbox Code Playgroud)
现在让我们尝试通过指定文件名来放置策略
$ s3api put-bucket-policy --bucket kryptonite --policy public-bucket-policy.json
A client error (MalformedPolicy) occurred when calling the PutBucketPolicy
operation: Policies must be valid JSON and the first byte must be '{'
Run Code Online (Sandbox Code Playgroud)
现在让我们再做一次尝试并指定完整路径$ s3api put-bucket-policy --bucket kryptonite\--policy /home/superman/aws-example/public-bucket-policy.json
A client error (MalformedPolicy) occurred when calling the PutBucketPolicy
operation: Policies must be valid JSON and the first byte must be '{'
Run Code Online (Sandbox Code Playgroud)
现在让我们添加file://前缀,它会起作用
$ s3api put-bucket-policy --bucket kryptonite \
--policy file:///home/superman/aws-example/public-bucket-policy.json
Run Code Online (Sandbox Code Playgroud)
我们现在可以验证是否已应用此政策
$ s3api get-bucket-policy --bucket kryptonite
{
"Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"AddPerm\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::kryptonite/*\"}]}"
}
Run Code Online (Sandbox Code Playgroud)
作为特殊奖励,让我们通过jq实用程序管理策略(两次)以提取正确的字段并很好地格式化JSON
$ s3api get-bucket-policy --bucket kryptonite | jq .Policy --raw-output | jq .
{
"Statement": [
{
"Resource": "arn:aws:s3:::kryptonite/*",
"Action": "s3:GetObject",
"Principal": "*",
"Effect": "Allow",
"Sid": "AddPerm"
}
],
"Version": "2012-10-17"
}
Run Code Online (Sandbox Code Playgroud)
我已经选择了 inling JSON。
对于那些最终来到这里的人来说,有一些可能有用的提示。
桶名称:桶名称应全部小写。如果没有,某些 s3/s3api 操作可以工作(mb、put-bucket-policy),但其他操作( put-bucket-website)则不行 请参阅http://support.rightscale.com/09-Clouds/AWS/FAQs/FAQ_0094_- _What_are_valid_S3_bucket_names%3F
如果像我一样,您首先在通过 S3 控制台创建的存储桶上使用get-bucket-website来获取用于将存储桶设为网站的示例 JSON,则它可能不起作用。get-bucket-website为您返回任何未设置参数的空白条目(例如RedirectAllRequestsTo ) - 如果在put-bucket-website中使用,则会出现错误...如果您不需要参数并且有效,则只需错过参数即可 - 例如
{"IndexDocument":{"后缀":"index.html"}}
是最小值。(如果内联,请记住转义引号!)
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |