Amazon S3 의 MFA Delete 기능

Amazon S3 의 MFA Delete 기능

Amazon S3 의 기능 중 하나인 MFA Delete 에 대해 알아보고 설정방법 등을 정리합니다.
Clock Icon2025.02.07

안녕하세요, 임채정입니다.
이번 블로그에서는 Amazon S3 에서 제공하고 있는 기능 중에 하나인 MFA Delete 에 대해서 알아보겠습니다.

MFA Delete

S3의 MFA Delete는 버킷이나 객체를 삭제할 때 Multi-Factor Authentication(MFA・다중 인증)을 요구하는 보안 기능입니다.

해당 기능을 활성화하는 것으로 버킷이나 객체 삭제 시 MFA 코드 필요하기 때문에 실수나 악의적인 삭제를 방지할 수 있습니다.
MFA Delete는 AWS 콘솔에서는 활성화할 수 없고 AWS CLI 를 통해서 할 수 있습니다.
블로그에서 그 설정 방법에 대해 알아보겠습니다.

MFA Delete 설정방법 (AWS CLI)

설정하기

MFA Delete 설정 명령어
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 사용자가 아니라 루트 사용자를 통해 다시 실행해주세요

설정을 하고 나면 다음 명령어를 통해 실제로 적용되었는지 확인할 수 있습니다.

MFA Delete 설정 확인
aws s3api get-bucket-versioning --bucket [S3 버킷명]

다음과 같이 표시되면 설정이 잘 되어 있는 것입니다.

결과
{
    "Status": "Enabled",
    "MFADelete": "Enabled"  
}

또는 콘솔페이지에서도 확인할 수 있습니다.

011

설정 후 객체 삭제 방법

실제로 삭제를 하려고 하면 다음과 같은 메시지가 출력됩니다.

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)를 아래 명령어를 통해 확인할 수 있습니다.

객체키 및 버전 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  
}

해제하기

MFA Delete 설정 해제
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 로 되어 있으면 설정 해제 완료 입니다.

MFA Delete 설정 확인
aws s3api get-bucket-versioning --bucket [S3 버킷명]
결과
{
    "Status": "Enabled",
    "MFADelete": "Disabled"  
}

마무리

사용한 CLI 명령어 참고 페이지
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-versioning.html
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/get-bucket-versioning.html

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.