🔖

S3のObject Lock設定検証

に公開

やりたいこと

ログなど改変されると困るデータが保管されているS3のバケットを保護したい

目標

  • ログの保管基盤の作成
    • 基本的に削除ができないようにロックをかける
    • 万が一の変更に備えてバージョニングをする
    • ログ保管の期間をルールに合わせて設定する

S3のリテンションモードについて

S3には「コンプライアンスモード」と「ガバナンスモード」が存在する。
それぞれの違いは下記の通りで「コンプライアンスモード」は誰も触れなくなる半面設定のミスや削除したくなった時に本当に面倒なことになりますが、データは確実に保護されます。
「ガバナンスモード」はそれより比較的ラフな設定で特定の権限さえあれば削除などを行う事ができるので検証やそこまでガチガチに設定したくない場合に便利です。

コンプライアンスモード

アクション root 一般ユーザ
追加 OK OK
変更 NG NG
削除 NG NG

コンプライアンスモードでは、AWS アカウント の root ユーザーを含め、ユーザーが、保護されたオブジェクトのバージョンを上書きまたは削除することはできません。コンプライアンスモードでオブジェクトをロックすると、そのリテンションモードを変更することはできず、保持期間を短縮することはできません。コンプライアンスモードでは、保持期間中にオブジェクトのバージョンを上書きまたは削除できないようにします。

※AWSドキュメント一部抜粋 https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/object-lock.html#object-lock-retention-modes

ガバナンスモード

アクション root 特定権限付与ユーザ 一般ユーザ
追加 OK OK OK
変更 OK OK NG
削除 OK OK NG

ガバナンスモードでは、特別なアクセス許可を持たない限り、ユーザーはオブジェクトのバージョンの上書きや削除、ロック設定を変更することはできません。ガバナンスモードでは、ほとんどのユーザーがオブジェクトを削除できないように保護できます。ただし必要に応じて、一部のユーザーに保持設定を変更したり、オブジェクトを削除したりするアクセス許可を付与することもできます。ガバナンスモードを使用して、コンプライアンスモードの保持期間を作成する前に、保持期間の設定をテストすることもできます。

※AWSドキュメント一部抜粋 https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/object-lock.html#object-lock-retention-modes

「ガバナンスモード」をしようしたログ基盤の作成

検証ポイント

  • 既存のバケットにもガバナンスモードが設定できるか
  • 保持期間内に権限のあるユーザが編集・削除をする事ができるのか
  • 一般ユーザが編集削除できないことを確認する
  • ガバナンスモード設定時に必要な設定がほかにないか確認

テスト時の設定

  • 対象バケット:テスト用のログを保管したバケット
  • 保持期間:1日で設定(消せなくなっても最小限で済むため)
  • リテンションモード:ガバナンスモード

検証結果

  • 既存の作成済みバケットでも設定可能
  • 保持期間内でも権限のあるユーザは編集ができる
    • ガバナンスモード下で編集削除が可能な権限「s3:BypassGovernanceRetention」
      • リクエストヘッダーに「x-amz-bypass-governance-retention:true」が必要
  • 権限のないユーザは編集削除できない
  • ガバナンスモードを使用する場合「バージョニング設定」が必須になる

IaC Sample

Resources:
    S3Bucket:
        Type: "AWS::S3::Bucket"
        Properties:
            BucketName: "TestObjectLockBucket"
            VersioningConfiguration:
                Status: "Enabled"
            ObjectLockEnabled: True
            ObjectLockConfiguration:
                ObjectLockEnabled: "Enabled"
                Rule:
                    DefaultRetention:
                        Mode: "GOVERNANCE"
                        Days: 1

参考

S3 Object Lock を使用したオブジェクトのロック - Amazon Simple Storage Service

Discussion