【ceph相關】s3預簽名url(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}

參數說明:

  • --endpoint:訪問url地址,如http://172.16.21.117:7480
  • --expires-in:訪問url過期時間,單位為秒,默認過期時間為3600s,最大過期時間為604800s(7天)

2、boto3

參考官方說明:S3.Client.generate_presigned_url

使用boto3,參考presign.py腳本如下

import boto3
from botocore.client import Config

s3_host = "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_host, 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)

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM