AWS 다른 계정으로 버킷 복제 설정하기
여러개의 AWS 계정들에서 생성되는 Cloudtrail 로그를 대표AWS 계정 한곳으로 모아서 통합 로그 분석을 해보기 위해서
각 AWS 계정의 Cloudtrail이 저장되는 S3 버킷을 대표계정의 버킷으로 복제하는 작업을 해봤습니다.
통합 로그 분석은 따로 다루겠습니다
여기에서는, CloudTrail을 설정하면서 남겨지는 로그를 다른 AWS계정으로 복제하는 과정만 진행해봅니다.
account-1 계정의 bucket-a 에서, account-2 계정의 bucket-b로 복제해보겠습니다.
작업 순서는,
Cloudtrail 설정, S3 bucket 설정, IAM 역할 및 정책 설정, S3 복제규칙 설정, 복사테스트 순으로 진행합니다.
0. 실습 준비
AWS 계정 두개
: account-1 (ID 000000000001 가칭)
: account-2 (ID 000000000002 가칭)
1. account-1에서, cloudtrail 생성시 추적 설정하면서 새 버킷을 생성
추적명 : cloudtrail-account-1
스토리지 위치 : account-1-bucket-a 새버킷생성
추적 로그 위치 : bucket-a/AWSLogs/000000000001
옵션
다중리전추적:예
로그파일암호화:비활성화
로그파일검증:활성화
SNS알림:비활성화
Cloudwatch Log 활성화
2. account-2에서, s3 bucket account-2-bucket-b 생성
버킷명: account-2-bucket-b
버킷 옵션
퍼블릭 액세스 - 모든 퍼블릭 액세스 차단 - 활성화
버킷 버전 관리 - 활성화
암호화 - 비활성화 (활성화 사용시 KMS 연동 필요)
객체 소유권 - 버킷 소유자 적용
ACL적용안함
3. IAM 역할 및 정책 생성
1) account-1에서, IAM 정책(Policy) 생성
- 버킷에 Replicate 관련 작업의 권한을 정의
정책이름 : s3-replicate-policy-from-bucket-a-to-b (임의의 이름)
정책 json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::account-1-bucket-a",
"arn:aws:s3:::account-1-bucket-a/*",
"arn:aws:s3:::account-2-bucket-b",
"arn:aws:s3:::account-2-bucket-b/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::account-1-bucket-a/*",
"arn:aws:s3:::account-2-bucket-b/*"
]
}
]
}
2) account-1에서, IAM 역할(role) 생성
- S3를 위 정책과 연결
대상 리소스 : s3 선택
역할이름: s3-replicate-role-from-bucket-a-to-b (임의의 이름)
연결 정책 : s3-replicate-policy-from-bucket-a-to-b (앞서 만든 정책 이름)
생성된 역할 ARN: arn:aws:iam::000000000001:role/s3-replicate-role-from-bucket-a-to-b
3) account-2에서, 수신할 account-2-bucket-b버킷에 "버킷 정책" (리소스정책) 추가
{
"Version": "2012-10-17",
"Id": "",
"Statement": [
{
"Sid": "SetPermissionsForObjects",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::000000000001:role/s3-replicate-role-from-bucket-a-to-b"
},
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource": "arn:aws:s3:::account-2-bucket-b/*"
},
{
"Sid": "SetPermissionsOnBucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::000000000001:role/s3-replicate-role-from-bucket-a-to-b"
},
"Action": [
"s3:List*",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning"
],
"Resource": "arn:aws:s3:::account-2-bucket-b"
}
]
}
4. S3의 복제규칙 설정
account-1에서, account-1-bucket-a 버킷 선택하여, 관리 메뉴에서, 복제 규칙 생성
복제규칙이름 : replicate-from-bucket-a-to-b
상태 : 활성화
소스버킷 : account-1-bucket-a
적용옵션: 버킷의 모든 객체에 적용
접두사 : 생략 (생략하면 해당 버킷 전체가 복제되고, 접두사에 폴더 이름을 지정하면, 해당 폴더와 하위 컨텐츠만 복제 적용됨 )
대상버킷
다른 계정의 버킷 지정
계정ID : account-2 id(000000000002)
버킷이름 : account-2-bucket-b
옵션 : 객체 소유자를 대상 버킷 수유자로 변경 선택
IAM역할 : 위 account-2에서 생성한 역할이름 지정
암호화 : 선택안함
AWS KMS로 암호화된 객체 복제: AWS Key Management Service(AWS KMS) 키로 암호화된 객체를 복제할 수도 있다.
대상스토리지 클래스 : 지정안함 (지정할수도있다, 테스트 더 필요)
추가 복제 옵션 : 복제지표 및 알림 선택, 삭제 마커 복제 선택, 복제 시간제어 선택안함, 복제본 수정 동기화 선택안함
추가 복제 옵션 설명 (선택 안해도 복제 동작에 영향없음)
-복제 시간 제어(RTC) - 선택안함
복제 시간 제어는 새 객체의 99.99%를 15분 만에 복제했으며, 복제 지표 및 알림을 제공합니다. 추가 요금이 적용됩니다. 자세히 알아보기
-복제 지표 및 알림 - 선택함
Cloudwatch 지표를 통해 복제 규칙의 진행 상황을 모니터링합니다. 자세히 알아보기 또는 Amazon Cloudwatch 요금 참조
-삭제 마커 복제 - 선택함
S3 삭제 작업에 의해 생성된 삭제 마커는 복제됩니다. 수명 주기 규칙에 의해 생성된 삭제 마커는 복제되지 않습니다. 자세히 알아보기
-복제본 수정 동기화 - 선택안함
이 버킷의 복제본에 적용된 메타데이터 변경 사항을 대상 버킷에 복제합니다. 자세히 알아보기
저장
저장시 옵션
기존 객체를 복제하시겠습니까?
예. 기존 객체를 복제합니다 --> 복제작업 생성화면으로 들어감
아니요. 복제하지 않습니다 --> 저장하고 종료됨
5. 테스트
- 정책 적용위해 약 1시간 정도 적용 시간 기다려준다 (적용됬는지 여부를 알 수는 없다, 경험상 복잡한 정책은 1~2시간 적용되는데 시간이 걸렸었다)
- account-1-bucket-1에 파일 업로드하고, account-2-bucket-b에 파일이 복제되는지 확인
- account-1-bucket-a에 cloudtrail 로그가 생성되면, account-2-bucket-b에도 같이 생성되는지 확인
cloudtrail 로그는 파일 사이즈가 크지 않아서 약 1분 내로 복제되는 것을 경험했다
- S3 버킷 account-1-bucket-a의 '지표' 메뉴에서 '복제지표' 차트로 복제보류상태, 복제지연시간 확인 가능함
버킷의 컨텐츠 속성을 보면 복제상태를 확인할 수 있다. 복제지연이나 복제오류가 발생하면, 설정이나 권한 문제로 볼 수 있다. 왜 복제가 실패했는지 자세한 설명은 나오지 않는다
CloudTrail 로그는 AWS 계정의 관리, 규정 준수, 운영 및 위험 감사를 지원하는 AWS 서비스로서,
CloudTrail 로그 및 CloudTrail 콘솔에 기록된 정보를 사용하여 사용자, 역할 또는 AWS 서비스에서 수행한 작업에 대한 정보를 검토할 수 있다.
AWS참고자료를 보면, 최신 UI가 반영되지 않은 오래된 문서들이 자주 눈에 띄어서, AWS 문서 그대로 따라하기가 쉽지 않은 경우가 자주 있다. 많이 테스트 해보고, 검색해보면서 다른 고수들의 경험치를 참고할 수 밖에...
내가 참고한 자료들
https://docs.aws.amazon.com/ko_kr/awscloudtrail/latest/userguide/cloudtrail-user-guide.html
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/replication-example-walkthroughs.html
'[AWS-DR] > S3' 카테고리의 다른 글
[참고] Provide Cross Account S3 Bucket Access to EC2 Instance without using STS Assume Role (80) | 2024.07.23 |
---|---|
[참고] Access S3 Objects of One Account from EC2 Instance in Another Account (84) | 2024.07.23 |
Server-Side Encryption in S3 using KMS - SSE-KMS (72) | 2024.07.01 |
[중요] AWS S3 Event Notifications with SNS and SQS !! (76) | 2024.06.30 |
[참고] AWS S3 CRR vs SRR replication (교차 리전 복제, 동일 리전 복제) (60) | 2024.06.26 |
댓글