当前位置:   article > 正文

【ceph相关】s3预签名url(presign)_s3 presign

s3 presign

一、前言

1、预签名url

当需要将s3资源提供给其他用户访问,但又不想直接通过桶的访问权限,可以通过生成预签名url方式生成一个临时url提供给用户访问。
生成预签名url时,可以通过指定过期时间参数,限制用户访问时间。由于SigV4签名密钥最大有效期为7天,故生成的预签名url有效期最大也只有7天。

2、签名版本

Amazon S3有两个签名版本SigV2和SigV4版本,考虑到安全性和使用效率等因素,目前官方已停止SigV2版本的支持。
可以通过预签名url判断签名版本,通常SigV2预签名url带有&Expires参数,SigV4预签名url带有&X-Amz-Expires参数

二、配置说明

可以通过以下几种方式生成预签名url

1、awscli

目前awscli全部使用v4签名生成预签名url

aws --endpoint={Rest-Endpoint} s3 presign s3://{Bucket-Name}/{Object-Name} --expires-in {Expire-Time}
  • 1

参数说明:

  • –endpoint:访问url地址,如http://172.16.21.117:7480
  • –expires-in:访问url过期时间,单位为秒,默认过期时间为3600s,最大过期时间为604800s(7天)

2、boto3

参考官方说明:S3.Client.generate_presigned_url

使用boto3,参考presign.py脚本如下
注:需要额外安装boto3库,参考命令python -m pip install --user boto3 -i https://pypi.tuna.tsinghua.edu.cn/simple

import boto3
from botocore.client import Config


s3_endpoint = "http://172.16.21.117:7480"
s3_acces_key = "Q1RB59PA6S5SB7UV6GXX"
s3_secret_key = "tqycsru9Mm3ZG9xPWDhpuOXYeUOOiEoNHhFZLdXC"
s3_sign_vers = "s3v4"
#"s3"(SignV2) or "s3v4"(SignV4)


s3 = boto3.client('s3', endpoint_url = s3_endpoint, aws_access_key_id = s3_acces_key, aws_secret_access_key = s3_secret_key, config=Config(signature_version=s3_sign_vers))




bucket_name = "20201013"
object_name = "20201013000000.ps"
expire_time = 604800


url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': bucket_name,
        'Key': object_name
    },
    ExpiresIn=expire_time
)


print(url)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

SignV2 预签名URL:修改s3_sign_verss3

#SignV2 URLs by s3
[root@client42 home]# cat presign.py | grep "s3_sign_vers ="
s3_sign_vers = "s3"
[root@client42 home]# python presign.py 
http://172.16.21.117:7480/20201013/20201013000000.ps?AWSAccessKeyId=Q1RB59PA6S5SB7UV6GXX&Expires=1608274332&Signature=UwsxHwqZ%2BwK6BVeJUpMXZdmqJuM%3D
  • 1
  • 2
  • 3
  • 4
  • 5

SignV4 预签名URL:修改s3_sign_verss3v4

#SignV4 URLs by s3v4
[root@client42 home]# cat presign.py | grep "s3_sign_vers ="
s3_sign_vers = "s3v4"
[root@client42 home]# python presign.py 
http://172.16.21.117:7480/20201013/20201013000000.ps?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=604800&X-Amz-Credential=Q1RB59PA6S5SB7UV6GXX%2F20201211%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20201211T065250Z&X-Amz-Signature=0d1c24693910eb31365876376a7f354b062e8cf82df27abfdcf0e2ef68f612f9
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/707107
推荐阅读
相关标签
  

闽ICP备14008679号