NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

S3のMFA Deleteの有効・無効化の方法

本記事は  AWSアワード記念!夏のアドベントカレンダー  6日目の記事です。
🎆🏆  5日目  â–¶â–¶ æœ¬è¨˜äº‹ â–¶â–¶  7日目  ðŸ†ðŸŽ†

こんにちは。黒木です。

「AWSの資格いくつ持ってるの?」 「全部持ってます」 って答えられるようになりたかったですが、新たな認定試験がいくつか増えたことでまだ先になりそうです。٩( ᐛ )وガンバルゾー

さて今回はS3のMFA Deleteの有効化と無効化を検証をした時、少しつまづいたポイントがありましたので備忘をかねて書きたいと思います。

要約

2024年7月現在、こちらのドキュメントを見ると以下の通りです。

  • MFA Deleteはルートアカウントからしか有効化できない。
  • AWS CLIまたはAPIからしか操作できない。
  • ライフサイクルポリシーと併用はできない。

事前準備

今回の検証に必要なものは以下になります。

  • 対象のS3バケット

    • バケットの作成方法は省きます。
  • MFAデバイス

    • 今回はGoogle Authenticatorを使います。
  • ルートアカウントへのログイン手段

MFA Deleteの有効化

ルートアカウントにログインし、登録しているMFAデバイスの識別子を確認します。セキュリティ認証情報へ移動しMFAの識別子をメモします。

MFA識別子の確認

今のところコンソール画面からは有効化の実行ができないので、今回はCloudShellを開きます。

有効化するためのコマンドは以下になります。(以下のコマンドを実行するとバージョニングが無効化、MFADeleteが有効化されます)

aws s3api put-bucket-versioning --bucket <対象のS3バケットの名前> --versioning-configuration Status=Suspended,MFADelete=Enabled --mfa "<MFAの識別子> <ワンタイムパスワード>"

StatusとMFADeleteのパラメータの間はスペースを空けずにカンマで繋げて記載してください。

上記を実行すればMFA Deleteは有効化されます。有効化されたかの確認は以下のコマンドで確認します。

aws s3api get-bucket-versioning --bucket <対象のS3バケットの名前>

CLIで確認

MFA DeleteがEnabledになってるので有効ですね。

また、MFA Deleteの設定状況はコンソール上でも確認することができます。対象のS3バケットのプロパティタブへ移動し、バケットのバージョニング欄の「Multi-Factor Authentication (MFA) の削除」が有効となっていれば設定できたことが確認できます。

S3のコンソール上から確認

編集のボタンがありますが、2024年7月現在ではバージョニングのように編集はできないです。いつかここにラジオボタンが追加されることを期待します。

編集ボタンを押しても編集できない!

有効化の手順は以上ですが、検証中いくつかつまづいたので、その時のエラーと解決策を記します。

つまづきポイント1

An error occurred (InvalidRequest) when calling the PutBucketVersioning operation: DevPay and Mfa are mutually exclusive authorization methods.

上記エラーはルートアカウントで実行しないとダメという意味です。はじめはどのユーザーでも実行できると思っていたのでドキュメントをよく読むことは重要だと痛感しました。 ルートアカウントのCloudShellで実行する場合はアクセスキーを発行してaws configureを実行してルート認証をする必要があります。また、アクセスキーはMFA Deleteの作業が完了したら必ず削除しましょう。

つまづきポイント2

An error occurred (InvalidBucketState) when calling the PutBucketVersioning operation: Mfa Authentication is not supported on a bucket with lifecycle configuration. Delete lifecycle configuration before enabling Mfa Authentication.

上記のエラーはライフサイクルポリシーを設定しているためMFA Deleteを設定できないというものです。実はMFA Deleteとライフサイクルポリシーを同時に設定することはできません。たしかに言われてみればライフサイクルポリシーは期限が来たら自動でオブジェクトを削除する設定ではあるものの、MFAで保護されていたらポリシーでは削除できないですね。

検証時のS3バケットにはライフサイクルポリシーが設定されていたため、これを削除して再度実行し無事に設定できました。

MFA Deleteの無効化

今度は無効化ですが、これは有効化の時に使ったコマンドのパラメータ値を変えるだけです。

aws s3api put-bucket-versioning --bucket <対象のS3バケットの名前> --versioning-configuration Status=Suspended,MFADelete=Disabled --mfa "<MFAの識別子> <ワンタイムパスワード>"

versioning-configurationはバケットのバージョニングとMFA Deleteについての設定をするパラメータです。Statusがバージョニングで、MFADeleteがMFA Deleteです(そのままですね)。

無効化時のパラメータ値がそれぞれ異なることにも注意してください。

MFADelete Status
有効化 Enabled Enabled
無効化 Disabled Suspended

MFA Deleteの有効・無効化については以上になります。

おわりに

今回はMFA Deleteの有効・無効化の検証でした。

MFA Deleteと同時にバケットのバージョニングも有効化しておいた方がより安全性が高まりますので両方やっておくとよさそうです。