이 포스팅에서는 S3 에서 제공하는 옵션 중 하나인 Public Access Setting 에 대해 살펴보도록 하겠습니다.
Public Access Setting 은 크게 ACL 과 Bucket Policy 에 대한 항목으로 나뉘며 각 항목별로 아래와 같이 2가지씩의 옵션을 제공하고 있습니다.
각 옵션이 의미하는 바는 다음과 같습니다.
- Block new public ACLs and uploading public objects (Recommended)
→ 업로드 된 Object 를 Public 하게 접근가능하도록 하는 새로운 ACL 의 생성을 차단하며 Public 접근이 가능하도록 설정된 Object 가 업로드되는 것을 차단합니다.
기대효과 = 관리자가 실수 혹은 고의로 Object 를 Public 하게 변경하거나 새로운 Public Object 가 업로드되는 것을 방지할 수 있습니다.
2. Remove public access granted through public ACLs (Recommended)
→ Public Access 가 허용된 ACL 이 적용되어 있더라도 해당 Object 에 대한 Public 접근을 차단합니다.
기대효과 = 관리자가 실수로 특정 Object 에 대해 Public 접근을 허용하였더라도 외부에서의 접근을 차단합니다.
3. Block new public bucket policies (Recommended)
→ Public 접근을 허용하는 새로운 Bucket Policy 생성을 차단합니다.
기대효과 = 권한을 가진 누군가에 의하여 Bucket 이 Public 접근을 허용하는 상황을 차단합니다.
4. Block public and cross-account access if bucket has public policies (Recommended)
→ Public 접근을 허용하는 Bucket Policy 가 있더라도 Public 접근 및 타계정에서의 접근을 차단합니다.
기대효과 = 권한을 가진 누군가에 의해 Bucket 에 대한 Public Policy 가 생성되었더라도 해당 Bucket 에 대한 Public 접근을 차단합니다.
테스트 1. Object Public 설정 차단 확인
A. S3 메뉴에서 Bucket 생성을 위하여 “Create Bucket” 버튼을 클릭합니다.
B. Bucket 의 이름을 입력한 후 나머지 값들은 기본값을 사용하기 위하여 “Create” 버튼을 클릭합니다.
C. 아래와 같이 Bucket 이 정상적으로 생성된 것을 확인합니다.
D. Bucket 이름을 클릭한 후 Bucket 내부에서 “Upload” 버튼을 클릭하여 Object 를 업로드합니다.
Upload 시 기본 설정을 적용하기 위하여 파일 선택 후 “Upload” 를 클릭합니다.
E. 아래와 같이 파일이 정상적으로 업로드 된 것을 확인합니다.
F. 업로드된 파일에 대한 Public 접근을 허용하기 위하여 아래 그림과 같이 파일명을 선택한 후 화면 위쪽의 “Action” 버튼을 클릭하여 “Make Public” 메뉴를 선택합니다.
다음과 같은 화면을 확인한 후 “Make Public” 버튼을 클릭합니다.
G. 화면 하단의 상태창에 아래와 같이 Error 가 증가한 것을 확인한 후 Error 를 클릭하여 “Make Public” 시도가 실패한 것을 확인합니다.
- “Make Public” 시도는 Bucket 에 기본값으로 설정되어 있는 Public Access Setting 에 의하여 차단된 것입니다.
테스트 2. Public Object 업로드 차단 확인
A. 생성된 Bucket 에 새로운 Object 를 업로드 하기 위하여 Upload 버튼을 클릭한 후 파일을 선택합니다.
Public Access 설정을 적용하기 위하여 “Next” 버튼을 클릭합니다.
B. 다음 화면에서 아래와 같이 “Manage public permissions” 메뉴를 “Grant public read access to this object(s)” 로 변경한 후 “Next” 버튼을 클릭합니다.
다음 화면에서도 “Next” 를 클릭합니다.
C. 다음 화면에서 “Upload” 버튼을 클릭하여 파일 업로드를 시도합니다.
D. 화면 하단의 상태창에 아래와 같이 Error 가 증가한 것을 확인한 후 Error 를 클릭하여 “Upload” 시도가 실패한 것을 확인합니다.
- “Upload” 시도는 Bucket 에 기본값으로 설정되어 있는 Public Access Setting 에 의하여 차단된 것입니다.
테스트 3. Public Bucket Policy 생성 차단 확인
A. 생성된 Bucket 에 대해 Public 접근을 허용하기 위하여 다음과 같은 Bucket Policy 를 Bucket 에 적용합니다. 아래의 Bucket Policy 는 해당 Bucket 에 대해 모든 Public 접근을 허용하는 정책입니다.
{"Version": "2008-10-17","Statement": [{"Sid": "AllowPublicRead","Effect": "Allow","Principal": {"AWS": "*"},"Action": "s3:GetObject","Resource": "arn:aws:s3:::demo-public-access.ap-northeast-2/*"}]}
아래와 같이 Bucket 의 메뉴 중 “Permissions” 를 선택한 후 하위 메뉴에서 “Bucket Policy” 를 선택해 위의 Bucket Policy 를 붙여넣기 한 후 “Save” 버튼을 클릭합니다.
- Bucket 의 이름이 자신이 생성한 Bucket 이름과 일치하도록 수정합니다.
B. 아래와 같이 “Access denied” 와 함께 Error 가 발생하는 것을 확인합니다.
- “Public Bucket Policy 생성” 시도는 Bucket 에 기본값으로 설정되어 있는 Public Access Setting 에 의하여 차단된 것입니다.
테스트 4. Public 접근이 허용된 상태에서 Public 접근 차단 확인
A. 생성된 Bucket 의 Public Bucket Policy 생성이 가능하도록 Public Access Setting 중 3번째 항목을 비활성화합니다.
아래와 같이 Bucket 의 메뉴 중 “Permissions” 하단의 “Public Access Settings” 버튼을 클릭한 후 “Edit” 링크를 클릭합니다.
아래 화면에서 세번째 항목인 “Block new public bucket polices(Recommended) 를 해제한 후 Save 를 클릭합니다.
설정 변경을 적용하기 위하여 빈칸에 “confirm” 을 입력한 후 “Confirm” 버튼을 클릭합니다.
다음과 같이 변경 사항이 정상적으로 반영된 것을 확인합니다.
B. Public 접근을 허용하기 위하여 아래의 Bucket Policy 를 적용합니다.
{"Version": "2008-10-17","Statement": [{"Sid": "AllowPublicRead","Effect": "Allow","Principal": {"AWS": "*"},"Action": "s3:GetObject","Resource": "arn:aws:s3:::demo-public-access.ap-northeast-2/*"}]}
위 정책이 적용되면 아래 화면과 같이 해당 Bucket 이 Public 상태임을 나타내는 확인할 수 있습니다.
C. Pubic 상태로 전환된 Bucket 상태에서 업로드 되어 있는 Object 를 선택한 후 아래와 같이 해당 Object 의 “Object URL” 을 클릭합니다.
아래 화면과 같이 Bucket 이 Public 상태임에도 Object 에 대한 접근이 차단되는 것을 확인합니다.
- “Public Bucket의 Object 접근” 시도는 Bucket 에 기본값으로 설정되어 있는 Public Access Setting 에 의하여 차단된 것입니다.
감사합니다.