使用 Python 和 boto3 向 AWS 中的 S3 对象添加权限

Add permission to a S3 object in AWS using Python and boto3

我正在编写代码以向 S3 中存储桶中的对象添加权限。这将在已经存在的权限上添加一个权限,然后我想对文件执行一个操作,然后删除创建的保留原始权限的权限。

我想使用 python 的 boto3 库来做到这一点。

到目前为止我写的代码是 -

object_acl = s3.ObjectAcl(bucket_name,filename)
response = object_acl.put(AccessControlPolicy={
        'Grants': [
            {
                'Grantee': {
                    'DisplayName': 'DefaultPermisson',
                    'ID': '66414256532656',
                    'Type': 'CanonicalUser'
                  },
                'Permission': 'FULL_CONTROL'
            },
        ],

    })
print response 

这是生成错误,我无法创建新权限。在这方面需要帮助。

最合适的解决方案不是授予文件的临时下载权限,而是使用 Amazon S3 Pre-Signed URL.

默认情况下,Amazon S3 中的所有对象都是私有的。然后您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:

  • 访问控制列表对单个对象的权限
  • A 存储桶策略(基于路径、IP 地址、引荐来源网址等授予广泛访问权限)
  • IAM 用户和组(向具有 AWS 凭证的用户授予权限)
  • 预签名 URLs

A Pre-Signed URL 可用于授予对 S3 对象的访问权限,作为 "overriding" 访问控制的一种方式。通过附加到期时间和签名,可以通过 URL 访问通常私有的对象。这是无需 Web 服务器即可提供私人内容的好方法。

您可以提供一个 URL,仅向您希望的 people/applications 提供临时访问权限,而不是暂时向所有人开放访问权限。

你说你的目标是"to give a temporary permission to download a file from S3 into a temp folder on a EC2 instance"。为此,只需让您的应用程序生成预签名 URL,然后即可使用它来下载文件。 无需更改 S3 对象的权限

参见: