Amazon S3 의 MFA Delete 기능
안녕하세요, 임채정입니다.
이번 블로그에서는 Amazon S3 에서 제공하고 있는 기능 중에 하나인 MFA Delete 에 대해서 알아보겠습니다.
MFA Delete
S3의 MFA Delete는 버킷이나 객체를 삭제할 때 Multi-Factor Authentication(MFA・다중 인증)을 요구하는 보안 기능입니다.
해당 기능을 활성화하는 것으로 버킷이나 객체 삭제 시 MFA 코드 필요하기 때문에 실수나 악의적인 삭제를 방지할 수 있습니다.
MFA Delete는 AWS 콘솔에서는 활성화할 수 없고 AWS CLI 를 통해서 할 수 있습니다.
블로그에서 그 설정 방법에 대해 알아보겠습니다.
MFA Delete 설정방법 (AWS CLI)
설정하기
aws s3api put-bucket-versioning --bucket [S3 버킷명] --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::[어카운트ID]:mfa/[mfa-deviceーname] [MFA시리얼 넘버]"
에러 발생 시 대응 방법
MFA Delete 는 AWS의 루트 사용자만 설정을 할 수 있습니다.
만약 다음과 같은 에러가 발생한다면 IAM 사용자를 통해 명령어를 실행했기 때문입니다.
이럴 경우에는 IAM 사용자가 아니라 루트 사용자를 통해 다시 실행해주세요
설정을 하고 나면 다음 명령어를 통해 실제로 적용되었는지 확인할 수 있습니다.
aws s3api get-bucket-versioning --bucket [S3 버킷명]
다음과 같이 표시되면 설정이 잘 되어 있는 것입니다.
{
"Status": "Enabled",
"MFADelete": "Enabled"
}
또는 콘솔페이지에서도 확인할 수 있습니다.
설정 후 객체 삭제 방법
실제로 삭제를 하려고 하면 다음과 같은 메시지가 출력됩니다.
You can`t delete object versions because Multi-factor authenticaion (MFA) delete is enabled for this bucket.
To modify MFA delete settings, use the AWS CLI, AWS SDK or the Amazon S3 REST API.
이 때 객체를 삭제하기 위해서는 CLI에서 다음과 같은 명령어를 사용해야 합니다.
(버전 관리를 통해 삭제 마커가 붙은 객체가 삭제 대상)
객체키 및 버전ID 확인하는 명령어
객체 삭제를 위한 명령어에 들어가는 파라미터(객체키, 버전 ID)를 아래 명령어를 통해 확인할 수 있습니다.
aws s3api list-object-versions --bucket [버킷명] --prefix [객체 경로]
명령의 출력 결과에서 다음 결과를 삭제 명령어에 사용합니다.
- 객체키 : key
- 버전ID : VersionId
{
"Versions": [
{
"ETag": "\"3a7c237c55b22xxxxb7814b9cexxxxxxx\"",
"ChecksumAlgorithm": [
"CRC64XXXX"
],
"Size": 538733,
"StorageClass": "STANDARD",
"Key": "test-for-mfa/test-object.pdf",
"VersionId": "R1rUfk8XXXXXXXiwHCh8XOtoiZ7avljp",
"IsLatest": false,
"LastModified": "2025-02-05T05:05:48+00:00",
"Owner": {
"DisplayName": "xxxxxxxxxxxx",
"ID": "306f318a2feb3ea2256ba7d4f0ebdxxxxxxb9ec7d93fxxxxxxx19bee
92629ce"
}
}
}
aws s3api delete-object --bucket [S3 버킷명] --key [객체키] --version-id [객체 버전 ID] --mfa "arn:aws:iam::[어카운트ID]:mfa/[mfa-deviceーname] [MFA시리얼 넘버]"
{
"VersionId": "xxxxxxxxxxxxxxxxxxxx",
"DeleteMarker": true
}
해제하기
aws s3api put-bucket-versioning --bucket [S3 버킷명] --versioning-configuration Status=Enabled,MFADelete=Disabled --mfa "arn:aws:iam::[어카운트ID]:mfa/[mfa-deviceーname] [MFA시리얼 넘버]"
삭제 후 MFA Delete 설정을 확인해봐서 Disabled
로 되어 있으면 설정 해제 완료 입니다.
aws s3api get-bucket-versioning --bucket [S3 버킷명]
{
"Status": "Enabled",
"MFADelete": "Disabled"
}
마무리
사용한 CLI 명령어 참고 페이지