0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Lưu Ý Về Thời Gian Hết Hạn của S3 Presigned URL

Đăng vào 4 ngày trước

• 5 phút đọc

Giới Thiệu

Bạn có bao giờ phải tạo thủ công S3 Presigned URLs không? Tôi thường sử dụng Presigned URLs để chia sẻ tài liệu và tài nguyên. Gần đây, tôi gặp hiện tượng khi tạo Presigned URL thông qua AWS CLI (đăng nhập bằng AWS SSO) thì thời gian hiệu lực ngắn hơn so với cấu hình mà tôi đã đặt. Trong bài viết này, tôi muốn chia sẻ một số lưu ý quan trọng về thời gian hết hạn của Presigned URL.

S3 Presigned URL

S3 Presigned URL là một URL được sử dụng để cấp quyền truy cập tạm thời vào các đối tượng trong S3. Thông thường, một Presigned URL sẽ có một thời gian hết hạn được thiết lập, trong khoảng thời gian đó URL có thể được sử dụng để truy cập đối tượng S3.

Thời Gian Hết Hạn của S3 Presigned URL

Trên thực tế, thời gian hết hạn của một Presigned URL liên quan đến hai yếu tố:

  1. Thời gian hết hạn được chỉ định khi phát hành Presigned URL.
  2. Thời gian hết hạn của thông tin xác thực (credentials) được sử dụng để phát hành Presigned URL.

Nếu một trong hai yếu tố này hết hạn, bạn sẽ không còn khả năng truy cập vào đối tượng S3.

Về Thời Gian Hết Hạn Được Chỉ Định Trong Quá Trình Phát Hành

Khi phát hành một Presigned URL thông qua bảng điều khiển (console), bạn có thể chỉ định thời gian hết hạn tối đa là 12 giờ.
Khi phát hành một cách lập trình thông qua CLI hoặc CDK, bạn có thể chỉ định thời gian hết hạn tối đa là 7 ngày.

Cách Phát Hành Qua Bảng Điều Khiển

Bạn có thể chỉ định thời gian hết hạn tối đa là 7 ngày.

Cách Phát Hành Qua CLI

bash Copy
aws s3 presign s3://{bucket_name}/{file_name} --expires-in 604800

Chỉ định thời gian hết hạn với tùy chọn --expires-in. Thời gian tối đa là 604800 giây, tương đương 7 ngày.

Thời Gian Hết Hạn của Credentials

Một yếu tố liên quan khác là thời gian hết hạn của thông tin xác thực được sử dụng trong quá trình phát hành.
Khi thông tin xác thực được sử dụng để phát hành trở nên không hợp lệ, URL sẽ trở nên không hợp lệ bất kể thời gian hết hạn của Presigned URL đã được cấu hình có được đạt hay không.

Ví dụ:

  • Khi sử dụng CLI trong CloudShell
  • Khi đăng nhập vào CLI bằng SSO cục bộ

Trong những trường hợp này, bạn không sử dụng thông tin xác thực vĩnh viễn như IAM users, mà thay vào đó là thông tin xác thực tạm thời chỉ có hiệu lực trong vài giờ.
Trong những tình huống này, khi phiên CloudShell kết thúc hoặc phiên SSO cục bộ hết hạn, hiện tượng xảy ra là Presigned URL trở nên không hợp lệ trong vài giờ mặc dù bạn đã đặt thời gian hết hạn là 7 ngày.

Tình huống tương tự cũng xảy ra khi phát hành một cách lập trình với SDKs. Tuy nhiên, khi sử dụng SDKs nhúng trong ứng dụng, thường thì thời gian hết hạn sẽ được thiết lập ngắn và phát hành mỗi lần sử dụng, do đó vấn đề này hiếm khi xảy ra.
Trong trường hợp của tôi, tôi đã phát hành URL cục bộ trong khi đăng nhập qua SSO CLI, nhưng chúng hết hạn sớm hơn mong đợi, dẫn đến lỗi ExpiredToken.
Tham khảo: Về đăng nhập SSO CLI
https://dev.classmethod.jp/articles/aws-cli-for-iam-identity-center-sso/

Tóm Tắt

Thời gian hết hạn của Presigned URLs không chỉ liên quan đến thời gian hết hạn được thiết lập trong quá trình phát hành, mà còn liên quan đến thời gian hết hạn của thông tin xác thực được sử dụng trong quá trình phát hành.
Khi phát hành bằng thông tin xác thực tạm thời, bạn cần chú ý đến thời gian hết hạn.

  • Phát hành Presigned URLs với thời gian tối đa 12 giờ qua bảng điều khiển.
  • Phát hành qua CLI với thông tin xác thực IAM users.

Nếu bạn muốn thiết lập thời gian hiệu lực lâu hơn, chẳng hạn như vài giờ hoặc lâu hơn, hãy xem xét các phương pháp trên.

Các Thực Hành Tốt Nhất

  • Luôn luôn kiểm tra thời gian hiệu lực của thông tin xác thực: Đảm bảo rằng bạn đã đăng nhập bằng thông tin xác thực hợp lệ và không tạm thời.
  • Sử dụng IAM users cho các tác vụ lâu dài: Nếu bạn cần truy cập liên tục, hãy sử dụng IAM users thay vì thông tin xác thực tạm thời.
  • Thiết lập thời gian hết hạn ngắn hơn nếu cần thiết: Khi phát hành URL cho các tác vụ ngắn hạn, hãy cân nhắc việc thiết lập thời gian hết hạn ngắn hơn để tránh rủi ro.

Các Cạm Bẫy Thường Gặp

  • Quên kiểm tra thời gian hết hạn của thông tin xác thực: Điều này có thể dẫn đến lỗi khi cố gắng sử dụng URL đã hết hạn.
  • Đặt thời gian hết hạn quá dài mà không kiểm tra: Không nên đặt thời gian hết hạn quá dài nếu không cần thiết, vì điều này có thể làm tăng nguy cơ bảo mật.

Mẹo Tối Ưu Hiệu Suất

  • Sử dụng CloudFront: Nếu bạn cần truy cập nhiều đối tượng S3, hãy cân nhắc sử dụng CloudFront để cải thiện hiệu suất và giảm thời gian tải.
  • Phát hành URL mới khi cần: Thay vì cố gắng sử dụng một URL đã hết hạn, hãy phát hành một URL mới khi cần thiết để đảm bảo quyền truy cập liên tục.

Thảo Luận Vấn Đề

  • Tại sao tôi nhận được lỗi ExpiredToken? Có thể do thời gian hết hạn của thông tin xác thực đã hết trước khi bạn thử truy cập vào đối tượng S3.
  • Làm thế nào để biết thông tin xác thực của tôi còn hiệu lực không? Sử dụng các lệnh CLI để kiểm tra trạng thái thông tin xác thực của bạn.

Kết Luận

Thời gian hết hạn của S3 Presigned URLs là một yếu tố quan trọng mà bạn cần lưu ý khi làm việc với AWS S3. Hãy đảm bảo rằng bạn đã hiểu rõ về cả thời gian hết hạn của URL và thông tin xác thực để tránh gặp phải các vấn đề không mong muốn. Nếu bạn có thêm câu hỏi hoặc cần hỗ trợ, hãy để lại ý kiến bên dưới!

Hãy theo dõi để cập nhật thêm nhiều thông tin hữu ích khác về AWS và các công nghệ đám mây!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào