新しい会話を開始

未解決

35 メッセージ

736

2021年9月26日 19:00

ECS解説第13回 新機能 S3 Object Lock のサポートについて(後編)

皆さん、こんにちは。
前回(第12回)は新機能 S3 Object Lock のサポートについてご紹介し、Object Lock機能の設定とObject Lock リテンション期間の機能について動作をご紹介してきました。今回は後編としてLegal Hold機能について設定と動作をご紹介し、最後にObject Lockの機能詳細・制約事項について触れたいと思います。

前回も記載しましたが、S3に書き込まれたオブジェクトに適用されるWORM(Write Once, Read Many)機能です。リテンション期間の設定により指定された期間内に対象のオブジェクトの削除や上書き等を行わせないようにする改ざん防止機能になります。

今回取り上げるLegal Hold機能はリテンション期間の設定とは独立した機能で、Legal Hold機能を有効にしていると(ON)、リテンション期間が過ぎてもWORM機能を有効になります。リテンション期間、つまり改ざん防止期間が過ぎても、Legal HoldがONを指定されていると、対象のオブジェクトが削除されるのを防止することができます。削除したい場合、Legal HoldをOFFに指定したのちに削除をします。リテンション期間経過後にLifecycleによって対象オブジェクトの自動削除や、機械的にバルク処理で誤って削除されないようにする意図をされた機能であろうと推察されます。この辺は運用面からいろいろとご要望がある点だろうと思います。

S3 Object Lockがあくまでもオブジェクト単位にリテンション期間やモードを指定することから、個々のオブジェクトファイルごとに意図をした削除となるよう、データ管理者・データーオーナーに削除の許可を求めるプロセスを強制するための機能がLegal Holdと推察します。いわゆるフェイルセーフ機能ですが、オブジェクトの削除・修正にあたってLegal Hold機能を運用できる資格を持った管理ユーザーに削除の許可を申請し、Legal Hold指定の解除を待つ必要があるということになります。

ここでLegal Holdの動作についても簡単に確認しておきます。機能を利用するためには次のコマンドでLegal Holdをイネーブル(StatusをON)にします。

>aws s3api put-object-legal-hold --key testdata.txt --version-id 1631175946554 --legal-hold Status=ON --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020

>aws s3api get-object-legal-hold --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020
{
    "LegalHold": {
      "Status": "ON"
    }
}

リテンション期間内なので削除はできないことを確認します。

>aws s3api delete-object --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020

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

24時間経過後、まずはステータスに変更がないか確認します。

>date /t
2021/09/10

>time /t
18:22

日時は9/10 18:22 +9H, つまり9/10 9:22 +0Hなので、下記のリテンションのRetainUntilDateを見ると、その日時を過ぎています。

>aws s3api get-object-retention --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020
{
    "Retention": {
      "Mode": "COMPLIANCE",
      "RetainUntilDate": "2021-09-10T08:25:50.190000+00:00"
    }
}

>aws s3api get-object-legal-hold --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020
{
    "LegalHold": {
      "Status": "ON"
    }
}

Legal-holdがONになっている状況で削除から保護されているかを確認します。

>aws s3api delete-object --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020

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

削除できないので、Legal-status のステータスをOFFに変更しました。

>aws s3api put-object-legal-hold --key testdata.txt --version-id 1631175946554 --legal-hold Status=OFF --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020

>aws s3api get-object-legal-hold --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020
{
    "LegalHold": {
      "Status": "OFF"
    }
}

この状況で削除を試みると成功しました。

>aws s3api delete-object --key testdata.txt --version-id 1631175946554 --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020
{
    "VersionId": "1631175946554"
}

>aws s3api list-object-versions --bucket bucketobjlck1 --endpoint-url http://10.119.81.91:9020
{
"Versions": [
    {
      "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
      "Size": 0,
      "StorageClass": "STANDARD",
      "Key": "testdata.txt",
      "VersionId": "1631101748380",
      "IsLatest": true,
      "LastModified": "2021-09-08T11:49:08.380000+00:00",
      "Owner": {
          "DisplayName": "urn:ecs:iam::ns1:root",
          "ID": "urn:ecs:iam::ns1:root"
      }
    }
]
}

削除対象のVersion-ID 1631175946554がリスト上にないので削除されたことが確認できました。

ここまで、S3 Object Lockの機能の一つであるLegal Hold機能について動作をご紹介してきました。S3 Object Lock機能は前回の冒頭に持のご紹介したようにIAMユーザーの作成したバケットでのみ有効な機能ですが、リテンション期間の設定や管理、Legal Hold機能の管理のための権限を適切に付与し、オブジェクトを書きこみ、また削除するユーザーとも分離するなどIAMのポリシー管理も考慮が必要な機能とも言えます。

Object Lockの機能を設定するIAMユーザーには以下の権限が必要です(権限をFullに与える代わりに、下記の権限の与え方を考慮するのは運用ポリシーとしては重要な検討課題です)。

Object Lock 機能

必要な権限

リテンション期間の設定

S3:PutObjectRetention
S3:GetObjectRetention
S3:BypassGovernanceRetention

Legal Holdの設定

S3:PutObjectLegalHold
S3:GetObjectLegalHold

 

機能の詳細と制約事項をまとめると以下のようになります。

 

S3 Object Lock機能は当然ですがS3アクセスに特化した機能で、残念ながらファイルアクセスとの併用ができません。またObject Lockの機能をバケットレベルでイネーブルにする必要があり、バケット作成時に設定する必要があります。

・機能概要

  • 一定期間または期間指定なしに対象のオブジェクトの削除・更新を防止できる
  • オブジェクトロックの適用対象は、指定のオブジェクトかつ指定したバージョンのみ
  • オブジェクトは削除可能(Deleted Markが付与される)
  • オブジェクトロックされたバージョンのオブジェクトはライフサイクルポリシーの削除プロセスからも保護される
  • 対象のオブジェクトの作成時または作成後にオブジェクトロックを指定できる
  • オブジェクトロックを指定したオブジェクトのACLを変更、タグ追加が可能

・制約事項

  • オブジェクトロックを有効にするためにはバケット作成時にバケットに対して有効にする必要がある
  • バージョニングを可能にしたバケット上であること
  • 頻繁に更新するオブジェクト・バケット内での利用は、コンテンツ・容量管理が困難
  • 上記のような場合は、ECS固有のバケットに設定するリテンションが有用
  • オブジェクトロックをイネーブルにしたのち、オブジェクトロックをディスエーブルにできない。またバージョニングの停止もできなくなる。

 ECS V3.6.2における制限は次の通りです。

  • IAM ユーザーのみ設定可能
  • ファイルアクセス可能なバケットは不可(バージョニングはファイルアクセスバケットに指定できない)
  • ADO イネーブルバケットは不可

 

2回にわたってECS V3.6.2で新たにサポートされたS3 Object Lockの機能についてご紹介しましたが、ECSは以前から独自のWORM機能を提供してきました。ECSの歴史にも触れながら、ECSの提供するWORM機能について整理して、次回にご紹介をしたいと思います。

 

今回もここまでお付き合いいただきありがとうございます。ご興味を持っていただけましたら幸いです。

 

杉本 直之

デルテクノロジーズ株式会社

UDS事業本部SE部

レスポンスがありません。
イベントは見つかりませんでした!

Top