AWS S3权限 - 带有bucket-acl的错误



我试图将S3存储桶从一个帐户(a)移动到另一个帐户(b)。我已经成功完成了该操作,并从Account A中删除了存储桶。我试图将新存储库从帐户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"
 }

我遇到的错误:

输入中未知参数:"收入人",必须是:ACL, AccessControlpolicy,Bucket,ContentMD5,Grantfullcontrol,Grantread, GrantreadAcp,GrantWrite,GrantWriteACP输入中未知参数: "许可",必须是:ACL,AccessControlpolicy,Bucket, ContentMD5,Grantfullcontrol,Grantread,GrantreadAcp,Grantwrite, GrantWriteACP

更新:在我的情况下,两个帐户之间的假设不起作用。CLI(S3CMD,S3API)GUI(McStools,bucketexplorer),使用标头,身体(Postman)的ACL也无济于事。我正在连接AWS支持并希望获得最好的支持。有解决方案时,我会更新。

所以,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

您的JSON是错误的。根据put-bucket-acl选项的文档,您可以使用--generate-cli-skeleton生成有效的JSON模板('Skeleton')。例如:

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": ""
}

对于任何仍在寻找此操作的人 - OP可能会查看正确的AWS DOC,但忽略了正确的命令。我很高兴由于这个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被覆盖。因此,您要添加的任何权限都需要与现有策略一起使用。当您使用某些命令首先描述所有ACL时,会更容易。

语法为以下(例如):

aws s3api put-bucket-acl --bucket bucket_name --access-control-policy file://grant.json

Grant.json文件:

{
    "Grants": [
            {
            "Grantee": {
                "ID": "CANONICAL_ID_TO_GRANT",
                "Type": "CanonicalUser"
            },
            "Permission": "WRITE"
            },
            {
            "Grantee": {
                "ID": "CANONICAL_ID_TO_GRANT",
                "Type": "CanonicalUser"
            },
            "Permission": "READ"
            }
        ],
        "Owner": {
            "DisplayName": "example_owner",
            "ID": "CANONICAL_ID_OWNER"
        }
}

最新更新