オブジェクトロックとは
AWSさんが書いてるので詳しくはこちらを見てください
簡潔に言うとS3のオブジェクトが削除されたり改ざんされることを、一定期間または無期限に防ぐやつ
バケット作成時に同時に設定することは普通に可能ですが、
既存S3のオブジェクトロック有効化はAWSへ問い合わせ必須になります><
前提
すでにS3バケットとオブジェクトが存在している
監査に使うかもしれないログなので削除できない
バージョニングは設定済
やってみる
①準備
オブジェクトロック有効化するにはバージョニングの有効化が必要らしい。これはすでに設定してたので大丈夫そう。
バケット名をメモしとく。
②AWSにお問いあわせしてみる
こんな感じ
お世話になっております。
既存のバケット(<ばけっとめい>)のオブジェクトロックを有効化したく、ご連絡いたしました。
すでにこちらのバケットはバージョニングを有効にしております。
そのほか事前に対応すべきことがございましたら、ご教示いただけますと幸いです。
バケット名: <ばけっとめい>
返答があった!
要約すると
オブジェクトロックを有効化すると無効にする手段がないですが大丈夫ですか?(もし無効化したければ再作成になる)
バージョニングを停止できないですが大丈夫ですか?
大丈夫ですと返答したら該当S3のオブジェクトロック有効化専用のトークンが届きました! (超長い)
③設定してみる
やりたいこととしては以下の通り
①オブジェクトロック有効化
②コンプライアンスモードに設定 ※これはケースバイケースなのでガバナンスモードなのかコンプライアンスモードなのかはしっかり公式ドキュメントを読んで決めてね☆
③保管期間は1年半
うきうきとCLIを実行してみる
-
1回目Try
認証ではじかれる・・・え・・・
お問い合わせしたら認証情報が適切に設定されているかご確認いただけますかとのこと・・・
tokenで一発でできないんかーい!
ってことでAWSコンソールからユーザーのアクセスキー情報を発行しローカルにaws configの設定を追加 -
2回目Try
認証ではじかれる
やっべMFAの設定入れてたの忘れてたわ・・・ってことでaws-mfaを追加
※アクセス時にMFA必須とするIAM制御を入れているため -
3回目Try
CLIで一気に設定できるかなって以下の通り実施してみた
aws s3api put-object-lock-configuration --bucket <ばけっとめい> --token <とーくん> --object-lock-configuration '{"ObjectLockEnabled":"Enabled", "Rule":{"DefaultRetention":{"Mode":"COMPLIANCE", "Days":540}}}'
すると
Unknown options
とか言われてできなかった・・・まじか・・・ -
4回目Try
有効化以外の設定値をはずして以下の通り実行したらできた!
aws s3api put-object-lock-configuration --bucket <ばけっとめい> --token <とーくん> --object-lock-configuration ObjectLockEnabled=Enabled
期間設定、モード設定はAWSコンソールから別途実施
まとめ
- 権限を持ってるユーザーでアクセスキー発行しaws configを設定
- aws-mfaで一時セッションを有効化
- (一応)aws s3 ls で権限があることを確認(MFA通ってなければはじかれる)
- 以下記載のコマンドを実行
aws s3api put-object-lock-configuration --bucket <ばけっとめい> --token <とーくん> --object-lock-configuration ObjectLockEnabled=Enabled
- AWS コンソールから期間設定、モード設定を変更
って感じで既存バケットにオブジェクトロック有効化するのに微妙にめんどくさかったです・・・
最初から必要だってわかってたらバケット作成時にやっておくとよいです
どなたか同じように躓いてる方のヒントになれば幸いです(´・ω・`)