이 블로그에서는 AWS S3 를 사용하는 환경에서 특정 AWS 계정에 속한 S3 Bucket 을 다른 AWS 계정에 속한 S3 Bucket 으로 복제하는 방법과 이와 같은 유형의 복제를 차단하는 방법에 대해 살펴보도록 하겠습니다.
먼저 단일 계정 내부에서 이뤄지는 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 사용자의 권한을 적절하게 제한하여 작성하는 것이 가장 바람직하겠습니다.
- 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 로 보장합니다.
감사합니다.