如何使用Python Boto Library在AWS S3中设置文件(密钥)的权限?

问题描述:

使用Boto库更新Python脚本后,我遇到了AWS S3中某个文件的权限问题。如何使用Python Boto Library在AWS S3中设置文件(密钥)的权限?

下面是我使用更新的文件在S3命令:

k.set_contents_from_string(json.dumps(parsed_json, indent=4)) 

该文件被正确地更新,但是权限得到改变,这是非常奇怪,我。

更新文件之前,权限是:

Granteed: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账户,同一个脚本在其中一个账户中运行良好,但没有更改文件权限,而在另一个账户上,我遇到了上述问题。现在,您可能会认为我可能在这两个aws帐户之间对S3有不同的策略访问权限。我已经检查过,并且这两个帐户都有“AmazonS3FullAccess”策略。

因此,即使这是AWS账户设置的问题,我想向我的脚本添加一行,以将文件权限恢复为更新之前的方式。我认为应该这样做,并允许我在运行Python脚本后下载文件。

如何在S3中使用Boto设置文件权限(不是桶)?

设置policy,与canned acl strings之一,是这样的:

k.set_contents_from_string(json.dumps(parsed_json, indent=4), policy=<ACL STRING>) 
+0

我通过与AWS凭据创建/etc/boto.cfg文件来解决这个问题。我并不知道BOTO不会在.aws/credentials文件中查看证书。 – GreenTeaTech