AWS S3 계정 간 복제 및 차단 방법

JIPA
9 min readAug 21, 2020

--

이 블로그에서는 AWS S3 를 사용하는 환경에서 특정 AWS 계정에 속한 S3 Bucket 을 다른 AWS 계정에 속한 S3 Bucket 으로 복제하는 방법과 이와 같은 유형의 복제를 차단하는 방법에 대해 살펴보도록 하겠습니다.

S3 의 복제 관련 기능

먼저 단일 계정 내부에서 이뤄지는 S3 Bucket 복제와 다르게 서로 다른 AWS 계정 간에 S3 Bucket 복제를 사용하기 위해서는 몇가지 권한 문제를 해결해야 합니다.

원본 S3 Bucket 을 소유하고 있는 계정(Source Account)의 IAM 사용자를 Source-User 라고 하고 복제 대상이 되는 S3 Bucket 을 소유하고 있는 계정(Destination Account)의 IAM 사용자를 Destination-User 라고 칭하도록 하겠습니다. 이러한 환경에서 서로 다른 계정 간의 S3 Bucket 복제가 이뤄지기 위해서는 아래와 같은 권한 문제를 먼저 해결하여야 합니다.

첫째, Source-User 가 Destination-User 에게 S3 Bucket 을 복제하기 위해서는 Source-Bucket 이 Replication 과정에서 사용할 IAM Role 을 Source Bucket 에 할당 할당할 수 있는 PassRole 권한을 가져야하며 S3 Bucket Replication 을 실행하기 위한 권한을 가지고 있어야 합니다.

두번째, Destination-User 는 Destination S3 Bucket Policy 를 이용하여 Source-User 가 복제를 진행할 수 있도록 Source-User 에 대한 권한을 추가해 주어야합니다.

참고. 권한 문제와 별개로 S3 Bucket 복제를 위해서는 Source Bucket 과 Destination Bucket 의 Versioning 이 활성화되어 있어야 합니다.

Destination Bucket 에는 아래와 같이 Source AWS Account 에서 Replication 에 사용할 IAM Role 이 Destination Bucket 에 Replication 과 관련한 작업을 수행할 수 있도록 Bucket Policy 를 통하여 권한을 부여하여야 합니다.

{
"Version":"2008-10-17",
"Id":"",
"Statement":[
{
"Sid":"1",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-acct-ID:source-acct-IAM-role"
},
"Action":["s3:ReplicateObject", "s3:ReplicateDelete"],
"Resource":"arn:aws:s3:::destination/*"
},
{
"Sid":"2",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-acct-ID:source-acct-IAM-role"
},
"Action":["s3:GetBucketVersioning", "s3:PutBucketVersioning"],
"Resource":"arn:aws:s3:::destination"
}
]
}

위에서 언급된 복제와 관련한 권한 문제 및 사전에 준비하여야하는 항목들을 모두 마쳤다면 교차 계정 간의 S3 Bucket 복제는 AWS Management Console 이나 AWS Command Line Interface 를 통하여 진행할 수 있습니다.

Management Console 에서는 아래와 같이 S3 관리 화면에서 Source Bucket 을 선택한 후 하위 메뉴의 “Management” 탭 아래에서 제공하는 메뉴 중 “Replication” 옵션을 선택하여 “Replication Rule” 을 생성하게 되면 교차 계정(동일 계정도 마찬가지)간 S3 복제가 수행되게 됩니다.

AWS CLI 를 사용하여 S3 복제를 구성하는 과정은 약간 복잡할 수 있어 이 블로그에서는 다루지 않겠습니다. CLI 를 이용하여 S3 복제를 구성하는 방법은 아래의 AWS 기술 문서를 참고하시기 바랍니다.

교차 계정간 S3 복제는 동일한 컨텐츠를 안전하고 편리하게 백업할 수 있는 좋은 기능 중의 하나입니다. 하지만 보안적인 관점에서는 권한을 가진 내부자가 중요 데이터를 외부에 유출할 수 있는 방법으로 악용될 수도 있고 정상적인 사용자의 권한이 탈취되는 경우에도 악의적인 사용자에 의해 데이터 유출의 용도로 악용될 수 있는 기능 중 하나이기도 합니다. 따라서, 교차 계정간 S3 복제는 보다 안전하게 조직내에서 사용될 수 있도록 관리되어야 하는데요. 그럼 교차 계정간 S3 복제를 안전하게 사용할 수 있도록 제한하는 방법에 대해 살펴보도록 하겠습니다.

