最近現在担当しているプロジェクトについてセキュリティ評価を行いました。セキュリティ評価基準はCISベンチマークです。評価でS3バケットのMFA Delete を有効化するとの推奨事項がありますのでS3のMFA Delete はどういったものなのかを調べてみました。

S3バケットのMFA Delete とは

MFA Deleteを有効化すると、バケット所有者は、特定のバージョンを削除したりバケットのバージョニング状態を変更したりするリクエストに、2 つの認証形式を含めることが必要になります。

MFA Delete では、以下のいずれかの操作で追加の認証が必要になります。

  • バケットのバージョニング状態を変更する。
  • オブジェクトバージョンを完全に削除する。

また、MFA Delete を有効化できるのは、ルートアカウントのみです。

有効化する方法

AWS Management Console を使用して MFA Delete を有効にすることはできません。AWS Command Line Interface (AWS CLI) または API を使用する必要があります。なので、まず、ルートアカウントにMFAとアクセスキーを設定します。

MFA-Deleteを有効化するには、S3のバージョニングを有効化する必要があります。以下のコマンドを利用してS3バージョニングとMFA Delete を有効化します。

aws s3api put-bucket-versioning --bucket mfa-delete-test-s3 `
 --versioning-configuration Status=Enabled,MFADelete=Enabled `
 --mfa 'arn:aws:iam::XXXXXXXXXXXX:mfa/root-account-mfa-device XXXXXX' `
 --profile rootUserProfile

最後のXXXXXXはMFAデバイスの6桁のトークンコードで書き換えます。また、Windows Terminalを利用しているので複数行の改行は"`"を使っています。

MFA Deleteが有効になっているかどうかの確認は、以下のコマンドで確認できます。

aws s3api get-bucket-versioning --bucket mfa-delete-test-s3

うまくいけば、以下の状態が返却されるはずです。

これで、バージョンIDを指定してオブジェクトを削除すると、以下のエラーが発生します。

MFAトークンコードを指定してCLIからオブジェクトを削除可能です。

aws s3api delete-object --bucket mfa-delete-test-s3 --key testFile --version-id 8W1Wapt.839efMldwdPfuX__hiP1ohoG `
 --mfa 'arn:aws:iam::XXXXXXXXXXXX:mfa/root-account-mfa-device XXXXXX'

注意事項

MFA Deleteを有効化したら、セキュリティをさらに強化できますが、ライフサイクル設定で MFA 削除を使用することはできません。ライフサイクルルールが設定されているS3に対してMFA Deleteを有効化してみると、下記のエラーが出てきます。

S3のライフサイクルルールも良く利用されている機能だと思いますので、ライフサイクルルールが使用された場合、別の方法を考えてセキュリティを強化しましょう。

Last modified: 2022-07-24

Author