[AWS/NCLOUD] S3 Presigned-URL에 대하여
클라우드 환경에서 Presigned URL을 활용 해보자
이번 시간에는 Presigned-URL 에 대해 알아가는 시간을 가져보겠습니다.
개요
- Presigned URL이란
- Presigned URL의 필요성
- AWS S3 Presigned URL 생성
- AWS 콘솔에서 생성
- AWS CLI로 생성 - NCP Object Storage Presigned URL 생성
- AWS CLI로 생성
Presigned-URL 이란 ?
클라우드 스토리지 서비스에서 제공하는 기능으로, 사용자가 생성한 URL을 통해 지정된 시간 동안 서버의 자원(파일 등)에 접근할 수 있게 해주는 임시 링크입니다. 이 URL은 서버에 저장된 자원에 대한 요청을 사전에 승인하며, 서명된 쿼리 파라미터를 포함하여 생성됩니다. URL은 생성 시 설정한 유효 기간 동안만 유효하며, 이 기간이 지나면 자동으로 접근이 불가능해집니다.
Presigned URL의 필요성
- 보안 강화 : 자원에 대한 접근을 허가받은 사용자만이 제한된 시간 동안 접근할 수 있도록 함으로써, 미인증 접근을 방지하고 데이터 보안을 유지할 수 있습니다.
- 대역폭 관리 : 자원에 대한 접근을 관리함으로써, 불필요한 트래픽과 비용을 줄일 수 있습니다.
- 사용 편의성 : 사용자가 직접 서버에 접속하지 않고도 필요한 자원을 안전하게 다운로드하거나 업로드할 수 있게 해주므로, 사용자 경험을 향상시킬 수 있습니다.
- 컨텐츠 배포 : 특히 미디어 파일이나 대용량 데이터를 시간 제한이 있는 링크를 통해 배포할 때 유용하며, 컨텐츠 제공자가 자원의 배포를 효율적으로 관리할 수 있습니다.
예를 들어, 온라인 교육 플랫폼에서 강사가 학생들에게 특정 자료를 제공하려 할 때, 강사는 파일을 클라우드 스토리지에 업로드하고 그 파일에 대한** presigned URL** 을 생성합니다. 이** URL** 을 학생들에게 공유하면, 학생들은 설정된 시간(예: 24시간) 동안 해당 파일을 다운로드할 수 있습니다. 시간이 지나면 URL은 자동으로 만료되어 더 이상 접근할 수 없게 되므로, 외부인의 무단 다운로드를 방지할 수 있습니다.
AWS S3 Presigned URL 생성
- AWS 에서 Presigned Url 을 발급 받는 방법은 콘솔을 이용하는 방법과 CLI 를 통해 발급 받는 방법이 있습니다.
- 먼저 테스트용 S3 버킷을 생성 한 후 버킷 내부에 이미지 파일을 업로드 하였습니다.
- Presigned URL을 발급 받기 전에 먼저 이미지 파일 주소로 접속을 해서 접속 가능 여부를 확인 합니다.
- 권한이 없어 이미지 파일을 불러오지 못하는 것을 확인 할 수 있습니다.
AWS 콘솔에서 생성
객체(이미지) 파일 선택 - > 작업 -> 미리 서명된 URL와 공유 -> 1분으로 설정 -> URL 생성
- 복사된 URL로 접속 해 보면 아까 권한이 없던 이미지를 1분간 확인 할 수 있습니다. (제가 존경하는 롤모델입니다.. 🦾)
AWS CLI로 Presigned URL 발급 받기
사전에 IAM에 AmazonS3FullAccess 권한 추가 및 Access KEY & Secret KEY 확인 필요 !
터미널에서 접속 후 AWS 자격증명 및 계정 확인
1 2 3 4 5 6 7 8 9 10 11 12 13
MacBook-Pro-2 ~ % aws configure AWS Access Key ID [****************188D]: Access key ID 입력 AWS Secret Access Key [****************4F75]: Secret key 입력 Default region name [ap-northeast-2]: enter Default output format [json]: enter MacBook-Pro-2 ~ % aws sts get-caller-identity { "UserId": "생략", "Account": "생략", "Arn": "생략:user/USER 명" }
Presigned URL 발급하기
1 2 3 4 5 6 7 8 9
aws s3 presign s3://파일경로 --region ap-northeast-2 --expires-in 만료기간(초) MacBook-Pro-2 ~ % aws s3 presign s3://bm-presigned-url-test/Arnold.png --region ap-northeast-2 --expires-in 15 # 아래에 Presigned URL 발급 된 것 확인하기 https://bm-presigned-url-test.s3.ap-northeast-2.amazonaws.com/Arnold.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA4NT2RDC3GDVH5QZD%2F20240513%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20240513T101239Z&X-Amz-Expires=15&X-Amz-SignedHeaders=host&X-Amz-Signature=b237708503c088eea4a3406bb1dfcf2bd5a842e0db6aa4fe2b0c1fcd8cc7ff17
URL로 접속 해보기
NCP Object Storage Presigned(Signed) URL 생성
AWS CLI로 생성
NCP Object Storage는 콘솔(GUI)에서 Presigned URL 생성을 지원 하지 않습니다.
- 테스트용 버킷에 이미지를 하나 추가 하였습니다.
Access KEY & Secret KEY 확인
NCP 포털 > 마이페이지 > 계정관리 > 인증키 관리
터미널에서 접속 후 NCP (AWS) 자격증명
1 2 3 4 5 6
MacBook-Pro-2 ~ % aws configure AWS Access Key ID [****************188D]: Access key ID 입력 AWS Secret Access Key [****************4F75]: Secret key 입력 Default region name [ap-northeast-2]: enter Default output format [json]: enter
이미지 파일 URL 확인하기
Presigned URL 발급하기
1 2 3 4 5 6 7 8 9 10
aws --endpoint-url=https://kr.object.ncloudstorage.com s3 presign s3://버킷명/파일명 --expires-in 만료기간(초) # Object Storage도 AWS CLI를 지원 하지만, S3와 EndPoint가 다르기 때문에 --endpoint-url로 경로를 잡아줘야 됩니다. MacBook-Pro-2 ~ % aws --endpoint-url=https://kr.object.ncloudstorage.com s3 presign s3://bm-object-storage/jenkins.png --expires-in 60 # 아래에 Presigned URL 발급 된 것 확인하기 https://bm-object-storage.kr.object.ncloudstorage.com/jenkins.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=603F20D2573C48A383E5%2F20240514%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20240514T020127Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&X-Amz-Signature=7b779747671c3d36305b2f4823116a8292c320a74b484973cc4eef0c3b2c1d8e
URL로 접속 해보기
오늘은 Presigned URL에 대해 알아보았습니다.
해당 기술을 서버 내에서 생성 하는 로직을 구현 할 수도 있고, 더 많은 방법이 있기 때문에 (SDK 등)잘 활용하면 좋을 것 같습니다.












