สร้าง S3 presigned URL ด้วย AWS CLI และ Management Console

https://dev.classmethod.jp/articles/generating-presigned-urls-using-cli-and-console/

ภาพรวม

เราสามารถแชร์ object โดยใช้ presigned URLs โดยอนุญาตให้ผู้ใช้อัปโหลด object ไปยัง bucket โดยไม่ต้องใช้ข้อมูลความปลอดภัยของ AWS (AWS security credentials) ได้ ซึ่งตามค่าเริ่มต้น object และ bucket ทั้งหมดจะถูกจัดเก็บแบบเป็นส่วนตัว แต่ด้วย presigned URLs จะสามารถสร้าง URL ที่สามารถเข้าถึง object ภายใน S3 bucket ได้ โดย presigned URLs จะกำหนดการดำเนินการเฉพาะที่เกี่ยวข้องและจะมีวันหมดอายุ

วิธีสร้าง presigned URL

  • สร้างผ่านหน้า Management Console ของ S3
  • การใช้ AWS Explorer ใน Visual Studio。
  • สร้างผ่าน AWS SDK
  • สร้างผ่าน AWS CLI

ซึ่งบทความนี้จะเป็นการใช้งานด้วย AWS CLI และ Management Console ในการสร้าง S3 presigned URL โดยจะสร้าง S3 presigned URL สำหรับการเข้าถึงไฟล์ใน bucket ของ S3

ขั้นตอนการทำ

สร้าง S3 bucket

จากนั้นใช้คำสั่งดังต่อไปนี้เพื่อสร้าง bucket

//Create S3 bucket
aws s3api create-bucket \
    --bucket pre-data-bucket \ 
    --region us-east-1

//Output
{
    "Location": "/pre-data-bucket"
}
  • อัปโหลดไฟล์ไปยัง S3 bucket

  • พอเข้าถึงไฟล์ด้วย URL ของ object จะแสดง error แจ้งปฏิเสธการเข้าถึง

สร้าง presigned URLs ด้วย AWS CLI

ใช้คำสั่งต่อไปนี้สร้าง presigned URLs โดยระบุ S3 URI ในคำสั่งที่ presigned URLs ด้วย

//Command to generate presigned URL
aws s3 presign s3://pre-data-bucket/CLI/index.html  

//Output : presigned URL                  
https://pre-data-bucket.s3.amazonaws.com/CLI/index.html?X-Amz-Algorithm...........

จากนั้นลองใช้ presigned URLs ที่สร้างขึ้นมาจะสามารถเข้าไฟล์ได้แล้ว

  • หากสร้าง presigned URLs โดยไม่ระบุวันหมดอายุ URL ที่กำหนดไว้จะใช้งานได้เป็นเวลา 1 ชั่วโมงตามค่าเริ่มต้น
  • สามารถกำหนดอายุการใช้งานของ presigned URL ได้โดยใช้คำสั่งทางด้านล่าง
  • ในคำสั่ง AWS CLI ทางด้านล่าง เวลาหมดอายุของ presigned URL คือ 7 วันนับจากเวลาที่ถูกสร้างขึ้น
//create presigned URL, which is valid for 7 days
//aws s3 presign S3-URI --expires-in 604800
aws s3 presign s3://pre-data-bucket/CLI/index.html --expires-in 604800

สร้าง presigned URLs ผ่าน Management Console

  • ใน Management Console ของ S3 เลือก object ที่ต้องการสร้าง presigned URLs
  • ที่เมนู "Action" เลือก "Share with a presigned URL"

  • ระบุระยะเวลาของ presigned URLs และเลือก [Create presigned URL]

  • เมื่อสร้างเสร็จแล้ว URL จะถูกคัดลอกไปยังคลิปบอร์ดของโดยอัตโนมัติ และก็จะสามารถเข้าถึงไฟล์โดยใช้ presigned URL ที่สร้างขึ้นได้
  • ใน Management Console ของ S3 เวลาหมดอายุของ presigned URL คือ 12 ชั่วโมงนับจากเวลาที่ถูกสร้างขึ้น

ความแตกต่างในสร้าง presigned URL ผ่าน AWS CLI และ Management Console

เวลาหมดอายุ

AWS CLI

  • ค่าเริ่มต้นเวลาหมดอายุของ presigned URLs ที่สร้างผ่าน AWS CLI คือ 1 ชั่วโมง
  • ใน AWS CLI เวลาหมดอายุสูงสุดสำหรับ presigned URL คือ 7 วันนับจากเวลาที่ถูกสร้างขึ้น

Management Console

  • สามารถระบุวันหมดอายุของ presigned URL ได้ตั้งแต่ 1 นาทีไปจนถึง 720 นาที (12 ชั่วโมง)
  • ใน Management Console ของ S3 เวลาหมดอายุสำหรับ presigned URL คือ 12 ชั่วโมงนับจากเวลาที่ถูกสร้างขึ้น

presigned URL parameters

AWS CLI

  • parameters ของ presigned URL จะเป็นตามด้านล่าง
https://pre-data-bucket.s3.ap-southeast-1.amazonaws.com/CLI/index.html?
X-Amz-Algorithm=AWS4-HMAC-SHA256 &
X-Amz-Credential=<your-access-key-id>%2F20230914%2Fap-southeast-1%2Fs3%2Fs3%2Faws4_request &
X-Amz-Date=20230913T083629Z &
X-Amz-Expires=3600 &
X-Amz-SignedHeaders=host &
X-Amz-Signature=<signature-value>

Management Console

  • parameters ของ presigned URL จะเป็นตามด้านล่าง
https://pre-data-bucket.s3.ap-southeast-1.amazonaws.com/Console/index.html?
response-content-disposition=inline &
X-Amz-Security-Token=<security-token> &
X-Amz-Algorithm=AWS4-HMAC-SHA256 &
X-Amz-Date=20230913T075921Z &
X-Amz-SignedHeaders=host &
X-Amz-Expires=3600 &
X-Amz-Credential=<your-access-key-id>%2F20220425%2Fap-southeast-1%2Fs3%2Faws4_request&
X-Amz-Signature=<signature-value>

สรุป

ในบทความนี้ได้มีการสร้าง S3 presigned URL โดยใช้ AWS CLI และ Management Console เพื่อเข้าถึงไฟล์ แต่นอกจากนี้ยังสามารถสร้าง presigned URL สำหรับการอัปโหลด หรือ การลบ object ได้อีกด้วย

บทความอ้างอิง

บทความต้นฉบับ