Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Amazon S3 バケットの MFA 削除を有効にするにはどうすればよいですか?
意図しない削除からオブジェクトを保護するために、Amazon Simple Storage Service (Amazon S3) バケットの多要素認証 (MFA) 削除を有効にしたいと考えています。
簡単な説明
MFA による削除を設定しない場合、次のアクセス許可を持つ任意のユーザーは、Amazon S3 オブジェクトを完全に削除することができます。
- ルートユーザーのパスワード
- 削除のアクセス許可を持つ AWS Identity and Access Management (IAM) ユーザーまたはロール認証情報
MFA による削除を設定すると、ルートユーザー以外は S3 バケットでオブジェクトのバージョンを完全に削除したり、バージョニング設定を変更したりできなくなります。削除アクションを実行するには、MFA デバイスを使用してルートユーザーを認証する必要があります。
バケットで MFA による削除を設定するには、次の手順を実行します:
- ルートユーザーのアクセスキーとシークレットキーを生成します。
- ルートユーザー用の MFA デバイスを有効化します。
- ルートユーザーの認証情報を使用して AWS CLI を設定します。
- MFA による削除を設定します。
- MFA による削除が機能していることを確認してから、root のアクセスキーを削除します。
MFA による削除は、S3 バージョニングを有効にしたバケットでのみ使用できます。バージョニングは、バケット所有者、バケットを作成した AWS アカウント、アクセス許可を持つすべての IAM ユーザーが有効化できます。ただし、ルートユーザーアカウントのみが MFA による削除を有効にできます。MFA による削除を有効にするには、AWS CLI または Amazon S3 REST API を使用する必要があります。
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
解決策
ルートユーザーのアクセスキーとシークレットキーを生成する
まず、ルートユーザーのアクセスキーを作成します。これらのキーは、作成後すぐにダウンロードして保存する必要があります。後でこれらのキーを取得することはできません。
ルートユーザー用の MFA デバイスを有効化する
ルートユーザーの MFA デバイスを有効化済みではない場合は、「ルートユーザー用の仮想 MFA デバイスを有効化する (コンソール)」を参照してください。ルートユーザーの MFA デバイスを有効化済みの場合は、その ARN を書き留めておきます。
ルートユーザーの認証情報を使用して AWS CLI を設定する
次の手順を実行します。
- AWS CLI の configure コマンドを実行します。
- [AWS アクセスキー ID] に ルートユーザーのアクセスキー ID を入力します (例: AKIAEXAMPLEABCQWE)。
- ルートユーザーの [AWS シークレットアクセスキー] にシークレットアクセスキー ID を入力します。シークレットアクセスキーは、ルートユーザーの認証情報を含むファイルにあります。
- (オプション) [デフォルトリージョン名] にデフォルトの AWS リージョンを入力します。
- (オプション) [デフォルト出力形式] に出力形式を入力します。
重要: AWS CLI で名前付きプロファイルを設定した場合は、ルートユーザーの認証情報用に別のプロファイルを作成する必要があります。名前付きプロファイルを設定するには、次の configure コマンドを実行します。
aws configure --profile root_user
S3 で MFA による削除を有効にする
MFA による削除を有効にするには、put-bucket-versioning コマンドを実行します。
aws s3api put-bucket-versioning --bucket mybucketname --versioning-configuration MFADelete=Enabled,Status=Enabled --mfa "arn:aws:iam::1XXXXXXX6789:mfa/root-account-mfa-device 123789"
注: 上記のコマンド内で、1XXXXXXX6789 を実際のアカウント ID に、123789 を MFA デバイスで生成したシリアルナンバーに置き換えます。
ルートユーザーに名前付きプロファイルを使用する場合は、次の put-bucket-versioning コマンドを実行します。
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
コマンドが成功した場合、出力は表示されません。エラーを含む出力が表示された場合は、使用しているユーザーが root であり、ARN と MFA のシリアル番号が有効であることを確認してください。
PutBucketVersioning API を呼び出して MFA による削除を有効にすることもできます。
注: MFA による削除はライフサイクル設定とは併用できません。バケットにライフサイクル設定を設定してある場合、上記の put-bucket-versioning コマンドを実行すると、次のエラーが表示されます。
"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 による削除が機能していることを確認する
まず、S3 バージョニングが有効になっていることを確認します。Amazon S3 コンソールまたは次の GetBucketVersioning API を使用します。
aws s3api get-bucket-versioning --bucket mybucketname
出力例
{ "Status": "Enabled", "MFADelete": "Enabled" }
オブジェクトのバージョンを完全に削除するには、リクエストヘッダー x-amz-mfa を含める必要があります。delete-object コマンドで --mfa オプションを使用することで、ヘッダー値を指定できます。ヘッダーの値は、認証デバイスのシリアルナンバー、スペース、認証コードをつなげた値です。詳細については、「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 による削除が有効なバケット内のオブジェクトのバージョンをルートユーザーで削除するには、次の delete-object コマンドを実行します。
aws s3api delete-object --bucket mybucketname --key myobjectkey --version-id 3HLkqCxf3vjVBH40Nrjkd --mfa "arn:aws:iam::(accountnumber):mfa/root-account-mfa-device (pass)" { "VersionId": "3HLkqCxf3vjVBH40Nrjkd" }
注: アカウントの IAM ユーザーまたはロールがバージョン ID を指定せずに delete-object リクエストを行えるようにするには、s3:DeleteObject アクセス許可を付与します。バージョニングが有効なバケットでは、delete-object リクエストでは削除マーカーのみが作成されます。オブジェクトのバージョンは完全に削除されません。オブジェクトを完全に削除するには、オブジェクトのバージョン ID を指定する必要があります。
MFA による削除を有効にした後、セキュリティ上のベストプラクティスとして次の手順を実行します。
- お使いのオペレーティングシステム (OS) で、AWS CLI の設定ファイルと認証情報ファイルに保存したルートユーザー認証情報を無効化し、削除します。
- AWS マネジメントコンソールを使用して ルートユーザーのアクセスキーを削除します。
関連するコンテンツ
- 質問済み 2年前
