当前位置: 首页 > 知识库问答 >
问题:

boto3生成带有SSE加密的预签名url

贺高飞
2023-03-14

我正在寻找使用boto3和sse加密生成预签名url的示例。

这是我目前的代码

s3_client = boto3.client('s3',
                                  region_name='ap-south-1',
                                  endpoint_url='http://s3.ap-south-1.amazonaws.com',
                                  config=boto3.session.Config(signature_version='s3v4'),
                                  )
        try:
            response = s3_client.generate_presigned_url('put_object',
                                                        Params={'Bucket': bucket_name,
                                                                'Key': object_name},
                                                        ExpiresIn=expiration)
        except ClientError as e:
            logging.error("In client error exception code")
            logging.error(e)
            return None

我正在努力寻找使用SSE加密的正确参数。我能够使用PUT调用上传文件。我还想知道客户端使用的标头以坚持sse加密。

共有2个答案

张坚白
2023-03-14

您可以向预签名的URL添加条件,这些条件必须满足才能使上载有效。这可能包括x-amz服务器端加密。

请参阅:创建POST策略-Amazon S3

或者,您可以添加一个bucket策略来拒绝任何未加密的请求。

参见:如何防止未加密对象上传到Amazon S3 | AWS安全博客

公孙嘉禧
2023-03-14
import boto3

access_key = "..."
secret_key = "..."
bucket = "..."
s3 = boto3.client('s3',
              aws_access_key_id=access_key,
              aws_secret_access_key=secret_key)
return(s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': bucket,
        'Key': filename,
        'SSECustomerAlgorithm': 'AES256',
    }
))

还添加标题:-

'x-amz-server-side-encryption': 'AES256' 

在调用预签名url时在前端代码中

 类似资料:
  • 我已经使用客户密钥(SSE-C)为AWS S3服务器端加密创建了一个客户密钥。 我可以使用密钥上传对象。但是,当我使用AWS Java SDK生成一个预签名的URL时,该URL创建成功了,但是当我点击该URL时,我会得到以下错误。 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。

  • 我有一个用例,我使用lambda函数生成有符号的网址上传到S3桶,我还在生成有符号的网址时设置了元数据值,我的boto3版本是boto3==1.18.35。以前,当我生成有符号的网址上传到桶时,网址看起来像这样: https://bucket-name.s3.amazonaws.com/scanned-file-list/cf389880-09ff-4301-8fa7-b4054941685b/6

  • 如果你想把自己的资源发放给第三方用户访问,但是又不想开放Bucket的读权限,可以通过生成预签名URL的形式提供给用户一个临时的访问URL。在生成URL时,你可以指定URL过期的时间,从而限制用户长时间访问。 生成一个预签名的URL 如下代码: String bucketName = "your-bucket-name"; String key = "your-object-key"; // 设

  • 如果你想把自己的资源发放给第三方用户访问,但是又不想开放Bucket的读权限,可以通过生成预签名URL的形式提供给用户一个临时的访问URL。在生成URL时,你可以指定URL过期的时间,从而限制用户长时间访问。 生成预签名URL来获取Object <?php $url = $client->generatePresignedUrl(array( 'Bucket' => 'your-buck

  • 我知道水桶是存在的。当我通过AWS Web GUI导航到此项目并双击它时,它将打开带有URL的对象,并且运行良好: 所以我认为我在使用SDK时肯定做错了什么。

  • web应用安全的黄金法则是,永远不要相信来自不可信来源的数据。有时通过不可信的媒介来传递数据会非常方便。密码签名后的值可以通过不受信任的途径传递,这样是安全的,因为任何篡改都会检测的到。 Django提供了用于签名的底层API,以及用于设置和读取被签名cookie的上层API,它们是web应用中最常使用的签名工具之一。 你可能会发现,签名对于以下事情非常有用: 生成用于“重置我的账户”的URL,并