교차 계정 간 S3 Bucket 복제를 제한하기 위해서는 여러가지 방법을 적용하실 수 있는데요. 대표적으로 AWS Organizations 에서 제공하는 SCP 를 활용하는 방법과 IAM Policy 에서 사용하는 Permission Boundary 를 이용하여 제한하는 방법이 있습니다. 그리고 기본적으로 S3 Bucket 복제 기능을 사용해야하는 IAM 사용자의 권한을 적절하게 제한하여 작성하는 것이 가장 바람직하겠습니다.

  1. SCP 를 이용하여 조직 내 AWS 계정 간의 S3 Bucket 복제만을 허용하도록 제한
    : SCP 를 이용하면 AWS Organizations 에 소속되어 있는 AWS 계정 내의 Bucket 이 조직 내에서 허용한 특정 S3 Bucket 이외의 Bucket 으로 데이터가 복제되는 것을 제한할 수 있습니다.

예를 들어, 아래와 같은 SCP 를 AWS Organizations 내의 특정 OU 나 Account 에 Attach 하게 되면 해당 SCP 에 적용을 받게 되는 AWS Account 내에서는 SCP 에 의해 허용된 S3 Bucket 이외의 다른 S3 Bucket 으로의 S3 목제가 제한되게 됩니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ReplicationToSpecifiedBucket",
"Effect": "Allow",
"Action": [
"s3:GetBucketVersioning",
"s3:PutBucketVersioning",
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource": "arn:aws:s3:::destination-bucketname/*"
}
]
}

2. IAM Permission Boundary 의 사용
: SCP 와 유사하게 AWS Account 내의 권한을 제한하는 용도로 사용하는 Permission Boundary 를 이용해서도 SCP 와 유사한 효과를 얻을 수 있습니다. Permission Boundary 의 정책도 SCP 에서 사용하였던 정책을 그대로 사용하여 적용할 수 있지만 Permission Boundary 는 SCP 와 다르게 “NotResource” 라는 정책 요소를 사용할 수 있습니다. 따라서, 아래와 같이 Permission Boundary 를 작성한 후 S3 Bucket Replication 에 사용되는 IAM Role 에 할당하게 되면 허용된 Destination Bucket 이외의 Bucket 으로의 S3 Replication 은 제한되게 됩니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyS3ReplicationToSpecifiedBucket",
"Effect": "Deny",
"Action": [
"s3:GetBucketVersioning",
"s3:PutBucketVersioning",
"s3:PutBucketReplication",
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"NotResource": "arn:aws:s3:::destination-bucketname/*"
},
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}

말씀드린 것처럼 SCP 와 Permission Boundary 이외에도 IAM Permission Policy 를 이용해서 보다 정교한 권한할당을 함으로써 특정 IAM 사용자가 S3 Replication 을 하는데 있어 규정을 준수하고 안전하게 데이터를 전송할 수 있도록 제한할 수 있습니다. 이와 같은 Permission Policy 를 이용할 때에는 Policy 내의 “Resource” 나 “PassRole” 과 같은 Action 을 적절히 반영하여 구현하면 편리하게 원하는 S3 Replication 의 사용을 제한하는 환경을 구성할 수 있습니다.

추가로, 최근(2020년 8월 기준)에 Amazon S3 에 Replication Time Control (복제 시간 제어) 라는 기능이 새롭게 추가되었는데요. 아래 슬라이드에 보이는 것처럼 S3 Replication 기능을 사용할 때 RTC 옵션을 적용하시면 Replication 과정에 대한 모니터링이 가능하며 복제 대상 Object 의 99.99% 가 15분 이내에 복제되는 것을 SLA 로 보장합니다.

감사합니다.

--

--

JIPA
JIPA

Written by JIPA

Always Day 1. Security is job zero.

No responses yet