이번에는 S3 Bucket 을 운영하는 환경에서 관리자가 IAM 사용자들이 S3 Bucket 에 저장되어 있는 컨텐츠를 Management Console (브라우저) 을 이용하는 경우에 한하여 차단하는 방법을 Bucket Policy 로 작성해보도록 하겠습니다.
S3 Bucket 에 있는 컨텐츠가 Public 하게 공개되어 있는 상태가 아니라면 IAM 권한을 가진 사용자에 한하여 AWS Management Console 이나 AWS CLI 를 통하여 다운로드하는 것이 가능합니다.
따라서, Management Console 을 이용하여 다운로드 하는 경우에 IAM Policy 검사 과정에서 AWS CLI 환경과의 차이점을 구분한 후 구분된 정보를 기준으로 IAM Policy 나 Bucket Policy 를 작성하여 AWS CLI 에서는 Download 가 가능하도록 하고 Management Console 에서는 다운로드가 불가능하도록 구현할 수 있습니다.
그리고 S3 컨텐츠의 다운로드를 위해서는 S3:GetObject 라는 Action 이 필요하므로 Management Console 접근이라는 것을 확인할 수 있는 Condition 과 s3:GetObject 라는 Action 을 적절하게 조합하면 원하는 바를 구현할 수 있을 것 같습니다.
먼저, Management Console 과 CLI 의 요청 시 차이점을 살펴볼텐데요. 가장 큰 차이점은 Management Console 은 Browser 에서 API 호출이 발생하기 때문에 기본적으로 항상 브라우저의 정보를 포함하는 UserAgent 정보가 포함되어 호출이 되게 됩니다.
간단하게 Chrome 브라우저에서 접속하여 다운로드 하는 조건에서는 차단이 가능하도록 Chrome 이라는 정보가 UserAgent 에 포함되면 차단될 수 있도록 Condition 을 준비합니다.
"Condition": {
"StringLike": {
"aws:UserAgent": "*Chrome*"
}
그리고 S3 Bucket 에서 다운로드를 할 수 있는 Action 을 지정합니다.
"Action": "s3:GetObject"
아래는 완성된 Bucket Policy 샘플입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Deny Download via Chrome",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccoundID:user/username"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-name/*",
"Condition": {
"StringLike": {
"aws:UserAgent": "*Chrome*"
}
}
}
]
}
이와 같은 Bucket Policy 가 Bucket 에 적용이 되어 있는 상태라면 IAM 사용자가 Bucket 에 대한 다운로드 권한을 가지고 있다고 하더라도 Chrome 을 이용한 Management Console 에서의 다운로드는 차단되게 됩니다.
참고. 여러가지 브라우저 환경에서의 접근을 차단하도록 하기위해서는 aws:UserAgent 정보를 적절하게 수정 후 사용하셔야 합니다.
감사합니다.