이 포스팅에서는 Amazon S3 에 저장되어 있는 데이터를 보호하기 위해 사용하는 기능 중 하나인 “Object Lock(객체 잠금)” 기능을 살펴보려고 합니다. Object Lock 기능은 이름 그대로 S3 에 저장되어 있는 Object 를 Lock 하는 기능인데요. Object Lock 기능을 사용하려면 S3 Bucket 을 생성하는 단계부터 몇 가지 준비 과정을 거쳐야 합니다.
첫번째, Object Lock 기능을 사용하려면 S3 Bucket 에 Object Lock 기능이 활성화되어 있어야 하는데 Bucket 에 설정하는 Object Lock 은 S3 Bucket 을 생성할 때만 활성화할 수 있습니다. 따라서, 이미 생성한 S3 Bucket 에 Object Lock 이 비활성화되어 있는 상태라면 해당 Bucket 에서는 Object Lock 기능을 사용할 수 없습니다.
두번째, Object Lock 기능을 사용하려면 S3 Bucket 에 Versioning 기능이 활성화되어 있어야합니다. 단, Versioning 기능은 Object Lock 사용을 위한 필수 옵션이기 때문에 Bucket 생성 이후 Versioning 을 비활성화할 수 없습니다.
아래와 같이 S3 Bucket 생성 과정에서 Versioning 과 “Advanced Settings” 메뉴에 있는 Object Lock 을 체크한 후에 Bucket 을 생성하면 Object Lock 을 사용할 수 있는 준비가 된 것입니다.
Bucket Level — Object Lock 사용하기
Object Lock 은 기본적으로 Object 별로 적용하는 옵션입니다. 즉, S3 Bucket 에 저장되는 Object 즉, 데이터들이 모두 동일한 Object Lock 설정을 갖는 것이 아니라 관리자의 설정에 따라 Object 별로 서로 다른 Object Lock 설정을 갖게 됩니다. 다만, Object 별로 설정 가능한 Object Lock 기능을 Object 레벨에서 설정하지 않는다면 Bucket Level 에서 설정한 Object Lock 설정값을 따르게 됩니다. 아래 화면은 Bucket 속성에 있는 Object Lock 설정 화면입니다. Default 로는 Object Lock Mode 가 None 으로 설정되어 있고 관리자가 “Governance Mode” 나 “Compliance Mode” 중 하나를 선택할 수 있습니다. Object Lock Mode 를 선택하고 나면 저장된 Object 가 삭제되지 않도록 보호받을 수 있는 기간을 “Retention Period” 에 지정하시면 됩니다.
Governance Mode 와 Compliance Mode 는 둘다 지정된 Retention Period 동안에는 저장된 Object 의 삭제나 덮어쓰기를 방지한다는 점에서 동일한 기능을 제공하지만 삭제 권한을 가질 수 있는 조건에서 차이점이 있습니다. 예를 들어, Governance Mode 를 사용하는 경우 대부분의 사용자는 Object Lock 이 적용되어 있는 Object 를 삭제할 수 없지만 “s3:BypassGovernanceRetention” 권한을 가진 사용자라면 Retention 기간 이내에도 저장된 Object 를 삭제할 수 있습니다. 다만, Object 를 삭제할 때에는 반드시 “x-amz-bypass-governance-retention:true” 헤더값이 포함되어야 하는데 AWS Management Console 을 사용하여 Object 를 삭제하는 경우에는 이 헤더가 자동으로 삽입되어 있는 상태로 API 가 호출되기 때문에 IAM 권한만 가지고 있다면 데이터 삭제가 가능합니다. 이와 다르게 Compliance Mode 를 사용하신다면 Root 를 포함한 어떤 AWS 사용자도 Retention 기간 내에는 Object 를 삭제할 수 없습니다. 따라서, 저장된 데이터에 대해 보다 강력하게 보호 기능을 적용하여 규정 준수를 하고자 한다면 “Compliance Mode” 를 사용하셔야 합니다. 단, “Compliance Mode” 는 Root 조차도 데이터 삭제나 덮어쓰기가 되지 않으므로 적용 전에 이용환경을 정확하게 파악하여 적용하셔야 합니다.
S3 Bucket 속성에서 Object Lock Mode 를 정하고 적용하려고 하면 아래와 같이 확인창이 나타나고 “confirm” 을 입력하고 진행하면 Bucket 레벨의 Object Lock 설정이 완료됩니다.
Object Level — Object Lock 사용하기
조금 전 설명드린 것처럼 Object Lock 은 Bucket Level 에서 설정할 수도 있지만 Object 별로 설정할 수도 있습니다. Object 별 Object Lock 설정은 Object 의 속성 메뉴에 있는 Object Lock 메뉴를 이용할 수 있습니다. Object 레벨의 Object Lock 설명 메뉴는 아래 화면과 같이 Bucket 레벨의 설정과 비슷하지만 추가적으로 “Legal hold” 라는 메뉴가 추가되어 있습니다. 기본값으로는 비활성화되어 있는데요. “Legal hold” 는 Retention 기간에 관계 없이 Legal hold 가 활성화되어 있는 상태에서는 데이터의 삭제가 불가능하도록 하는 데이터 보호 기능을 제공합니다. 따라서, Retention 기간이 적용되는 “Governance Mode” 나 “Compliance Mode” 와 병행하여 데이터 보호에 사용하면 좀 더 효율적일 수 있으며 “Legal hold” 는 기간에 관계 없이 “Legal hold” 를 제어할 수 있는 권한을 가진 Root 나 IAM 사용자에 의해 활성화되거나 비활성화될 수 있습니다.
Governance Mode 에서의 데이터 삭제
Object Lock 이 설정되어 있는 상태의 Object 는 설정되어 있는 Object 의 Lock Mode 가 무엇이냐에 따라 삭제할 수 있는 조건이 달라지게 됩니다.
1.Governance Mode 인 경우
: 이 경우 Object Lock 을 삭제할 수 있는 방법은 아래의 2가지 중 하나의 권한을 획득하는 방법입니다. s3:BypassGovernanceRetention 권한을 가진 경우 Governance Mode 가 활성화되어 있더라도 강제적으로 Object 를 삭제할 수 있으며 다른 S3 권한과 함께 s3:GetBucketObjectLockConfiguration 권한을 가진 경우라면 Object Lock 설정을 비활성화한 후 Object 를 삭제할 수 있습니다. 그리고 Root 로 접속하는 경우에도 모든 권한을 갖기 때문에 Object 를 삭제할 수 있습니다.
"s3:BypassGovernanceRetention",
"s3:GetBucketObjectLockConfiguration"
권한을 가진 사용자라도 Ojbect 삭제 시 Management Console 을 사용하는 환경이 아닌 별도의 개발 환경에서 API 를 사용하는 경우라면 아래와 같이 삭제 API 호출을 할 때 반드시 “x-amz-bypass-governance-retention: true” 헤더를 추가하여 삭제 요청을 호출하여야 합니다.
2.Compliance Mode 인 경우
: 이 경우에는 지정한 Retention 기간 내에서는 Root 를 포함한 어떠한 AWS 사용자도 Object 를 삭제할 수 없습니다. 즉, 삭제를 위해서는 지정된 Retention 기간이 만료될 때까지 대기하여야 합니다.
3. Legal Hold 인 경우
: 위에서 설명한 것처럼 Legal Hold 는 Governance Mode 나 Compliance Mode 와 병행하여 사용할 수 있고 Retention 주기와 관계 없이 데이터의 삭제를 차단하는 기능을 제공합니다. Legal Hold 가 활성화되어 있는 경우에는 “s3:BypassGovernanceRetention” 권한도 예외가 될 수 없기 때문에 Legal Hold 가 비활성화되어야만 데이터 삭제가 가능합니다.
참고. Governance Mode 에서 Object 삭제를 방지하기 위한 IAM Policy Sample 은 아래와 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"s3:BypassGovernanceRetention",
"s3:GetBucketObjectLockConfiguration",
"s3:PutObjectLegalHold"
],
"Resource": "*"
}
]
}
Governance Mode, Compliance Mode 그리고 Legal Hold 까지 각각의 기능이 약간씩 다른 특성을 가지고 있으며 서로 보완적인 기능을 제공합니다. 따라서, 운영상의 실수나 사용자 과실 혹은 고의적인 데이터 삭제를 미연에 방지하기 위해서는 “Governance Mode + Legal Hold” 나 “Compliance Mode + Legal Hold” 로 Object Lock 을 설정하시고 Legal Hold 설정을 변경할 수 있는 “s3:PutObjectLegalHold” 권한을 지정된 S3 관리자에게 부여하는 등의 정책적인 관리가 권고됩니다.
감사합니다.