AWS S3权限 - put-bucket-acl出错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS S3权限 - put-bucket-acl出错相关的知识,希望对你有一定的参考价值。
我试图将S3存储桶从一个帐户(A)移动到另一个帐户(B)。我已经成功完成了该操作并从帐户A中删除了存储桶。我正在尝试将新存储桶从帐户B移动到帐户B上的另一个存储桶,但是在存储桶本身旁边学习我无法访问这些文件。在与s3 cli及其权限进行了多次斗争之后,我检查了s3api
命令并发现文件(惊喜)仍然拥有旧的所有权。我现在正在尝试改变它,但是使用put-bucket-acl
静止不动,JSON文件不适用于s3api
命令。我尝试在调试中运行该命令,但没有做太多的事情。谁知道该怎么办?也许是解决这个问题的更好方法?
到目前为止我做了什么:命令:
aws s3api put-bucket-acl --bucket my-bucket --cli-input-json file://1.json
(与put-object-acl相同)
1.json文件:
"Grantee": {
"DisplayName": "account_B",
"EmailAddress": "user@mail.com",
"ID": "111111hughalphnumericnumber22222",
"Type": "CanonicalUser",
"Permission": "FULL_CONTROL"
}
我得到的错误:
输入中的未知参数:“Grantee”,必须是以下之一:ACL,AccessControlPolicy,Bucket,ContentMD5,GrantFullControl,GrantRead,GrantReadACP,GrantWrite,GrantWriteACP输入中的未知参数:“Permission”,必须是以下之一:ACL,AccessControlPolicy,Bucket ,ContentMD5,GrantFullControl,GrantRead,GrantReadACP,GrantWrite,GrantWriteACP
更新:两个帐户之间的AssumeRole在我的情况下不起作用。 cli(s3cmd,s3api)GUI(MCSTools,bucketexplorer),ACL使用标题,正文(Postman)也没有帮助。我正在连接AWS支持并希望获得最佳效果。当我有解决方案时,我会更新。
你的JSON是错的。根据to the documentation的put-bucket-acl
选项,您可以使用--generate-cli-skeleton
生成有效的JSON模板('骨架')。例如:
aws s3api put-bucket-acl --bucket BUCKETNAME --generate-cli-skeleton
这是输出:
{
"ACL": "",
"AccessControlPolicy": {
"Grants": [
{
"Grantee": {
"DisplayName": "",
"EmailAddress": "",
"ID": "",
"Type": "",
"URI": ""
},
"Permission": ""
}
],
"Owner": {
"DisplayName": "",
"ID": ""
}
},
"Bucket": "",
"ContentMD5": "",
"GrantFullControl": "",
"GrantRead": "",
"GrantReadACP": "",
"GrantWrite": "",
"GrantWriteACP": ""
}
因此,AWS的支持来救援......我要离开这个让其他人看,所以他们不会浪费2天就像我试图弄清楚到底出了什么问题......
aws s3api get-object-acl --bucket <bucket_on_B> --key <Key_on_B_Owned_by_A> --profile IAM_User_A > A_to_B.json
应用结果:
aws s3api get-bucket-acl --bucket <Bucket_on_B> --profile IAM_User_B
到创建的json文件,然后运行
aws s3api put-object-acl --bucket <Bucket_on_B> --key <Key_on_B_Owned_by_A> --access-control-policy file://A_to_B.json --profile IAM_User_A
对于仍然希望这样做的人 - OP可能会查看正确的aws文档但忽略了正确的命令。我很高兴我得到了正确的命令,因为这个stackoverflow页面:)
https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-acl.html
^^带有示例的json语法存在于那里而不是--cli-input-json
,使用--access-control-policy
{
"Grants": [
{
"Grantee": {
"DisplayName": "string",
"EmailAddress": "string",
"ID": "string",
"Type": "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
"URI": "string"
},
"Permission": "FULL_CONTROL"|"WRITE"|"WRITE_ACP"|"READ"|"READ_ACP"
}
...
],
"Owner": {
"DisplayName": "string",
"ID": "string"
}
}
我将策略作为json文件并使用此命令它工作得很好。
aws s3api put-bucket-acl --bucket bucketname --access-control-policy file://yourJson.json
还有一点需要注意的是,我无法添加权限以及现有权限,旧的acl被覆盖。因此,您要添加的任何权限都需要与现有策略一起位于json策略文件中。使用某个命令首先描述所有ACL时会更容易。
以上是关于AWS S3权限 - put-bucket-acl出错的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AWS s3 或 AWS s3api 递归更改文件夹的权限