[AWS] Using presigned URLs

1. Using presigned URLs Các bucket và object trong S3 mặc định là private, người dùng không thể truy cập được. Tuy nhiên, có thể sử dụng presigned URL để chia sẻ hoặc cho phép người dùng upload object đến bucket mà không cần thông tin xác thực. (Key pair, IAM Role). Khi tạo presigned

1. Using presigned URLs

  • Các bucket và object trong S3 mặc định là private, người dùng không thể truy cập được.
  • Tuy nhiên, có thể sử dụng presigned URL để chia sẻ hoặc cho phép người dùng upload object đến bucket mà không cần thông tin xác thực. (Key pair, IAM Role).
  • Khi tạo presigned URLs cần gắn nó với một action cụ thể (GET, POST, PUT…).
  • Bất kì ai cũng có thể thực hiện action trong thời gian tồn tại của presigned URLs.

2. Who can create a presigned URL

  • Bất kỳ ai với thông tin xác thực hợp lệ đều có thể tạo presigned URL. Nhưng để truy cập vào object, presigned URL phải được tạo bởi người có quyền thực hiện.
  • Sau đây là credentials có thể sử dụng để tạo presigned URL:
    • IAM instance profile: 6 giờ.
    • AWS Security Token Service: 36 giờ.
    • IAM user: 7 ngày khi sử dụng AWS Signature Version 4.

3. When does Amazon S3 check the expiration date and time of a presigned URL?

  • Amazon S3 kiểm tra ngày và giờ hết hạn của signed URL tại thời điểm yêu cầu HTTP.
    • Nếu người dùng tải xuống một file lớn ngay trước thời điểm hết hạn. Quá trình tải xuống sẽ hoàn tất ngay cả khi thời gian signed URL hết hạn trong quá trình tải xuống.
    • Nếu kết nối bị ngắt và người dùng cố gắng khởi động lại quá trình tải xuống sau khi signed URL hết hạn, quá trình tải xuống sẽ không thành công.

4. Hands on

  • Requirement: Python basic, boto3, requests package.
  • Setup profile:
aws configure
AWS Access Key ID [****************NLSB]: xxx
AWS Secret Access Key [****************Pz/K]: xxx
Default region name [ap-southeast-1]:
Default output format[None]:
  • Policy IAM user upload.
{"Version":"2012-10-17","Statement":[{"Sid":"AllowFullAccessS3","Effect":"Allow","Action":"s3:*","Resource":"*"}]}

4.1. Generating a presigned URL to upload an object

  • Tạo một presigned URL để upload object lên S3 trong thời gian nhất định.
import boto3

url = boto3.client('s3').generate_presigned_url(
    ClientMethod='get_object',
    Params={'Bucket':'presignurl2022','Key':'data.csv'},
    ExpiresIn=3600)print(url)
  • ClientMethod: Lấy object từ Amazon S3.
  • Params: Chứa thông tin bucket và tên file.
  • ExpiresIn: Thời gian tồn tại của presigned URL (đơn vi: giây).
{'url':'https://presignurl2022.s3.amazonaws.com/',
    'fields':{'key':'data.csv',
        'AWSAccessKeyId':'AKIA3PXGBSUDVQBNTQ4M',
        'policy':'eyJleHBpcmF0aW9uIjogIjIwMjItMDUtMTRUMTA6MDA6MzBaIiwgImNvbmRpdGlvbnMiOiBbeyJidWNrZXQiOiAicHJlc2lnbnVybDIwMjIifSwgeyJrZXkiOiAiZGF0YS5jc3YifV19',
        'signature':'93/6UpGjgKv27JBbJgEfBVVbLDc='}}
  • Tạo file data.csv lưu dữ liệu test đặt cùng thư mục với file code python.
STT,Name,Score
1,John Doe,100,
2,Michel Rass,89
3,Jacky D,100
  • Sử dụng requests package để thực hiện upload với presigned URL.
import requests
import boto3

filekey='data.csv'
response = boto3.client('s3').generate_presigned_post(
    Bucket='presignurl2022',
    Key=filekey,
    ExpiresIn=3600)print(response)

fin=open(filekey,'rb')file={'file': fin}try:
    r = requests.post(response['url'], data=response['fields'], files=file)print(r)finally:
    fin.close()
<Response [204]>

4.2. Sharing object

import boto3

url = boto3.client('s3').generate_presigned_url(
    ClientMethod='get_object', 
    Params={'Bucket':'presignurl2022','Key':'data.csv'},
    ExpiresIn=3600)print(url)
https://presignurl2022.s3.amazonaws.com/data.csv?AWSAccessKeyId=AKIA3PXGBSUDVQBNTQ4M&Signature=%2Funz%2F6udzYXw9WMy6b32YMXN8MY%3D&Expires=1652524464

5. Reference

Using presigned URLshttps://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_urlhttps://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_post

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,