AWS

[AWS 파헤치기] #4 S3 권한설정 ACL & Bucket Policy

탕구리당 2019. 7. 18. 07:59
반응형

S3 (Simple Storage Service)

 

S3는 Simple Storage Service의 약자이며 AWS에서 제공하는 파일서버입니다. 저는 평소에 생각보다 S3를 사용할 일이 많이 생기더라고요. 도메인과 연결하여 정적 사이트를 제공하기도 하고 일반적인 파일서버로 사용하거나 배포 파일을 관리할 때 사용하기도 합니다. 그럴 때마다 항상 헷갈리는 부분이 버킷 정책과 접근권한에 대한 부분이에요. 그래서 이번엔 그 부분을 정리해두려 합니다.

 

 

권한 관리 생각보다 헷갈린다?

 

저는 S3를 통해 총 3가지의 권한에 대해 설정해 보았습니다.  Public Access, ACL(사용자, 버킷, 객체), Bucket Policy입니다. 각각 권한에 대한 설정을 통해 퍼블릭, 버킷, 객체에 대한 설정을 할 수 있으며, Public Access는 임의의 사용자에 대한 권한을 설정하고 Bucket과 Obejct는 각각의 설정에 대해 독립적인 권한을 갖습니다.

 

 

 

Public Access

 

우선, 퍼블릭 액세스 권한 입니다. 퍼블릭 액세스 권한은 말 그대로 모두에게 액세스 권한을 오픈할 것인지 아니면 임의의 사용자에게는 접근 권한을 제한할 것인지 설정합니다. 퍼블릭 액세스에는 총 4종류의 접근 제한이 있습니다.

 

퍼블릭 엑세스의 종류

위의 설정들은 특수한 경우에 대해 퍼블릭 액세스가 허용되는 경우을 모두 차단하고 있습니다. 각자 필요한 경우에 대한 퍼블릭 제한을 오픈하고 사용하시되, 일반적으로 모든 퍼블릭 액세스에 대해서는 차단하여 사용합니다.

 

예를 들어 버킷을 통해 static 파일에 대한 호스팅을 진행하는 경우 퍼블릭 액세스 제한을 하게 되면 사용자가 웹 페이지에 접근할 수 없기 때문에 퍼블릭 액세스에 대한 차단을 풀어주어야 합니다.

 

 

ACL (Access Control List)

 

ACL은 버킷이나 객체에 대해 요청자의 권한 허용 범위를 어디까지 설정할 것인가에 대해 간단하게 설정할 수 있습니다. 여기서 요청자는 일반 퍼블릭한 사용자가 될 수도 있고, 계정의 owner나 resouce group, 특정 사용자가 될 수 있습니다. 위에서 모든 퍼블릭 액세스에 대해서 차단을 설정하셨다면 ACL에서 퍼블릭에 대한 권한을 설정하여도 변경되지 않습니다.

 

ACL 설정 화면

보시는 바와 같이 owner 혹은 여타 다른 계정에 대해서 추가거나 각 사용자에 대한 권한을 제어할 수 있습니다. 위에서 퍼블릭 액세스에 대한 접근은 모두 막아 놓았기 때문에 액세스를 부여할 수 없다는 문구도 함께 출력됩니다.

 

 

Bucket Policy (버킷 정책)

 

Bucket Policy(버킷 정책)은 버킷을 사용할 권한을 가진 여러 명의 사용자 별로 각각의 행위에 대한 권한 범위를 설정할 수 있습니다. 누군가는 읽기만 가능하고 누군가는 읽기, 쓰기 모두 가능한 상태 같이 말이죠, Bucket에 대한 설정은 Bucket Policy를 통해 설정합니다. 버킷 정책 또한 퍼블릭 액세스 설정에 따라 퍼블릭에 대한 액세스 권한을 오픈하더라도 무시되기도 합니다.

 

버킷 정책에는 아래와 같이 크게 몇 가지의 요소가 포함됩니다.

여기서 살펴봐야 할 사항은 Action, Effect, Resource, Principal 입니다.

 

Action에 대한 항목은 Bucket에 대해 어떤 작업을 허용할 지에 대한 내용입니다. 예를 들어 객체에 대해 읽기 작업을 하는 경우에는 S3:getObject;라 명세하고 쓰기 작업을 하는 경우 s3:putObejct; 와 같이 사용합니다. 여러 기능에 대해서 명세할 경우 구분자로 ";"를 사용합니다.

 

Effect는 사용자가 특정 작업을 요청하는 경우의 결과입니다. 버킷에 대한 명령을 허락(allow)하거나 거부(deny) 할 수 있으며, 특정 사용자에 대해 명령을 제한하거나, 허용하는 식으로 사용이 가능합니다.

 

Resource는 대상이 대는 Bucket에 대한 명세를 진행합니다.

 

Principal은 특정 사용자에 대해 명세해주는 작업을 합니다. 예를 들어 Principal :  { "AWS": "arn:aws:iam::Account-ID:user/Dave" }와 같이 사용할 수 있습니다.

 

 

이렇게 특정 조건에 대해 Bucket Policy를 설정해줄 수도 있습니다. 자세한 내용은 공식문서를 참조해주세요

 

이렇게 S3에 대한 접근 권한에 대해 알았습니다. 생각보다 Buckey Policy를 설정하는 경우가 많아서 매번 할 때마다 많이 헷갈렸는데 쭉 정리하고 나니까 어느 정도 개념이 머리에 잡히는 느낌이네요.

 

긴 글 읽어주셔서 감사합니다 :)

반응형