- vừa được xem lúc

[AWS] Using presigned URLs

0 0 19

Người đăng: Dương Linh

Theo Viblo Asia

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 URLs https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_url https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_post

Bình luận

Bài viết tương tự

- vừa được xem lúc

So sánh Windows Azure Blob Storage và Amazon Simple Storage Service (S3)

Trong bài đăng viết này, chúng ta sẽ cùng nhau so sánh giữa Windows Azure Blob Storage và Amazon Simple Storage Service (S3) dựa trên quan điểm chức năng cốt lõi của chúng. Trong bài chia sẻ này, chúng ta sẽ tập trung vào các khái niệm cốt lõi, giá cả và so sánh tính năng giữa các blob containers và

0 0 118

- vừa được xem lúc

Securing AWS S3 uploads using presigned URLs

Theo mặc định, tất cả các object là private - có nghĩa là chỉ owner của bucket mới có quyền truy cập vào đối tượng. Nếu bạn muốn người dùng có quyền truy cập vào bucket hoặc các đối tượng cụ thể mà không cần phải public chúng, chúng ta có thể cung cấp cho người dùng các quyền hạn thích hợp bằng cách

0 0 17

- vừa được xem lúc

Thiết kế kiến trúc có tính khả dụng cao với S3 và CloudFront

AWS Cloudfront. . CloudFront là một CDN (Mạng phân phối nội dung). Nó lấy dữ liệu từ bucket Amazon S3 và phân phối nó đến nhiều trung tâm dữ liệu.

0 0 39

- vừa được xem lúc

Tạo Amazon S3 bucket sử dụng AWS CDK

Hướng dẫn này sẽ giải thích những gì cần thiết để tạo một Amazon S3 bucket sử dụng AWS CDK Python. Đầu tiên, bạn cần [cài đặt AWS CDK] và IAM profile cho để có thể triển khai hệ thống bằng AWS CLI.

0 0 20

- vừa được xem lúc

Ứng dụng rút gọn URL với AWS CDK

Thiết kế. Yêu cầu. . API tạo URL rút gọn: input là URL cần rút gọn, output là URL được rút gọn.

0 0 17

- vừa được xem lúc

Xử lý thumbnail trong các ứng dụng hiện đại

Vẫn là chàng kỹ sư đi làm thợ xây ngày nào, hôm nay trở lại với câu chuyện xây dựng một hệ thống xử lý thumbnail cho ứng dụng của mình. Bonus theo đó là bản vẽ thiết kế của hệ thống lưu trữ và xử lý h

0 0 24