AWS S3 접근성 통제하기

접근 정책, 버킷 정책, 접근 제어 목록을 이용해 S3 접근을 관리해보자.

Posted by Juri on May 25, 2022

S3 버킷에 누가, 어떻게 접근하도록 할 것인지 정의할 수 있다. 이를 통해 S3에 저장된 객체를 세분화해 통제할 수 있으며 접근 정책, 버킷 정책, 접근 제어 목록의 접근성 통제의 세가지 주요 방식에 대해 알아본다.

1. 접근 정책

IAM 으로 S3의 객체를 세분화해 통제할 수 있다.

예를 들어, S3 풀 액세스 정책을 생성하고 10명의 회원이 포함된 그룹에 할당한다. 이제 해당 그룹에 속한 10명의 회원 모두 S3 버킷에 대한 풀 엑세스 권한에 접근할 수 있다.

IAM을 이용하면 특정 유저가 해당 버킷에 접근하도록 허용할 수 있으며 특정 버킷의 내용을 회원 모두 또는 일부 회원이 열람하도록 할 수 있고, 사용자가 특정 버킷에 객체를 추가하도록 허용할 수 있다.

정책 예시

1
2
3
4
5
6
7
8
9
10
{
    "Version": "2017-06-07",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::test_bucket/*"
        }
    ]
}

test_bucket이라는 이름의 S3 버킷에 GET 권한을 제공하는 정책이다. AWS Policy Generator를 이용하면 쉽게 위와 같은 정책을 생성할 수 있다.

2. 버킷 정책

버킷 레벨에서 생성한 정책으로 S3 버킷을 세분화해 제어할 수 있게 해준다. IAM 없이 버킷 정책만으로도 사용자 접근 제한이 가능하며 다른 AWS 계정, 또는 IAM 유저에게 특정 객체에 대한 접근 권한을 부여할 수 있다. 버킷 정책을 생성하면 사용자가 생성한 객체에 대해서만 접근 권한을 통제할 수 있다.

참고 : s3 버킷 정책으로 리드온리 접근 허용하기

principal 속성을 와일드카드로 설정해 누구나 접근이 가능하도록 했고 특정 IP주소의 트래픽만 허용하도록 구현할 수 있다. 이외에도 CloudFront 를 통한 접근만 허용하거나 MFA 인증을 반드시 거치게 할 수도 있다.

3. 접근 제어 목록

접근 제어 목록(ACL, Access Control List)를 이용해 버킷 레벨 또는 객체 레벨에서 접근을 제어할 수 있다. IAM 정책과 버킷 정책은 세분화된 제어가 가능했지만 접근 제어 목록은 넓은 범위의 제어에 초점을 맞추며 접근 승인을 한 곳과 접근 승인을 받은 곳으로만 나타낼 수 있다.

버킷이나 객체를 생성하면 S3는 리소스에 대한 모든 권한을 리소스 소유자에게 부여하는 기본 ACL을 생성해 다른 AWS 계정이 S3 버킷에 객체를 업로드하면 해당 계정(객체 작성자)이 객체를 소유하고 객체에 엑세스할 수 있으며 ACL을 통해 다른 사용자에게 객체에 대한 엑세스 권한을 부여할 수 있다.

Amazon S3에서 더이상 ACL을 사용할 필요가 없으며 각 객체에 대한 엑세스를 개별적으로 제어해야 하는 상황을 제외하고는 ACL을 사용하지 않는 것을 권장한다. ACL을 사용중지하면 다른 AWS 계정이 업로드한 객체를 쉽게 관리할 수 있다.