SJ blog
security
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

S3 Object Lock — WORM準拠・ガバナンスモードとコンプライアンスモードの違い

S3 Object LockのWORM(Write Once Read Many)実装、ガバナンスモードとコンプライアンスモードの違い、Legal Hold、バケット設定の注意点を規制対応の観点から解説。

一言結論

S3 Object Lockのコンプライアンスモードはrootユーザーを含む誰も保持期間中に削除できないため規制対応に適しているが、バケット作成時にしか有効化できないという制約から設計段階での意思決定が不可欠だ。

S3 Object Lockとは

S3 Object LockはWORM(Write Once Read Many)モデルを実装するための機能だ。指定した保持期間中、オブジェクトの削除・上書きを防止できる。金融規制(SEC, FINRA等)や医療規制(HIPAA等)への対応に使われる。

重要な前提: Object Lockはバケットのバージョニングとセットだ。バケット作成時にのみ有効化できる(後から有効化不可)。

2つの保持モード

Governance Mode(ガバナンスモード)

- 通常のユーザーはオブジェクトを削除・上書きできない
- ただし s3:BypassGovernanceRetention 権限を持つユーザーは
  x-amz-bypass-governance-retention: true ヘッダーを指定して削除可能
- 監査担当者が誤って設定したオブジェクトを修正できる柔軟性がある
- 規制ではなく内部ポリシーの強制に向く

Compliance Mode(コンプライアンスモード)

- 誰も(rootユーザーを含む)オブジェクトを削除・上書きできない
- 保持期間の短縮もできない(延長は可能)
- AWSサポートに依頼しても解除不可
- 保持期間が満了するまで絶対に削除できない
- 厳格な規制要件に使用する
モード比較:
                    Governance    Compliance
通常ユーザーの削除:     ❌            ❌
特権ユーザーの削除:     ✅            ❌
rootユーザーの削除:     ✅            ❌
保持期間の短縮:        ✅(権限必要)   ❌
保持期間の延長:        ✅            ✅

設定方法

# バケット作成時にObject Lockを有効化(後から変更不可)
aws s3api create-bucket \
  --bucket compliance-bucket \
  --region ap-northeast-1 \
  --create-bucket-configuration LocationConstraint=ap-northeast-1 \
  --object-lock-enabled-for-bucket

# バケットのデフォルト保持設定(Compliance Mode、7年)
aws s3api put-object-lock-configuration \
  --bucket compliance-bucket \
  --object-lock-configuration '{
    "ObjectLockEnabled": "Enabled",
    "Rule": {
      "DefaultRetention": {
        "Mode": "COMPLIANCE",
        "Years": 7
      }
    }
  }'
# 個別オブジェクトに保持設定(アップロード時)
aws s3api put-object \
  --bucket compliance-bucket \
  --key financial-report-2026.pdf \
  --body report.pdf \
  --object-lock-mode COMPLIANCE \
  --object-lock-retain-until-date "2033-04-08T00:00:00Z"

# 既存オブジェクトに保持設定を追加
aws s3api put-object-retention \
  --bucket compliance-bucket \
  --key financial-report-2026.pdf \
  --retention '{
    "Mode": "COMPLIANCE",
    "RetainUntilDate": "2033-04-08T00:00:00Z"
  }'

Legal Holdは保持期間と独立したロック機能だ。訴訟や調査中にオブジェクトを保護する目的で使う。保持期間のような期限がなく、明示的に解除するまで有効だ。

# Legal Holdを有効化
aws s3api put-object-legal-hold \
  --bucket my-bucket \
  --key evidence-file.pdf \
  --legal-hold '{"Status": "ON"}'

# Legal Holdを解除
aws s3api put-object-legal-hold \
  --bucket my-bucket \
  --key evidence-file.pdf \
  --legal-hold '{"Status": "OFF"}'

Legal Holdは保持モードと独立して機能する。どちらか一方でもONなら削除できない。

Glacier Vault Lockとの違い

S3 Object Lock          Glacier Vault Lock
─────────────────────   ─────────────────────────
S3バケット内のオブジェクト  S3 Glacierのボールト
オブジェクト単位で設定可    ボールト全体に適用
バージョン管理と連携        独立した機能
Governance/Compliance   ポリシーで条件付け可能

バケット削除とObject Lock

Object Lockが有効なバケットは、全オブジェクトを削除してもバケット自体は削除できる(空のバケットである必要がある)。ただし保持期間中のオブジェクトは削除できないため、事実上バケット削除は不可能だ。

Governance Modeのバイパス

// s3:BypassGovernanceRetention権限を付与(管理者ロールのみ)
{
  "Effect": "Allow",
  "Action": "s3:BypassGovernanceRetention",
  "Resource": "*"
}
# Governance Modeオブジェクトのバイパス削除
aws s3api delete-object \
  --bucket my-bucket \
  --key old-file.pdf \
  --version-id VERSION_ID \
  --bypass-governance-retention

試験頻出ポイント

  • Object Lockはバケット作成時のみ有効化可能(後から変更不可)
  • Compliance Modeはrootでも削除不可
  • Legal Holdは期限なしで独立して機能する
  • 保持期間の延長は可能、短縮はCompliance Modeでは不可
  • Object LockとGlacier Vault Lockは異なるサービス

まとめ

規制対応のデータ保護にはCompliance Mode、内部監査用途にはGovernance Mode、訴訟保全にはLegal Holdを使う。バケット作成後に有効化できない制約から、アーキテクチャ設計段階での検討が必要だ。