こんにちは!クラウドインテグレーション部技術1課のイーゴリです。
本件の記事では、S3バケットのオブジェクトロックを設定してみましたので、ご紹介させて頂きます。
S3オブジェクトロックとは
簡単に説明しますと、S3のオブジェクトロックとは、S3内にある対象のオブジェクトが絶対に削除されないようにするための保護機能となります。ロックする期間を設定することができます。
AWSページに下記の説明が書いてあります。
S3 オブジェクトロックでは、Write Once Read Many (WORM) モデルを使用してオブジェクトを保存できます。オブジェクトロックにより、オブジェクトが削除または上書きされることを、一定期間または無期限に防止できます。S3 オブジェクトロックを使用して、WORM ストレージを必要とする規制要件を満たしたり、オブジェクトの変更や削除に対する保護レイヤーを追加したりできます。
S3バケットのオブジェクトロックの設定
新規のS3バケットを作成する場合
[サービス]>[S3]>[バケット]>[バケットを作成]をクリックします。
[バケット名]でS3名を入力します。
今回は東京リージョンでS3を作成したいため、[AWS リージョン]で[アジアパシフィック (東京) ap-northeast-1]を選択します。
[このバケットのブロックパブリックアクセス設定]で、パブリックアクセスが必要ない場合、そのまま[パブリックアクセスをすべて ブロック]にチェックを残します。
オブジェクトロックまでの設定は省きます。
オブジェクトロックを有効化するには、[▶詳細設定]をクリックします。
[オブジェクトロック]で[有効にする]を選択し、[オブジェクトロックを有効にすると、このバケット内のオブジェクトが永続的にロックされることを了承します。]をチェックしてから、[バケットを作成]をクリックします。
■ 注意点:S3バケットの作成時に、上記のオブジェクトロックの有効化を設定しないと、下記の「既存のS3バケットでオブジェクトロックを有効化にしたい場合」の通り、サポートにケースを起票しないといけなくなるので、ご注意ください。
既存のS3バケットでオブジェクトロックを有効にする場合
2022/2の時点で既存のS3バケットでオブジェクトロックを有効にしたい場合、[サービス]>[S3]>[バケット]で対象のS3のプロパティに入りますと、[オブジェクトロック]で[編集]ボタンを押せなくなり、[編集]ボタンの下に下記のメッセージが表示されます。
Amazon S3 は現在、バケット作成後のオブジェクトロックの有効化をサポートしていません。このバケットのオブジェクトロックを有効にするには、カスタマーサポートに連絡してください
自分では既存のS3バケットのオブジェクトロック設定を有効化できないため、上記のメッセージの通り、サポートに連絡し、トークンの発行依頼のためのケースを起票します。もらったトークンをCLIコマンドで対象S3に適用します。
■ 注意点:既存のS3バケットのオブジェクトロックを有効化しても、既存のオブジェクトに関してはオブジェクトロックされません。
オブジェクトロックの設定
上記のS3バケットの設定を行ってもオブジェクトロックの設定は完了していませんので、ご注意ください。
試しにこの時点で、オブジェクトを削除してみるとまだ削除することができます。
まだオブジェクトロックされていませんが、S3バケットの作成時にオブジェクトロックを有効にする場合、バケットのバケットバージョニングが自動的に有効化されているため、下記のように削除したファイルを復元することができますが、まだ保持期間が設定されていないため、どのバージョンも削除可能となります。
対象S3バケットで[バージョンの表示]をクリックすると、下記の画像のように、削除されたオブジェクトが表示されるので、対象のオブジェクトを復元することができます。
オブジェクトロックの対象
オブジェクトロックの設定を完了するために、下記の2つの方法があります。
下記の2つの方法は合わせて使えますし、どちらかを選択することも可能です。
バケットのデフォルトオブジェクトロック
バケットのデフォルトの保持期間→オブジェクトをアップロードする時にデフォルトでオブジェクトロックの保持期間が適用されます。例えば、デフォルトの保持期間を30日間に設定する場合、オブジェクトをアップロードしたら、オブジェクト保持期間が30日間となります。
デフォルトの保持期間の数値を上げることも下げることもできますが、アップロードされた時点からデフォルトの保持期間が適用されますので、ご注意ください。
オブジェクト単位のオブジェクトロック
バケット内のオブジェクト単位の保持期間→アップロードされたオブジェクト保持期間を個別に設定します。例えば、アップロードされたオブジェクトAを3/20までにロックしたい場合、個別に3/20日までのロックを設定することができます。
コンプライアンスモードの場合、例えば、オブジェクトの保持期間を3/20に設定しますと、日付を上げることはできますが(3/20から3/21移行に変更)、下げることができません(3/20から3/19以下に変更)ので、ご注意ください。→コンプライアンスモードの場合、保持期間が切れるまでオブジェクトを削除できません!
バケットのデフォルトの保持期間を設定する場合
[サービス]>[S3]>[バケット]>対象S3バケットをクリックし、[プロパティ]をクリックします。
[オブジェクトロック]で[編集]をクリックします。
[オブジェクトロックを編集]の画面で[デフォルトの保持期間]の[有効にする]を選択します。
[デフォルトの保持モード]で要件に応じて適切なモードを選択します。私の場合、[コンプライアンスモード]を選択し、[デフォルトの保持期間]を選択します。
※デフォルトの保持モードについて、下記の画像に書いてある通りですので、ご参考ください。
[変更の保存]をクリックします。
バケットのデフォルトの保持期間を日、もしくは年の単位で設定することができます。今回は3日に設定します。
上記の設定を行った後にアップロードされたオブジェクトを削除してみますと、ファイルの削除自体が可能ですが、保持期間が設定されているバージョンの一覧から削除してみますと、
オブジェクトの削除ができませんので、下記のエラーが発生します。
今回は保持期間を3日に設定したので、3日経たないと、アップロードされたオブジェクトの削除ができません。
バケット内のオブジェクト単位の保持期間を設定する場合
バケット内の対象S3オブジェクトをクリックします。
[プロパティ]をクリックし、[オブジェクトロック]で[編集]をクリックします。
[オブジェクトロックを編集]の画面で[デフォルトの保持期間]の[有効にする]を選択します。
保持モード
保持期間の設定時に、2つある保持モードから1つを選択しないといけません。
コンプライアンスモード
コンプライアンスモードは、保持期間中はどのユーザーも、保護されたオブジェクトバージョンを上書きまたは削除することはできませんので、ご注意ください。
一度設定が完了した場合、保持期間が切れる前にオブジェクトを削除するには、それらのオブジェクトが関連付けられている AWS アカウントを閉じる必要があります。
ガバナンスモード
ガバナンスモードは、特定の IAM アクセス許可を持つユーザーは、保持期間中に、保護されたオブジェクトを上書きまたは削除することができます。
一度設定が完了した場合、保持期間が切れる前にオブジェクトを削除するには、ガバナンスモードを無効にする必要があります。
注意事項
・有効化したオブジェクトロックは無効にすることが出来ません。
Amazon S3 オブジェクトロックを有効にすると、オブジェクトロックを無効にしたり、バケットのバケットバージョニングを停止したりすることはできません。
但し、[デフォルトの保持期間]を無効にすることができます(デフォルトの保持期間を設定した場合)。
・オブジェクトロックを有効にすると、バージョニング(バージョニングの料金を参照)も自動的に有効化になりますので、ご注意ください(無効化できません)。
以上、御一読ありがとうございました。