Notice
Recent Posts
Recent Comments
Link
투케이2K
71. (Aws/Amazon) [Aws S3 Storage] PreSignedUrl 프리 사인 URL 주소 정리 - S3 버킷 저장소 Get 확인 및 Put 업로드 임시 권한 주소 본문
Aws (Amazon)
71. (Aws/Amazon) [Aws S3 Storage] PreSignedUrl 프리 사인 URL 주소 정리 - S3 버킷 저장소 Get 확인 및 Put 업로드 임시 권한 주소
투케이2K 2025. 6. 18. 19:09728x90
[개발 환경 설정]
개발 환경 : Aws / Amazon Web Services

[설명 정리]
// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------
- 인프라 : Aws / Amazon Web Services
- 기술 구분 : Aws / S3 / PreSignedUrl / Get / Put
- 사전 API 요청용 AWS Signature Version 4 개념 정리 :
>> AWS SigV4 는 AWS API 요청에 인증 정보를 추가하기 위한 AWS 서명 프로토콜입니다
>> AWS SigV4 는 HTTP Authorization 헤더에서 또는 URL의 쿼리 문자열로 표현될 수 있습니다
- ex : Aws Kvs HLS 비디오 스트리밍 업로드 및 재생 시 GetDataEndpoint 를 사용하지만, Authorization 헤더 값에는 SigV4 인증 정보 추가 필요
- ex : Aws S3 파일 확인 및 업로드 수행 시 백엔드에서 PreSignedUrl 을 생성하면 클라이언트는 특별한 Authorization 헤더 추가 없이 다이렉트 URL 사용 가능 (URL 에 임시 권한 정보가 포함 됨)
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------
1. AWS PreSignedUrl 은 Amazon S3에 저장된 객체에 대해 일시적인 접근 권한을 부여하는 URL입니다
>> PreSignedUrl 을 통해 인증 없이도 제한된 시간 동안 S3 객체에 접근하거나 업로드할 수 있습니다
2. AWS PreSignedUrl 은 Get 정보 요청 용도와, Put 업로드 용도로 구분할 수 있습니다
3. AWS PreSignedUrl 특징 :
>> 서명된 URL로, AWS의 인증 정보를 포함하고 있음
>> 특정 시간 동안만 유효함 (expiresIn 설정)
>> 일반적으로 파일 다운로드(GET) 또는 업로드(PUT) 용도로 사용됨
>> IAM 권한을 기반으로 생성되며, 생성한 사용자 권한에 따라 접근 가능 여부가 결정됨
4. AWS PreSignedUrl 사용 목적 및 장점 :
>> (사용 목적) 다운로드 사용자에게 S3 파일을 직접 제공 (예: 이미지, 문서 등)
>> (사용 목적) 업로드 사용자로부터 파일을 S3에 직접 업로드 받기 (예: 프로필 사진 업로드)
>> (사용 목적) 보안 유지 S3 버킷을 public으로 만들지 않고도 안전하게 파일 공유 가능
>> (장점) 보안성: S3 버킷을 공개하지 않아도 안전하게 파일 공유 가능
>> (장점) 유연성: 원하는 객체에만 접근 허용 가능
>> (장점) 시간 제한: URL이 자동으로 만료되어 보안 유지
5. AWS PreSignedUrl 생성 및 사용 작동 방식 :
>> 서버 또는 백엔드에서 Pre-signed URL 생성
>> 클라이언트(브라우저, 앱 등)에 URL 전달
>> 클라이언트는 해당 URL을 통해 S3에 직접 접근
>> URL은 만료 시간이 지나면 자동으로 무효화됨
>> 참고 : 클라이언트에서도 AWS SDK 를 사용해 직접 Pre-Signed URL 생성 가능 (IMA - AccessKey, IAM - SecretKey, Region 정보 사전 확인 필요)
6. AWS PreSignedUrl 예시 형식 :
>> GET : https://service.s3.ap-northeast-2.amazonaws.com/control/private.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AK..7Q%2F20250618%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250618T000124Z&X-Amz-Expires=3600&X-Amz-Signature=bd..86&X-Amz-SignedHeaders=host
>> PUT : https://service.s3.ap-northeast-2.amazonaws.com/control/photo.jpg?Content-Type=image%2Fjpeg&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AK..7Q%2F20250618%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250618T001010Z&X-Amz-Expires=3600&X-Amz-Signature=9e..70&X-Amz-SignedHeaders=host
7. AWS PreSignedUrl QueryParams 정리 :
>> X-Amz-Algorithm : 서명 버전과 알고리즘을 식별하고 서명을 계산하는데 사용되는 값
>> X-Amz-Credential : AccessKey, 요청 날짜, Region, 서비스 명칭
>> X-Amz-Date : ISO 8601 형식의 날짜로 URL 생성 시간
>> X-Amz-Expires : URL 유효 시간 (단위는 초)
>> X-Amz-Signature : 요청을 인증하기 위한 서명 값
>> X-Amz-SignedHeaders : 서명을 계산하기 위해 요구 되는 헤더 목록 (기본 host 헤더 요구)
8. AWS PreSignedUrl 생성 예시 코드 (JavaScript) :
<!-- [CDN 주소 설정] -->
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1416.0.min.js"></script>
<!-- [자바스크립트 코드 지정] -->
<script>
// [html 최초 로드 및 이벤트 상시 대기 실시]
window.onload = async function() {
// -----------------------------------------
// [변수 생성]
// -----------------------------------------
var region = 'ap-northeast-2'; // [AWS 리전]
var accessKeyId = 'AK..7Q'; // [IAM 액세스 키]
var secretAccessKey = 'Zz..xj'; // [IAM 시크릿 키]
// -----------------------------------------
// [AWS.config 지정]
// -----------------------------------------
AWS.config.update({
region: region,
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey,
signatureVersion: "v4", // [API 요청용 AWS Signature Version 4]
});
// -----------------------------------------
// [AWS.S3 객체 생성]
// -----------------------------------------
const s3 = new AWS.S3();
// -----------------------------------------
// [GET 확인 용도 : Pre-Signed URL 생성 요청]
// -----------------------------------------
const getExpiresInSeconds = 3600; // 만료 시간 (3600 초 : 1시간)
const getParams = {
Bucket: 'service', // 버킷 이름
Key: 'control/private.txt', // [폴더 및 파일 경로]
Expires: getExpiresInSeconds // URL 유효 시간 (초)
};
const getUrl = await s3.getSignedUrl('getObject', getParams); // ------> getObject
// -----------------------------------------
// [PUT 업로드 용도 : Pre-Signed URL 생성 요청]
// -----------------------------------------
const putExpiresInSeconds = 3600; // 만료 시간 (3600 초 : 1시간)
const putParams = {
Bucket: 'service\', // 버킷 이름
Key: 'control/photo.jpg', // [폴더 및 파일 경로]
Expires: putExpiresInSeconds, // URL 유효 시간 (초)
ContentType: "image/jpeg", // 업로드할 파일 타입
};
const putUrl = await s3.getSignedUrl('putObject', putParams); // ------> putObject
};
</script>
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Aws 사이트 : 미리 서명된 URL을 통해 객체 공유]
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/PresignedUrlUploadObject.html
[Aws SigV4 인증 및 서명 프로토콜 설명 - AWS4Signer API 호출 시 서명 사용]
https://blog.naver.com/kkh0977/223874467995?trackingCode=blog_bloghome_searchlist
[Aws Kvs HLS 라이브 스트리밍 시청 및 녹화 영상 업로드 방법 정리]
https://blog.naver.com/kkh0977/223866833493?trackingCode=blog_bloghome_searchlist
[[android] Aws Kvs HLS PutMedia 스트리밍 동영상 업로드 로직 정리 - DataEndpoint, MKV , AWS4Signer]
https://blog.naver.com/kkh0977/223875616765?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'Aws (Amazon)' 카테고리의 다른 글
Comments