AWS/S3

[ S3 ] Pre-signed URL(미리 서명된 URL)을 사용하여 S3 객체 접근

BigCo 2023. 8. 23. 09:44

안녕하세용 :)

오늘은 버킷에 이미지를 업로드하는 실습을 진행하려고 했습니다.
간편하게 퍼블릭 액세스 차단을 해제한 후 퍼블릭 버킷으로 이미지를 업로드는 방법을 사용하기에는 보안이 너무 취약하다는 단점과 퍼블릭 버킷은 사용할 일이 많지 않아서 고민을 했습니다.
그래서 발견한 방법이 모든 퍼블릭 액세스를 차단해도 pre-signed url(미리 서명된 URL)을 사용하여 임시적으로 객체에 접근할 수 있는 방법을 찾게 되었습니다.

 

 

Pre-signed url이란?

모든 객체는 기본적으로 비공개이며, 객체 소유자만 이러한 객체에 액세스 할 수 있습니다. 그러나 객체 소유자는 필요할 경우 자신의 보안 자격 증명을 사용하여 일정 기간 동안 객체 다운로드를 허가하는 미리 서명된 URL을 만들어 다른 사용자와 객체를 공유할 수 있습니다.

객체에 대해 미리 서명된 URL(pre-signed url)을 만들 때 보안 자격 증명을 제공하고 버킷 이름, 객체 키, HTTP 메서드(GET으로 객체 다운로드) 및 만료 날짜와 시간을 지정해야 합니다. 사전 서명된 URL은 지정된 기간 동안만 유효합니다.

미리 서명된 URL을 받은 사용자는 누구나 객체에 액세스 할 수 있습니다.

 

 

S3 버킷 생성

> 버킷 만들기

 

>버킷이름 > 사용할 리전 선택 > ACL비활성화 선택

▶ 버킷 이름 : 버킷 이름은 전 세계에서 유일한 이름으로 생성해야 된다.

▶ AWS 리전 : 버킷을 생성할 리전을 선택해 줍니다.

▶ 객체 소유권 : 객체 소유권은 버킷에 업로드 된 객체의 소유권을 제어하는 설정입니다.
    ACL 비활성화 : 버킷에 업로드되는 모든 객체는 버킷을 만든 계정이 소유한다는 설정입니다.
                             (객체에 대한 액세스를 독점적으로 관리)

 

 

▶ 새 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
→ 모든 퍼블릭 차단

▶ 임의의 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
→ 버킷의 모든 퍼블릭 ACL과 그 안에 포함된 모든 Object를 무시하고, 퍼블릭 ACL를 포함하는 PUT 요청은 허용한다.
→ 차단은 아니고 무시, 예를 들어 퍼블릭으로 객체 업로드 가능, 다만 URL을 통한 접근 불가   

▶ 새 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
→ 퍼블릭 설정을 바꾸지 못하게 하는 설정, 버킷 소유자 이외에 다른 사람이 설정을 못 바꾸게 하려는 목적

▶ 임의의 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
→ 퍼블릭 정책이 있는 버킷에 대한 액세스가 권한이 있는 사용자와 AWS 서비스로만 제한되며, 이 설정 활성화는 기존 버킷 정책에 영향을 주지 않는다.
→  권한이 부여된 사용자에게만 버킷, 객체에 퍼블릭 설정을 할 수 있도록 해주는 설정

 

> 버킷 버전 관리 비활성화 > 버킷 생성

▶ 버킷 버전관리 : 사용자가 실수로 파일을 삭제해도 복원할 수 있다. 다만 파일을 버전별로 관리하기 때문에 추가비용이 발생합니다. 

 

생성된 버킷에 폴더를 생성하고 이미지를 업로드합니다.

 

폴더이름 > 폴더 만들기

 

생성 된 폴더로 이동 > 업로드 선택

 

파일추가 > 파일 업로드 > 체크 > 업로드 선택

 

업로드된 이미지 선택 > 해당 URL 복사

 

모든 퍼블릭 액세스 차단을 해서 해당 URL로 접근이 차단됐습니다.

 

 

 

IAM Role 생성

IAM > 역할(role) > 역할 만들기

 

AWS서비스 > EC2 > 다음

 

s3fullaccess 검색 > AmazonS3FullAccess 선택 > 다음

> 권한생성

 

EC2에 Role 업데이트

 

 

Pre-signed URL(미리 서명된 URL) 설정

Role을 부여한 EC2에 접속하여 AWS CLI를 사용하여 내가 만든 버킷을 확인한다

 

 

pre-signed url을 생성해 줍니다.

해당 S3 URL은 버킷 > 파일 > 이미지를 선택해서 속성으로 들어가면 있습니다.

 

aws s3 presign s3://[S3 URL] --expires-in 3600

위 명령어는 이미지 파일에 대한 사전 서명된 URL을 생성합니다. --expires-in 옵션은 URL이 유효한 기간을 지정합니다. 위의 명령어는 URL이 생성된 후 1시간(3600초) 동안 유효하도록 합니다.

 

생성된 URL을 웹페이지에 입력하면 버킷에 모든 퍼블릭 접근이 차단됐지만 해당 이미지에 접근하게 됩니다.
모든 퍼블릭 엑세스를 차단했음에도 임시적으로 1시간 동안 접근이 가능하도록 설정을 했습니다.

 

 

이렇게 오늘은 퍼블릭 접근이 제한된 S3 버킷에 pre-signed URL을 생성하여 이미지에 접근하는 실습을 진행했습니다.

감사합니다. :) 

 

참고자료

 

'AWS > S3' 카테고리의 다른 글

[ S3 ] S3 수명 주기 규칙 설정 (Lifecycle)  (0) 2023.08.31
[ S3 ] S3 Tier, 스토리지 클래스 설정  (0) 2023.08.28
[ S3 ] S3 란 무엇인가? S3 개념  (3) 2023.08.22