AWS S3의 Signed URL은 AWS S3 버킷에 저장된 객체에 대해 제한된 시간 동안 인증된 접근 권한을 부여하는 URL입니다. 보통 S3 버킷의 객체는 기본적으로 비공개(private)로 설정되어 있기 때문에 특정 사용자가 애플리캐이션에게만 접근 권한을 주기 위해 Signed URL을 사용합니다.
주요 특징
임시 접근 권한
- Signed URL은 생성 시 지정한 만료 시간(expiration time) 이후에는 사용할 수 없으므로 일시적인 접근 권한을 부여할 때 유용합니다.
보안성
- URL에 포함된 서명(signature)은 요청이 변경되지 않았음을 보장하며, AWS 자격 증명을 사용해 생성되기 때문에 외부에서 위변조하기 어렵습니다.
다양한 활용 사례
- 파일 다운로드: 사용자에게 파일 다운로드 권한을 임시로 부여할 때 사용됩니다.
- 파일 업로드: 클라이언트가 S3 버킷에 직접 파일을 업로드할 수 있도록 할 때 사용됩니다.
- 권한 관리: 서버에서 직접 접근 제어를 하지 않고도 특정 파일에 대한 접근 권한을 제어할 수 있습니다.
작동 방식
생성
- AWS SDK나 AWS CLI를 이용하여 Signed URL을 생성할 수 있습니다. 이때 AWS Access Key와 Secret Key를 사용해 URL에 대한 서명을 생성합니다.
만료 시간 설정
- URL을 생성할 때 사용자가 원하는 유효 기간을 설정합니다. 만료 시간이 지나면 해당 URL은 더 이상 유효하지 않습니다.
URL 구성
생성된 URL에는 다음과 같은 쿼리 파라미터가 포함됩니다.
- X-Amz-Algorithm : 서명 생성에 사용된 알고리즘
- X-Amz-Credential : AWS 자격 증명 정보
- X-Amz-Date : 요청 날짜와 시간
- X-Amz-Expires : URL의 만료 시간(초 단위)
- X-Amz-SignedHeader : 서명에 포함된 헤더
사용
생성된 Signed URL을 사용해 클라이언트는 인증된 요청을 보낼 수 있으며, AWS는 이 URL에 포함된 서명과 파라미터들을 검증하여 요청을 승인합니다.
활용 예시
웹 애플리케이션에서의 파일 공유
- 사용자에게 S3에 저장된 파일을 공유할 때, 직접 버킷에 대한 권한을 부여하지 않고도 Signed URL을 통해 파일에 접근할 수 있도록 할 수 있습니다.
모바일 애플리케이션에서의 업로드
- 모바일 앱이 사용자로부터 파일을 받아 S3에 저장할 때, 서버는 업로드에 대한 Signed URL을 생성하여 클라이언트에 전달합니다. 클라이언트는 해당 URL로 직접 파일을 업로드합니다.
Signed URL와 302 Redirect
서버 사이드 리다이렉션
웹 서버나 애플리케이션 서버가 클라이언트의 요청을 받은 후, 내부적으로 S3의 Signed URL을 생성하고 이를 클라이언트에게 직접 전달하지 않고 302 리다이렉트를 통해 클라이언트를 해당 URL로 보내는 방식입니다. 이렇게 하면 서버는 클라이언트에게 S3 버킷의 실제 접근 경로(또는 Signed URL)를 노출하지 않고 임시 접근 권한을 제공할 수 있다.
보안과 유연성
302 리다이렉트를 사용하면 사용자가 먼저 서버를 통해 접근하고 서버에서 적절한 인증/권한 체크 후에 S3 Signed URL로 리다이렉션을 할 수 있어 보안성을 높이는 데 도움을 줍니다.
사용 예시
예를 들어, 사용자가 어떤 파일을 다운로드 요청을 하면 서버가 해당 파일에 대한 S3 Signed URL을 생성하고, 클라이언트에게 302 리다이렉트를 반환하여 자동으로 S3에서 파일을 다운로드하도록 할 수 있습니다. 이렇게 하면 서버는 직접 파일을 전송에 관여하지 않으면서도, 클라이언트에게 안전한 임시 접근 권한을 제공할 수 있습니다.
결론적으로, 302 리다이렉트는 S3 Signed URL과 결합되어 사용자의 요청을 중개하거나, 보안상의 이유로 S3의 직접적인 URL 노출을 피하고자 할 때 활용될 수 있습니다.
'AWS' 카테고리의 다른 글
AWS Lamda란? (0) | 2025.02.06 |
---|---|
EC2 nano .env를 통한 환경변수 설정 (1) | 2024.11.05 |
AWS 미숙한 조작으로 인한 과금이 생길땐 (1) | 2024.11.03 |