반응형
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 파일을 안전하게 공유할 수 있어! 😊
반응형