使用Boto库更新Python脚本后,我在AWS S3中遇到文件权限问题。
以下是我用于在S3中更新文件的命令:
k.set_contents_from_string(json.dumps(parsed_json, indent=4))
文件正确更新,但权限发生变化,这对我来说很奇怪。
在更新文件之前,权限是:
授予:awsprod打开/下载(选中)查看权限(已选中)编辑权限(已选中)
更新文件后,权限消失,在通过AWS Dashboard / Console查看权限时,没有任何内容显示。
删除权限后,无法再下载文件,并且每次都会失败。
通过aws cli:
A client error (403) occurred when calling the HeadObject operation: Forbidden
Completed 1 part(s) with ... file(s) remaining
通过aws控制台:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>A6E4AA2E3A3B9429</RequestId>
<HostId>
47gMhTpdFRAYm1cP4noivQlNEeB/cxHr2QFRXewNERdYcGcan2QU/fOVQ/upOl7Zp9fNIXLUnkk=
</HostId>
</Error>
我的访问是通过IAM进行的,我的用户拥有“AmazonS3FullAccess”政策,可以让我完全访问S3。
更有趣的是,我有2个AWS账户,并且相同的脚本在其中一个中运行良好而不更改文件权限,而在另一个账户上我遇到了上述问题。现在,您可能认为我可能在这两个aw帐户之间对S3有不同的策略访问权限。我已经检查过了,两个帐户都有“AmazonS3FullAccess”政策。
因此,即使这是AWS账户设置中的问题,我也想在我的脚本中添加一行,将文件权限设置回更新之前的状态。我认为应该这样做,并允许我在运行Python脚本后下载文件。
如何使用Boto?
在S3中设置文件权限(而不是存储桶)答案 0 :(得分:1)
使用policy中的一个设置canned acl strings,例如:
k.set_contents_from_string(json.dumps(parsed_json, indent=4), policy=<ACL STRING>)