ちょっと話題の記事

S3オブジェクトのロック(なにをどうやっても改竄削除が不可)がリリースされました! #reinvent

S3オブジェクトの変更を強力に制限するオブジェクトロックの機能がリリースされました。
2018.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

S3では、昨日ごっつ凄そうなアップデートが発表されました。

それ以外にも11月26日で、S3のドキュメントヒストリーが5個更新されています(参考:Document History - Amazon Simple Storage Service)。

そんな進化を止めないS3ですが、新たにオブジェクトの変更・削除を完全に制限するオブジェクトロックの機能が発表されていたので、その機能を紹介いたします。

(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     S3オブジェクトロック マツリダワッショイ
    |_|_|
    し'´J

Amazon S3 オブジェクトロックの概要

ドキュメントはこちらを参照。

Amazon S3 オブジェクトロックは、いわゆる「Write Once Read Many」(WORM)モデルを提供します。一定期間もしくは無期限にS3オブジェクトが削除または上書きされるのを防ぐことができます。

S3 オブジェクトロックは、SEC 17a-4,CTCC,FINRA規制の対象となる環境で利用するため、Cohasset Associatesで評価されています(参考:Amazon Web Services (AWS) Simple Storage Service (S3): SEC 17a-4(f), FINRA 4511(c) and CFTC 1.31(c)-(d) Compliance Assessment by Cohasset Associates

S3 オブジェクトロックには、2つの保持管理方法があります。

retention periods(保持期間設定)

オブジェクトロックの期間を明示的に指定します。指定した期間中は、オブジェクトはWORMで保護されており、上書きや削除ができません。

legal holds(法定保留)

legal holdsに保持期間の有効期限はありません。明示的に削除されるまでlegal holdsは残ります。legal holdsはretention periodsと独立しており、両方の設定が必要となります。

制約事項

S3 オブジェクトロックは、バージョニングされたバケットでのみ利用でき、reteintion periodsとlegal holdsはそれぞれのオブジェクトバージョンに適用されます。オブジェクトロックを適用すると当該オブジェクトバージョンのみに適用され、新バージョン作成は防止できるわけではありません。

既存のロック済みオブジェクトと同じキー名をもつオブジェクトをアップロードした場合、S3は新バージョンを作成しバケットに格納します。既存の保護されたバージョンのオブジェクトは、ロックされたままとなります。

S3 オブジェクトロックしてみた

S3バケット作成時に、バージョニングとオブジェクトのロックの両方をチェックしておきます。注意点としては、この部分はバケット作成後に変更できないため、作成時に必ず指定しておく必要があります。

その後、バケットにオブジェクトをアップロード。プロパティから「Object lock」を選択し、「Enable Compliance mode」にチェックし「Retain until date」に有効期限を指定。

また、合わせて「legal hold」を「Enable」に設定します。

そうすると、「ほんまにやっちゃってもええんやな?」というフォームが表示されます。なにこれ怖い。

とりあえず言われたとおりにconfirmと入力すると、設定完了です。

オブジェクトロックはあくまで、特定のバージョンに対して機能するので、同一キーへのオブジェクトアップロード自体は普通に成功し、新しいバージョンが登録されます。

オブジェクトのバージョンを表示して、オブジェクトロック設定済みのバージョンを削除してみます。すると、特に何のメッセージも出ずに、指定したバージョンは削除されずに残ります。現状、特にエラーメッセージ的なものは表示されません。

aws cliから指定バージョンの削除を試してみました。オブジェクトロックされているバージョンのオブジェクトを削除しようとすると、Access Deniedと表示され、削除が拒否されます。

$ aws s3api delete-object --bucket hamako9999-object-lock --key hamako-lock.txt --version-id S8XZVkNxBds4ECTJkF4GM.24Us098LAL

An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied

オブジェクトロックを指定していないバージョンは、削除が可能です。

$ aws s3api delete-object --bucket hamako9999-object-lock --key hamako-lock.txt --version-id QMnh3QlpnZB231mq3I1dfb81v2p8tXLJ
{
    "DeleteMarker": true,
    "VersionId": "QMnh3QlpnZB231mq3I1dfb81v2p8tXLJ"
}

関連記事

ファイルを上書きした時の詳細は、こちらに記事をどうぞ。

S3 オブジェクトロック機能有効時にファイルを上書きしてみた #reinvent

間違って設定してしまった時のどうしようもなさも検証されています!

[小ネタ]S3オブジェクトロックを誤って設定したらどうなるのか?

他の参考ドキュメント

法的関連でのオブジェクト保持に対して強いガバナンスが求められるときに利用可能

S3オブジェクトに対して、その証拠を強いガバナンスで保証するために利用できるこの機能。従来のS3でもアクセスポリシーなどでそのアクセスを制限することはできていましたが、S3のオブジェクトレベルでその変更を制限する機能は、初めてかと思われます。

将来使い所があれば、積極的に顧客提案していこうと思います。

それでは、今日はこのへんで。濱田(@hamako9999)でした。