Amazon S3 권한 설정

2023. 4. 6. 10:39AWS (Amazon Web Services)

※ 해당 블로그는 AWS에서 제공하는 설명서와 AWS Builders Online Series 강의를 듣고 개인적으로 공부한 내용을 정리한 블로그입니다.

 

Amazon S3는 AWS에서 제공하는 클라우드 기반 스토리지 서비스로 버킷 내의 객체 단위로 데이터를 저장한다. S3 버킷의 기본 정책은 Private으로 설정 되어 있어 외부로부터의 접근을 차단한다.

 

만일 외부로부터의 접근을 허용해주고 싶다면 어떻게 해야 할까?

특정 계정에 모든 권한을 부여해주거나 버킷 정책을 Public으로 설정 하면 되지만 너무 많은 권한을 부여하는 것은 권장하지 않는다. 누구나 해당 데이터에 접근 할 수 있다면 주요 데이터로써의 의미를 잃어버리기 때문이다.

그렇기 떄문에 다음과 같은 접근 제어 설정을 통해 특정 대상으로부터만 접근을 허용 시켜주는 것이 좋다.

 

1. ACL(Access Control List)

 

S3 버킷과 객체에 대한 액세스를 제어하며, 이를 통해 S3 리소스에 대한 보안을 강화 할 수 있음

 

1.1 버킷 생성시 ACL 활성화

ACL을 활성화 시켜야 버킷 생성 이후 ACL를 사용하여 액세스 제어를 할 수 있음

 

ACL 비활성화 할 경우 

 

 

ACL 편집 버튼이 비활성화 되어 있는 것을 확인 할 수 있음

즉 ACL을 통해 액세스 제어를 할 수 없음

 

 

ACL 활성화 할 경우

 

 

ACL 편집 버튼이 활성화 되어 있으며 액세스 제어를 할 수 있음

 

 

액세스 제어를 위해 ACL 편집을 클릭하기 전 사전에 퍼블릭 액세스 차단 설정을 해야함

 

 

1.2 퍼블릭 액세스 차단 편집(버킷 설정)

 

 

총 4개의 설정이 존재하며 모든 퍼블릭 액세스 차단을 할 경우 어떠한 경우에도 외부로부터의 접근을 차단함

 

 

나머지 4개의 설정을 하나씩 살펴 보며 ACL에 어떤 영향을 미치는지 확인

 

첫번째 설정

 

 

이 설정을 체크하면 새 퍼블릭 액세스 ACL 생성을 차단하게 됨

ACL 편집 버튼은 활성화 되어 있지만 객체 소유자에 대한 편집만 가능하며 다른 계정에 대한 권한 부여는 불가능

 

 

 

하지만 기존 권한은 변경시키지 않음

예를 들어 A 객체 모든 사람(퍼블릭 액세스)에 읽기 권한이 기존에 부여되어 있었다면 나중에 이 설정을 체크 했다고 해도 변경되지 않음 

 

 

기존 권한을 제거 하는 것조차 안되는 것을 확인 할 수 있음

 

 

이 설정을 체크하고 나면 ACL 객체 소유자 권한을 제외하고는 변경이 안되며 업로드 시 권한 설정 부분에서 객체 소유자를 제외한 나머지 피부여자에 대한 권한을 변경 했다면 문제가 발생함 (ACL 변경을 막기 때문)

 

 

두번째 설정

 

 

이 설정을 체크하면 모든 ACL을 무시

ACL 편집 버튼과 권한(읽기, 쓰기) 부여 버튼이 활성화 되어 있으나 적용이 안됨

 

 

변경을 했으나 적용되지 않고 ACL을 무시하는 것을 확인 할 수 있음

 

 

세번째 설정

 

 

이 설정을 체크하면 액세스 지점 정책을 통해 퍼블릭 액세스를 차단할 수 있음

 

액세스 지점 생성

 

 

속성

액세스 지점 이름

 

 

퍼블릭 액세스 차단 설정

 

 

액세스 포인트 정책

정책을 설정하여 여러가지 작업을 할 수 있지만 현 실습에서는 액세스 지점 생성에 초점을 맞추는 것이기 때문에 적용 시키지 않았음

 

액세스 포인트 정책에서는 퍼블릭 액세스를 전부  허용 했지만 해당 옵션으로 인해 퍼블릭 액세스가 차단됨

 

네번째 설정

 

 

이 옵션을 체크하면 액세스 지점 정책을 통한 퍼블릭 설정이 차단되며 다른 계정에서의 액세스도 차단됨

 

2. 버킷 정책(bucket policy)

 

 

Version

= 정책의 버전을 의미

 

Statement []

= 대괄호 안에 정책들을 포함하는 구문 객체

 

"Effect" : "Deny"

= 이 구문에서 허용하는 작업을 지정, Allow는 해당 작업을 허용 Deny는 해당 작업을 거부 

 

"Principal" : "*"

= 액세스를 요청하는 주체를 지정 

 

"Action" : "s3:GetObject",

= 액세스 포인트에서 수행 가능한 작업(Action)을 정의

GetObject : 객체(Object)를 가져오는 작업, 객체 다운로드가 가능하도록 해줌

ListBucket : 버킷에서 객체 목록을 가져오는 작업

PutObject : 버킷에 객체를 업로드 하는 작업

GetBucketLocation : 버킷의 리전 정보를 가져오는 작업

 

"Resource" : "arn:aws:s3:ap-northeast-2:380519471417:accesspoint/Accesspoint/*"

= 해당 액세스 포인트의 ARN을 사용하여 액세스 포인트에 있는 모든 객체에 대한 권한을 설정

/*는 액세스 포인트 내의 모든 객체에 대한 권한이라는 의미

 

즉 해당 정책은 모든 계정이 해당 버킷내에 있는 모든 객체의 다운로드를 차단하라는 뜻

 

다운로드 시도

 

 

오류 메시지 발생(실패)

 

 

업로드 시도

 

 

업로드 실패

 

 

3. Pre-signed URL

 

4. IAM(Identity and Access Management) - AWS IAM (tistory.com)

 

IAM을 사용하면 AWS 계정 내의 리소스에 대한 권한 관리 가능

즉 S3 버킷 내의 객체에 대한 외부 액세스 권한 부여 가능

 

5. Static website hosting

'AWS (Amazon Web Services)' 카테고리의 다른 글

AWS IAM  (0) 2023.04.07
Amazon VPC  (0) 2023.04.07
Amazon S3  (0) 2023.04.05
Amazon RDS  (0) 2023.04.02
Amazon EC2 - 실습(Windows Server)  (0) 2023.03.31