【问题标题】:AWS S3 permissions - error with put-bucket-aclAWS S3 权限 - put-bucket-acl 错误
【发布时间】:2016-12-26 01:38:32
【问题描述】:

我正在尝试将 S3 存储桶从一个帐户 (A) 移动到另一个帐户 (B)。 我已成功完成该操作并从账户 A 中删除了存储桶。 我正在尝试将新存储桶从账户 B 移动到账户 B 上的另一个存储桶,但了解到除了存储桶本身之外,我无权访问这些文件。 在与 s3 cli 及其权限进行了多次斗争之后,我检查了s3api 命令,发现这些文件(令人惊讶的是)仍然拥有旧的所有权。 我现在正在尝试更改它,但在put-bucket-acl 中停滞不前,JSON 文件不适用于s3api 命令。 我尝试在 debug 中运行该命令,但并没有做太多。 有人知道该怎么做吗? 也许是解决这个问题的更好方法?

到目前为止我做了什么: 命令:

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 输入中的未知参数: “权限”,必须是以下之一:ACL、AccessControlPolicy、Bucket、 ContentMD5、GrantFullControl、GrantRead、GrantReadACP、GrantWrite、 GrantWriteACP

更新: 在我的情况下,两个帐户之间的 AssumeRole 不起作用。 cli (s3cmd,s3api) GUI (MCSTools,bucketexplorer), ACL using headers, body (Postman) 也没有帮助.. 我正在连接 AWS 支持并希望获得最好的结果。 当我有解决方案时,我会更新。

【问题讨论】:

    标签: json amazon-web-services amazon-s3 acl


    【解决方案1】:

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

    【讨论】:

    • 我不知道file://&lt;myfile.json&gt; 部分。
    【解决方案2】:

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

    【讨论】:

    • 我知道这个选项,但我不清楚参数 - 我需要全部插入吗?如果我不想公开,如何获取“URI”?我在哪里可以获得“所有者”的“ContentMD5” - 我是否插入旧所有者?如果我的用户没有电子邮件地址,我该怎么办?如何让他访问?谢谢!
    • 在docs.aws.amazon.com/cli/latest/reference/s3api/… 和docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTacl.html 有极简结构的好例子。您可以省略ContentMD5。如果您不使用AmazonCustomerByEmail,则可以省略用户电子邮件,而使用CanonicalUser 或Group。
    【解决方案3】:

    对于仍然希望执行此操作的任何人 - 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,将会更容易。

    【讨论】:

      【解决方案4】:

      语法如下(附示例):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-05
        • 2019-09-20
        • 2020-02-14
        • 2021-09-30
        • 2023-03-13
        • 2017-01-30
        • 1970-01-01
        • 2013-03-16
        相关资源
        最近更新 更多