카테고리 없음

📌 프리사이닝 URL (Pre-Signed URL) in AWS

idea9329 2025. 3. 12. 14:25
반응형

 

Pre-Signed URL AWS S3에 저장된 특정 객체(파일)에 대해 일정 시간 동안만 접근할 수 있는 임시 URL이야.
이 URL을 사용하면 S3 버킷이 비공개(private) 상태여도, 특정 시간 동안만 파일을 다운로드하거나 업로드할 수 있어.


✅ Pre-Signed URL을 사용하는 이유

🔒 비공개 S3 버킷의 객체를 안전하게 공유
 URL이 만료되면 자동으로 접근 차단 (예: 10분, 1시간 등)
💡 다운로드 또는 업로드 권한을 특정 시간 동안만 부여
🛠️ IAM 정책을 따르지 않고, 일시적으로 파일 접근 권한 부여 가능


✅ Pre-Signed URL 생성 방법

1️⃣ AWS CLI를 사용하여 Pre-Signed URL 생성

aws s3 presign s3://your-bucket-name/yourfile.txt --expires-in 600

📌 이 의미는?

  • presign → 지정된 S3 객체에 대해 서명된 URL을 생성
  • --expires-in 600 → 10분(600초) 동안만 URL 유효

출력 예시:

https://your-bucket-name.s3.amazonaws.com/yourfile.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...

🔥 10분 후에는 이 URL이 자동으로 만료됨!


2️⃣ Python (Boto3)로 Pre-Signed URL 생성

import boto3

# AWS S3 클라이언트 생성
s3_client = boto3.client('s3')

# Pre-Signed URL 생성 (유효 기간: 1시간)
url = s3_client.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'your-bucket-name', 'Key': 'yourfile.txt'},
    ExpiresIn=3600  # 1시간 (3600초) 동안 유효
)

print("Pre-Signed URL:", url)

📌 이 URL을 사용하면 비공개 S3 파일을 1시간 동안 다운로드할 수 있어!


✅ 업로드 가능한 Pre-Signed URL 생성 (PUT 요청)

Pre-Signed URL은 파일 업로드(PUT) 용도로도 사용 가능해.

upload_url = s3_client.generate_presigned_url(
    'put_object',
    Params={'Bucket': 'your-bucket-name', 'Key': 'uploadfile.txt'},
    ExpiresIn=1800  # 30분 동안 유효
)

print("Upload Pre-Signed URL:", upload_url)

📌 이 URL을 사용하면 인증 없이도 S3에 파일 업로드 가능

curl -X PUT -T "localfile.txt" "https://your-bucket-name.s3.amazonaws.com/uploadfile.txt?...(서명 포함)"

✅ Pre-Signed URL 주요 특징 & 주의할 점

 보안 강화: URL이 만료되면 자동 차단
 IAM 권한이 필요: S3 버킷에 접근할 권한이 있는 사용자만 URL 생성 가능
 URL이 노출되면 위험: 유효 시간이 짧을수록 안전

🚀 Pre-Signed URL을 사용하면 비공개 S3 파일을 안전하게 공유할 수 있어! 😊

반응형