4
3

More than 3 years have passed since last update.

S3 MFA delete とは

Posted at

勉強前イメージ

S3の機能で、MFAで消せる的な?

調査

S3 MFA delete とは

s3のバージョニング機能のオプションで、
オブジェクトのバージョンを削除する際にMFAの数値の入力が必要になります。

また、以下のような制限があります。

  • s3バケットがバージョニング設定が有効になっている必要がある
  • 設定できるのはルートアカウントのみ(フル権限を持ったIAMユーザでも不可能)
  • ルートアカウントに2段階認証の設定がされている必要がある
  • AWS CLI または API で、設定可能。(マネジメントコンソールでは不可能)
  • MFA DELETEが設定されている場合はバージョニング設定の無効化は不可能。

設定してみる

適当なバケットの作成

  • バケットの作成

test-backet-202109 を作成しました。
バージョニングは有効にしておきます。

2021-09-011S3 Management Console - Google Chrome 2021-09-01 2.png

rootアカウントで設定を行う

  • ログイン

rootアカウントでログインします。

アクセスキーの作成

  • セキュリティ情報へ進む

マイセキュリティ資格情報 へ進みます

2021-09-022IAM Management Console - Google Chrome 2021-09-02.png

  • アクセスキーの作成を行う

アクセスキーIDとシークレットアクセスキーをメモします。

2021-09-023IAM Management Console - Google Chrome 2021-09-02.png

MFA deleteの設定を行う

  • AWS CloudShellを実行

上のバーから簡単にいけます。

2021-09-024S3 Management Console - Google Chrome 2021-09-02 0.png

  • アカウントの認証情報を設定

先程取得した、アクセスキーIDとシークレットアクセスキーを記載し実行します。

export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_ACCESS_KEY_ID=[アクセスキーID]
export AWS_SECRET_ACCESS_KEY=[シークレットアクセスキー]
  • MFA有効化前に確認

aws s3api get-bucket-versioning --bucket [バケット名] で現在の状況を確認できます。
Enabledになってるのは、バージョニング設定です。

aws s3api get-bucket-versioning --bucket test-backet-202109
{
    "Status": "Enabled"
}
  • MFA有効化を行う
aws s3api put-bucket-versioning --bucket test-backet-202109[バケット名] \
  --versioning-configuration MFADelete=Enabled,Status=Enabled \
  --mfa 'arn:aws:iam::XXXXXXXXXXXX[アカウントID]:mfa/root-account-mfa-device XXXXXX[MFAの数値]'
  • MFA有効化後に確認

MFADeleteが追加されました。

aws s3api get-bucket-versioning --bucket test-backet-202109
{
    "Status": "Enabled",
    "MFADelete": "Enabled"
}

MFA DELETE設定を確認

  • てきとうなファイルをアップしました

test-s3.txt ファイルです。

aws s3api list-object-versions \
--bucket test-backet-202109 \
--prefix test-s3.txt \
--query "Versions[].Key"
[
    "test-s3.txt"
]
  • 消してみます

あれ?MFA聞かれずに消せちゃいました・・・

aws s3 rm s3://test-backet-202109/test-s3.txt
delete: s3://test-backet-202109/test-s3.txt
  • 確認

削除フラグがついてただけで、実際は消えてないようでした。

aws s3api list-object-versions \
--bucket test-backet-202109 \
--prefix test-s3.txt \
--query "DeleteMarkers[].Key"
[
    "test-s3.txt"
]
  • 実体も消す

vertionIDをしてしないといけないため、確認

aws s3api list-object-versions \
--bucket test-backet-202109 \
--key test-s3.txt \
--query "DeleteMarkers[].VersionId"
[
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
]

vertionIDをしてして削除。
MFA DELETE設定が有効になってるので、意図通りエラーになりました。

aws s3api delete-object \
--bucket test-backet-202109 \
--key test-s3.txt \
--version-id XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

An error occurred (AccessDenied) when calling the DeleteObject operation: Mfa Authentication must be used for this request

以下でMFAを追加し、消えます。

aws s3api delete-object \
--bucket test-backet-202109 \
--key test-s3.txt \
--version-id XXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
--mfa 'arn:aws:iam::XXXXXXXXXXXX:mfa/root-account-mfa-device 580229'
{
    "VersionId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

バージョニング設定

無効化出来ないことを確認
コンソールを確認するとすでに記載がありました。

2021-09-0210test-backet-202109 - S3 bucket - Google Chrome 202.png

削除

  • MFA DELETE設定を削除
aws s3api put-bucket-versioning --bucket test-backet-202109[バケット名] \
  --versioning-configuration MFADelete=Disabled,Status=Enabled \
  --mfa 'arn:aws:iam::XXXXXXXXXXXX[アカウントID]:mfa/root-account-mfa-device XXXXXX[MFAの数値]'
  • バケットの削除

  • ルートアカウントでのアクセスキー無効化 → 削除

  • rootアカウントからログアウト

勉強後イメージ

絶対消せないファイルとかだったらこれやってもいいかも

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3