使用具有完全访问权限的Boto3将文件上载到AWS S3

时间:2016-11-04 06:18:05

标签: python amazon-s3 boto boto3

上传到S3时,我需要帮助设置对象的权限。我想让它公开读/写。

我有如下功能。

def UploadFile(self, destFilePath, data):
        self._bucket.put_object(Key=destFilePath, Body=data, ACL='public-read-write')

运行时,我有权限错误。

ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

1 个答案:

答案 0 :(得分:3)

了解how your application can access AWS credentials非常重要。

在对AWS进行API调用时,必须提供凭据以对向AWS发出请求的人员或应用程序进行身份验证。这些凭证可以识别:

  • AWS身份和访问管理(IAM)中定义的用户,具有静态凭据
  • AWS IAM中定义的角色,其中没有凭据但用户或AWS服务假定为
  • <安全令牌服务创建的
  • 临时权限

为这些实体分配权限,授予对特定资源进行特定API调用的权限。例如,可以授予从Amazon S3存储桶下载数据,启动/停止Amazon EC2实例或修改安全设置的权限。这些权限在政策中定义。

您可以通过多种方式为Python应用程序提供凭据:

  • 通过在启动时分配了角色的 Amazon EC2实例上运行应用程序:应用程序可以retrieve credentials via the Instance Metadata service。 (最好的选择)
  • 通过在配置文件中提供凭据(始终存在危险,因为它们可能会被意外检入源代码存储库)
  • 通过环境变量(适用于本地计算机)
  • 传递凭据

因此,如果您收到let uniqueArray = duplicatesArray .map(function (date) { return date.getTime() }) .filter(function (date, i, array) { return array.indexOf(date) === i; }) .map(function (time) { return new Date(time); }); 错误,则应该:

  • 确定应用程序检索凭据的方式
  • 查看与这些凭据相关联的政策
  • 更新政策以授予必要的访问权限

请参阅:Boto documentation: Configuring CredentialsIAM documentation