8
3
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

AWS S3「私とデータベース、どっちが大事なの!」(CDKでS3のバージョニングとオブジェクトロックを実装)

Posted at

はじめに

データベースは慎重に設計するのに、S3はデフォルトの設定に任せていませんか。

ただのログファイルだったり、ドキュメント管理程度に使用しているなら全く問題ないですが、システムに組み込まれた重要なバケットであるにも関わらず何も意識せず実装していたということが私自身ありました。
今回はS3を守るために設定したい二つの機能と、それをCDKで実装する方法について調査した内容をまとめました。

バックアップの機能を果たす「バージョニング」

S3のバージョニング機能を用いると、オブジェクトに自動的にバージョンを付与してくれます。
これによって万が一オブジェクトを削除してしまってもバージョンを指定して復元することができるようです。

詳しくはこちら
【図解あり】Amazon S3バージョニング機能を用いる理由

CDKで実装

→公式ドキュメントから参照

import { RemovalPolicy } from 'aws-cdk-lib';

new s3.Bucket(scope, 'Bucket', {
  // ...省略
  versioned: true, // バージョニングを有効化
});

S3オブジェクトを守る「オブジェクトロック」

S3オブジェクトロックを用いると、バケット内のオブジェクトを上書きしたり削除したりする操作を不可能にすることができます。このロックを突破する条件は設定するモードによって選ぶことができます。

リテンションモード

ロックする期限を設けて、期限が来ると解除されます。
リテンションモードはさらに「ガバナンスモード」と「コンプライアンスモード」という二つのモードに分けられます。
ガバナンスモードでは特別な権限を持つロールを使用すればロックを突破できます。
コンプライアンスモードではいかなる権限を持っていてもロックを解除できず、期限が来るのを待つしかありません。

リーガルホールド

無期限でロックされます。
ロックを突破するには特別な権限が必要です。

こちらを参考
AWS S3のオブジェクトロックの機能

CDKで実装

複数のモードがあるということでしたが、リーガルホールドは公式のCDKドキュメントで見つからなかったのでガバナンスモードのやり方のみ掲載します。(リーガルホールドもし見つけたら教えてください。)

→公式ドキュメントから参照

// ガバナンスモード
new s3.Bucket(this, 'Bucket1', {
  objectLockDefaultRetention: s3.ObjectLockRetention.governance(Duration.days(7 * 365)),
  // 有効期限は7年
});

// コンプライアンスモード
new s3.Bucket(this, 'Bucket2', {
  objectLockDefaultRetention: s3.ObjectLockRetention.compliance(Duration.days(365)),
  // 有効期限は1年
});

結論

「そんなこと言わせてごめんね」

8
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
8
3