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

Upload file to AWS S3 using Boto3 with full access permissions

您好,我需要有关在上传到 S3 时设置对象权限的帮助。我想做到 public read/write.

我有一个函数如下

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

理解how your application can access AWS credentials很重要。

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

  • 在 AWS Identity and Access Management (IAM) 中定义的 User,具有静态凭证
  • AWS IAM 中定义的角色,它没有凭据,但由用户或 AWS 服务假设[=48] =]
  • 由 AWS Security Token Service 创建的临时权限

这些实体被分配权限,授予对特定资源进行特定 API 调用的权利。例如,可能会授予从 Amazon S3 存储桶、start/stop Amazon EC2 实例下载数据或修改安全设置的权限。这些权限在 policies.

中定义

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

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

因此,如果您收到 AccessDenied 错误,您应该:

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

参见:Boto documentation: Configuring Credentials and IAM documentation