本記事は
AWSアワード記念!夏のアドベントカレンダー
6日目の記事です。
🎆🏆
5日目
▶▶ 本記事 ▶▶
7日目
🏆🎆
こんにちは。黒木です。
「AWSの資格いくつ持ってるの?」 「全部持ってます」 って答えられるようになりたかったですが、新たな認定試験がいくつか増えたことでまだ先になりそうです。٩( ᐛ )وガンバルゾー
さて今回はS3のMFA Deleteの有効化と無効化を検証をした時、少しつまづいたポイントがありましたので備忘をかねて書きたいと思います。
要約
2024年7月現在、こちらのドキュメントを見ると以下の通りです。
- MFA Deleteはルートアカウントからしか有効化できない。
- AWS CLIまたはAPIからしか操作できない。
- ライフサイクルポリシーと併用はできない。
事前準備
今回の検証に必要なものは以下になります。
対象のS3バケット
- バケットの作成方法は省きます。
MFAデバイス
- 今回はGoogle Authenticatorを使います。
ルートアカウントへのログイン手段
MFA Deleteの有効化
ルートアカウントにログインし、登録しているMFAデバイスの識別子を確認します。セキュリティ認証情報へ移動しMFAの識別子をメモします。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/y/y2-kuroki/20230922/20230922195956.png)
今のところコンソール画面からは有効化の実行ができないので、今回はCloudShellを開きます。
有効化するためのコマンドは以下になります。
aws s3api put-bucket-versioning --bucket <対象のS3バケットの名前> --versioning-configuration Status=Suspended,MFADelete=Enabled --mfa "<MFAの識別子> <ワンタイムパスワード>"
上記を実行すればMFA Deleteは有効化されます。有効化されたかの確認は以下のコマンドで確認します。
aws s3api get-bucket-versioning --bucket <対象のS3バケットの名前>
![](https://cdn-ak.f.st-hatena.com/images/fotolife/y/y2-kuroki/20230922/20230922200043.png)
MFA DeleteがEnabledになってるので有効ですね。
また、MFA Deleteの設定状況はコンソール上でも確認することができます。対象のS3バケットのプロパティタブへ移動し、バケットのバージョニング欄の「Multi-Factor Authentication (MFA) の削除」が有効となっていれば設定できたことが確認できます。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/y/y2-kuroki/20230922/20230922200255.png)
編集のボタンがありますが、2024年7月現在ではバージョニングのように編集はできないです。いつかここにラジオボタンが追加されることを期待します。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/y/y2-kuroki/20231208/20231208142504.png)
有効化の手順は以上ですが、検証中いくつかつまづいたので、その時のエラーと解決策を記します。
つまづきポイント1
An error occurred (InvalidRequest) when calling the PutBucketVersioning operation: DevPay and Mfa are mutually exclusive authorization methods.
上記エラーはルートアカウントで実行しないとダメという意味です。はじめはどのユーザーでも実行できると思っていたのでドキュメントをよく読むことは重要だと痛感しました。
つまづきポイント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と同時にバケットのバージョニングも有効化しておいた方がより安全性が高まりますので両方やっておくとよさそうです。