AWS Presigned URL이 일찍 상할 때

fart man·2026년 2월 3일

AWS S3의 데이터를 다운로드 할 수 있는 URL을 달라고 S3한테 요청을하면 presigned URL이라는 걸 준다.

그리고 이 presigned URL은 언제 상할지, 즉 언제 expire할지 정할 수 있는데 나는 최대 기간인 7일로 하기로 했다.

근데 한 몇시간 있다 이 링크를 다시 클릭해보니 상했다고 나온다.

왜지??

URL을 잘 뜯어보면 이런 구조로 되어있다.

https://imprity-aws-member-manager-bucket-prod-profile.s3.ap-northeast-2.amazonaws.com/profiles/6871a980-19a4-4348-80d8-5d70cfb2a30f_derpy.jpg
?X-Amz-Security-Token=IQoJb3JpZ2luX ... 2BA71Y5OZ0i8V7LA%3D%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Date=20260202T235023Z
&X-Amz-SignedHeaders=host
&X-Amz-Credential=ASIAZOB6RMD6VHZEYJO2%2F20260202%2Fap-northeast-2%2Fs3%2Faws4_request
&X-Amz-Expires=604800
&X-Amz-Signature=1a573ae6d519d42cbd4d9a2f7c55c6cca85405e2ad861a5e51de1b95c601fb91

여기서 X-Amz-Expires는 몇초 후에 상할지를 적은 곳인데
60 x 60 x 24 x 7 = 604800으로 잘 설정이 되어 있는데 이상하게 상했다고 나온다.

그래서 더 뜯어보니

Q: 미리 서명된 URL이 구성된 만료 시간보다 일찍 만료되는 이유는 무엇인가요?

미리 서명된 URL은 기본 자격 증명이 유효한 동안에만 유효합니다. 미리 서명된 URL은 구성된 만료 시간 또는 연결된 자격 증명이 만료되는 시점 중 먼저 도래하는 시점에 만료됩니다. Amazon Elastic Container Service 태스크 또는 컨테이너의 경우 역할 자격 증명은 일반적으로 1~6시간마다 교체됩니다. AWS Security Token Service(AWS STS) AssumeRole을 사용하는 경우 역할 세션이 종료되면 미리 서명된 URL이 만료되는데, 이는 기본적으로 1시간입니다. Amazon EC2 인스턴스 프로파일의 경우 메타데이터 자격 증명은 주기적으로 교체되며 최대 유효 기간은 약 6시간입니다.

라고 여기에 친절하게 적혀있다.

...

게다가 딱 정해진 시간을 사용자한테 줄 수 도 없고 1시간에서 6시간 사이라고 줄 수 밖에 없다.

... 어쩔 수 없지.

0개의 댓글