هنگامی که احتیاج دارید به کسی دسترسی موقت به یک آبجکت بدهید اما نمیخواهید credential را در اختیارش بگذارید، میتوانید ریکوست را با زمان محدودی presign کنید.
Presign کردن برای انواع ریکوست های مختلف از جمله گرفتن آبجکت، آپلود آبجکت و … ممکن است. در ادامه چند مورد از این ریکوست ها و نحوه ی ساین کردن آنها با ابزارهای مختلف مثال زده میشود.
همچنین جستجوی نوع ریکوستی که میخواهید بزنید (مثلا CopyPartUpload) به همراه کلیدواژه ی presigned-url و sdk/client مورد استفاده در گوگل معمولا شما را به جواب میرساند.
Get Object using Presigned URL
توجه: پارامترهای Expiration به ثانیه هستن.
Using boto3 (sdk for python)
import boto3
s3_client = boto3.client(
's3',
endpoint_url='http://s3.thr1.sotoon.ir',
aws_access_key_id='',
aws_secret_access_key='',
)
try:
response = s3_client.generate_presigned_url('get_object',
Params={'Bucket': 'BUCKET_NAME',
'Key': 'OBJECT_KEY'},
ExpiresIn=3600)
Using aws-sdk for javascript
const AWS = require('aws-sdk');
var s3 = new AWS.S3({endpoint: 's3.thr1.sotoon.ir', signatureVersion: 'v2'});
var req = s3.getObject({Bucket: 'BUCKET_NAME', Key: 'OBJECT_KEY'});
console.log(req.presign());
Using AWS CLI
aws s3 --endpoint-url=http://KISE_ENDPOINT/ presign s3://BUCKET_NAME_HERE/test1.png --expires-in EXPIRATION_TIME
Upload Objects Using Presigned URL
MultipartUpload using Presigned URL
پریساین کردن یک درخواست پشت CDN
اگر استوریج یا باکتی که میخواهید ریکوست بهش رو ساین کنید پشت CDN قرار دارد ، باید کامند ساین رو با endpoint آپ استریم دامین تون که تو پنل CDN ست کردید و استوریج ستون هست (مثلا s3.thr1.sotoon.ir) ساین کنید و بعدش دامنه رو توی presigned-url خروجی تغییر بدید به دامنه ی خودتون (مثلا example.com)
مثلا اگر خروجی ساین به این شکل بود:
https://my-bucket.s3.thr1.sotoon.ir/my-object?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=06eeb…&X-Amz-Date=20240515T191255Z&X-Amz-Expires=3600&X-Amz-Signature=fda69…&X-Amz-SignedHeaders=host
لازم است آن را به شکل زیر تغییر دهید:
https://my-bucket.example.com/my-object?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=06eeb…&X-Amz-Date=20240515T191255Z&X-Amz-Expires=3600&X-Amz-Signature=fda69…&X-Amz-SignedHeaders=host