New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Amazon S3 バケットの MFA 削除を有効にするにはどうすればよいですか?
意図しない削除からオブジェクトを保護するために、Amazon Simple Storage Service (Amazon S3) バケットの多要素認証 (MFA) 削除を有効にしたいと考えています。
簡単な説明
Amazon S3 の MFA 削除を使用すると、誤ってオブジェクトを削除するのを防ぐことができます。MFA 削除が有効でない場合、次のいずれかを持つユーザーであれば、どなたでも Amazon S3 オブジェクトを完全に削除可能です:
- ルートユーザーのパスワード
- 十分な権限を持つ AWS Identity and Access Management (IAM) ユーザーまたはロールの認証情報
MFA 削除を有効にすると、ルートユーザーのみがオブジェクトのバージョンを完全に削除したり、S3 バケットのバージョニングの設定を変更することができます。この操作を実行するには、ルートユーザーは MFA デバイスで認証済みである必要があります。
**注:**MFA 削除は、バージョニングが有効になっているバケットでのみサポートされています。バケット所有者、バケットを作成した AWS アカウント、権限のあるすべての IAM ユーザーは、バージョニングを有効にすることができます。ただし、MFA 削除を有効にできるのはルートアカウントのバケット所有者のみです。
バケットの MFA 削除を有効にするには、次の手順を実行します:
- ルートユーザーのアクセスキーとシークレットキーを生成します。
- ルートユーザーの MFA 削除デバイスを有効にします。
- ルートユーザーの認証情報を使用して AWS コマンドラインインターフェイス (AWS CLI) を設定します。
- PutBucketVersioning API を使用して MFA 削除機能を有効にします。
- MFA 削除が機能しているかを確認します。ルートアクセスキーは必ず削除してください。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用しているかどうかを確認してください。
解決方法
ルートユーザーのアクセスキーとシークレットキーを生成する
「ルートユーザー用のアクセスキーを生成する」の手順に従ってください。
これらのキーを生成すると、「キーを表示またはダウンロードできるのは今回のみ」である旨の警告が表示されます。後でこれらのキーを取得することはできません。そのため、AWS CLI の設定用に必ず保存してください。
ルートユーザー用の MFA デバイスを有効化する
ルートユーザー用に有効化された MFA デバイスがない場合は、「AWS アカウントのルートユーザー用の仮想 MFA デバイスを有効にする (コンソール)」の指示に従ってください。
ルートユーザー用に有効化された MFA デバイスが既にある場合は、ARN を書き留めておいてください。
ルート認証情報を使用して AWS CLI を設定する
AWS CLI の configure コマンドを実行します。
- AWS アクセスキー ID (例: AKIAEXAMPLEABCQWE) の入力を求められたら、手順 1 でダウンロードしたルートユーザーのアクセスキー ID を貼り付けます。
- ルートユーザーの AWS シークレットアクセスキーの入力を求められたら、シークレットアクセスキー ID を貼り付けます。この情報は、ルートユーザーの認証情報を含むファイル内にあります。
- (オプション) デフォルトのリージョン名の入力を求められたら、スキップして Enter キーを押すことができます。
- (オプション) デフォルトの出力形式の入力を求められたら、スキップして Enter キーを押すことができます。
重要: AWS CLI で名前付きプロファイルを設定した場合は、ルートユーザーの認証情報用に別のプロファイルを作成する必要があります。
名前付きプロファイルを設定するには、次のコマンドを実行します:
aws configure --profile root_user
PutBucketVersioning API を使用して S3 の MFA 削除機能を有効にする
MFA 削除を有効にするには、put-bucket-versioning コマンドを実行します:
aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::(accountnumber):mfa/root-account-mfa-device (pass)"
例:
aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::1XXXXXXX6789:mfa/root-account-mfa-device 123789"
この例では、123789 は MFA デバイスで生成される 6 桁のサンプルコードです。
ルートユーザーに名前付きプロファイルを使用した場合は、次のコマンドを実行します:
aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::1XXXXXXX6789:mfa/root-account-mfa-device 123789" --profile root_user
コマンドが成功した場合、出力は表示されません。エラーが発生した場合は、最新バージョンの AWS CLI がインストールされているかを確認してください。また、ルートユーザーを使用していることと、MFA コードおよび ARN が有効であるかを確認してください。
MFA 削除が機能していることを確認する
Amazon S3 コンソールをチェックして、バケットのバージョニングが有効になっているかを確認します。
MFA 削除が有効になっていることを確認するには、GetBucketVersioning API を使用します:
aws s3api get-bucket-versioning --bucket mybucketname { "Status": "Enabled", "MFADelete": "Enabled" }
バケットの MFA 削除を有効にした場合、オブジェクトのバージョンを完全に削除するには、今後のすべてのオブジェクトの削除にリクエストヘッダーを含める必要があります。ヘッダーの値は、認証デバイスのシリアル番号、スペース、デバイスに表示される認証コードをつなげた値です。詳細については、「MFA削除可能なバケットからオブジェクトを削除する」を参照してください。delete-object コマンドで --mfa オプションを使用するとヘッダー値を含めることができます。
MFA なしでバケット内のオブジェクトのバージョンを削除しようとすると、次のエラーが表示されます。IAM ユーザーを使用してオブジェクトのバージョンを削除しようとした場合も、このエラーが表示されます:
aws s3api delete-object --bucket mybucketname --key myobjectkey --version-id 3HL4kqCxf3vjVBH40Nrjkd An error occurred (AccessDenied) when calling the DeleteObject operation: Mfa Authentication must be used for this request
MFA 削除が有効になっているバケット内のオブジェクトのバージョンをルートユーザーで削除するには、次のコマンドを実行します:
aws s3api delete-object --bucket mybucketnme --key myobjectkey --version-id 3HLkqCxf3vjVBH40Nrjkd --mfa "arn:aws:iam::(accountnumber):mfa/root-account-mfa-device (pass)" { "VersionId": "3HLkqCxf3vjVBH40Nrjkd" }
注: AWS アカウント内の s3: DeleteObject 権限を持つ IAM ユーザーまたはロールは、バージョン ID を指定しなくても、バケット内のオブジェクトに対して引き続き delete-object リクエストを正常に送信することができます。バージョニングが設定されたバケットでは、このリクエストを行うと削除マーカーが作成されます。オブジェクトの現在のバージョンは、前のバージョンとして残ります。これらのバケット内のオブジェクトを完全に削除する唯一の方法は、delete-object リクエストで対象のオブジェクトのバージョンのバージョン ID を指定することです。MFA 削除を有効にすると、ルートユーザーのみがバージョンを指定してバケット内のオブジェクトを削除することができます。また、ルートユーザーはルートユーザーの MFA デバイスでリクエストを認証する必要があります。
セキュリティ上のベストプラクティスとして、MFA 削除を有効にしたら、次の操作を行います:
- AWS CLI に保存されているルートユーザーの認証情報を無効にして削除します。AWS CLI の認証情報は、オペレーティングシステムの設定フォルダに保存されています。詳細については、「コンフィギュレーションとクレデンシャルファイルの設定」を参照してください。
- AWS マネジメントコンソールを使用してルートユーザーのアクセスキーを削除します。手順については、「ルートユーザーのアクセスキーを削除する」を参照してください。
関連情報

関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 6年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前