AWS S3 权限 - put-bucket-acl 出错
AWS S3 permissions - error with put-bucket-acl
我正在尝试将 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"
}
我得到的错误:
Unknown parameter in input: "Grantee", must be one of: ACL,
AccessControlPolicy, Bucket, ContentMD5, GrantFullControl, GrantRead,
GrantReadACP, GrantWrite, GrantWriteACP Unknown parameter in input:
"Permission", must be one of: ACL, AccessControlPolicy, Bucket,
ContentMD5, GrantFullControl, GrantRead, GrantReadACP, GrantWrite,
GrantWriteACP
更新:
2 个帐户之间的 AssumeRole 在我的情况下不起作用。
cli (s3cmd,s3api) GUI (MCSTools,bucketexplorer), ACL 使用 headers,body (Postman) 也没有帮助..
我正在连接 AWS 支持并希望一切顺利。
当我有解决方案时,我会更新。
你的JSON是错误的。根据 to the documentation 的 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": ""
}
所以,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 文档但忽略了正确的命令。由于这个 Whosebug 页面,我很高兴我得到了正确的命令:)
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 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"
}
}
我正在尝试将 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"
}
我得到的错误:
Unknown parameter in input: "Grantee", must be one of: ACL, AccessControlPolicy, Bucket, ContentMD5, GrantFullControl, GrantRead, GrantReadACP, GrantWrite, GrantWriteACP Unknown parameter in input: "Permission", must be one of: ACL, AccessControlPolicy, Bucket, ContentMD5, GrantFullControl, GrantRead, GrantReadACP, GrantWrite, GrantWriteACP
更新: 2 个帐户之间的 AssumeRole 在我的情况下不起作用。 cli (s3cmd,s3api) GUI (MCSTools,bucketexplorer), ACL 使用 headers,body (Postman) 也没有帮助.. 我正在连接 AWS 支持并希望一切顺利。 当我有解决方案时,我会更新。
你的JSON是错误的。根据 to the documentation 的 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": ""
}
所以,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 文档但忽略了正确的命令。由于这个 Whosebug 页面,我很高兴我得到了正确的命令:)
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 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"
}
}