勉強前イメージ
S3の機能で、MFAで消せる的な?
調査
S3 MFA delete とは
s3のバージョニング機能のオプションで、
オブジェクトのバージョンを削除する際にMFAの数値の入力が必要になります。
また、以下のような制限があります。
- s3バケットがバージョニング設定が有効になっている必要がある
- 設定できるのはルートアカウントのみ(フル権限を持ったIAMユーザでも不可能)
- ルートアカウントに2段階認証の設定がされている必要がある
- AWS CLI または API で、設定可能。(マネジメントコンソールでは不可能)
- MFA DELETEが設定されている場合はバージョニング設定の無効化は不可能。
設定してみる
適当なバケットの作成
- バケットの作成
test-backet-202109 を作成しました。
バージョニングは有効にしておきます。
rootアカウントで設定を行う
- ログイン
rootアカウントでログインします。
アクセスキーの作成
- セキュリティ情報へ進む
マイセキュリティ資格情報
へ進みます
- アクセスキーの作成を行う
アクセスキーIDとシークレットアクセスキーをメモします。
MFA deleteの設定を行う
- AWS CloudShellを実行
上のバーから簡単にいけます。
- アカウントの認証情報を設定
先程取得した、アクセスキー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"
}
バージョニング設定
無効化出来ないことを確認
コンソールを確認するとすでに記載がありました。
削除
- 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アカウントからログアウト
勉強後イメージ
絶対消せないファイルとかだったらこれやってもいいかも