AWS S3 Object Lock でランサムウェア対策|設定手順と注意点

  • URLをコピーしました!
目次

はじめに

ランサムウェア対策では、本番データが暗号化されても戻せるように、改ざん・削除できないバックアップをクラウド側に持っておくことが有効です。これを Amazon S3 で実現する仕組みが S3 Object Lock です。保持期間中は、たとえ認証情報が漏れても、対象オブジェクトを書き換え・削除できない状態(WORM)にできます。

本記事は、AWS をこれから触る方も対象に、検証環境で実際に手を動かしながら設定できるよう、コンソール画面に沿って解説します。なお、対策全体の位置づけは上位記事『ランサムウェア対策の基本と全体像|3-2-1-1-0 で守るバックアップ設計』を、ファイルサーバー保護におけるクラウド側の役割は『ファイルサーバーのランサムウェア対策|不変バックアップ設計の基礎』をあわせて参照してください。

この記事でわかること
  • Object Lock を有効化したバケットの作り方
  • 保持期間の設定方法と、Governance / Compliance モードの違い
  • 削除がブロックされることの確認方法
  • MFA Delete やバケットポリシーによる多層防御と、コスト管理・後片付けの注意点

結論を先に述べると、Object Lock は「バージョニングを有効にしたバケット」に「保持期間」を設定することで成立します。そして検証段階では、まず解除可能な Governance モードと短い保持期間で試すことが安全です。Compliance モードは強力な反面、設定を取り消せない点に注意が必要です(詳細は事前準備で解説します)

事前準備: アカウント・権限・コストの注意点

実際の操作に入る前に、権限・料金・モードの 3 点を確認しておきます。ここを押さえておくと、後で「消せない」「課金が止まらない」といった事態を避けられます。

必要な IAM 権限

検証用に管理者権限を持つアカウントであれば、基本的にそのまま操作できます。本番で最小権限を設計する場合に関係する主な権限は、s3:CreateBuckets3:PutBucketVersionings3:PutBucketObjectLockConfigurations3:PutObjectRetentions3:PutObjectLegalHold、削除検証に使う s3:BypassGovernanceRetention などです。正確な一覧は公式の「Required permissions」を参照してください(https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html

料金とリージョンの考え方

S3 はストレージ容量とリクエストに対して課金されます。リージョンは、遅延やデータ所在の観点から近いリージョン(例: 東京 ap-northeast-1)を選ぶのが扱いやすいです。バケット名は全世界で一意である必要があります。検証では、不要になったオブジェクトを削除して課金を止められるよう、後述のとおり短い保持期間にしておくことをおすすめします。

【重要】Governance と Compliance の違い(まずは Governance で試す)

Object Lock の保持モードには 2 種類あります。

Governance モード

s3:BypassGovernanceRetention 権限を持つ利用者であれば、保持期間中でも解除・削除できます。検証や学習に向いています。

Compliance モード

ルートユーザーを含め、誰も保持期間中は変更・削除できません。期限前にどうしても消す手段は、その AWS アカウント自体を削除することだけになります。

参考: AWS「Locking objects with Object Lock」(Amazon S3 ユーザーガイド)
“a protected object version can’t be overwritten or deleted by any user”
(保護されたオブジェクトバージョンは、どの利用者も上書き・削除できない)
https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html

つまり、検証でいきなり Compliance + 長期保持を設定すると、不要になっても消せず、課金が続くおそれがあります。本記事では Governance モード + ごく短い保持期間(例: 1 日)で進めることを前提にします。Compliance は仕組みを理解したうえで、本番要件が固まってから使うのが安全です。

STEP

Object Lock を有効化したバケットを作成する

それではバケットを作成します。Object Lock はバージョニングが前提のため、作成時にあわせて有効化します。

  1. S3 コンソール(https://console.aws.amazon.com/s3/ )を開きます。
  2. 左メニューの「バケット(General purpose buckets)」から「バケットを作成」を選びます。
  3. バケット名(全世界で一意)と、リージョン(例: 東京 ap-northeast-1)を指定します。
  4. オブジェクト所有権とパブリックアクセスのブロックは、既定(パブリックアクセスはブロックのまま)を推奨します。
  5. 「バケットのバージョニング」を「有効にする」に設定します。Object Lock はバージョニング必須のため、ここは必ず有効にします。
  1. 「詳細設定」内の「オブジェクトロック」を「有効にする」に設定します。恒久的にオブジェクトをロック可能にする旨の確認にチェックを入れます。
  1. 「バケットを作成」を選びます。

なお、一度 Object Lock を有効化したバケットは、Object Lock の無効化もバージョニングの停止もできません。検証用と分かる名前で作成しておくと管理が楽です。

(公式手順: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html

STEP

デフォルト保持期間を設定する

バケット単位でデフォルトの保持期間を設定しておくと、以降アップロードされるオブジェクトに自動で保持が適用されます。

  1. 作成したバケットを開き、「プロパティ」タブを選びます。
  2. 「オブジェクトロック」セクションまでスクロールし、「編集」を選びます。
  3. 「デフォルト保持」を「有効にする」にします。
  4. 「保持モード」で「ガバナンスモード」を選びます(検証のため Compliance は選びません)
  5. 「デフォルトの保持期間」に短い日数(例: 1 日)を入力します。
  1. 「変更を保存」を選びます。

これで、このバケットにアップロードした各オブジェクトは、指定した期間だけ保持(WORM 保護)されます。個別オブジェクトに保持期間を明示した場合は、そちらがバケットの既定設定より優先されます(次のステップで扱います)

STEP

オブジェクトをアップロードして保持を確認する

まず、保護対象となるファイルをアップロードして、保持が適用されることを確認します。

  1. 作成したバケットを開き、「アップロード」からファイルを追加して「アップロード」を実行します。
  2. アップロードしたオブジェクトを開き、プロパティの「オブジェクトロックの保持」を確認します。ステップ 2 で設定したデフォルト保持(ガバナンスモード・短い日数)が適用されているはずです。

個別オブジェクトに保持期間・リーガルホールドを設定する

バケットの既定とは別に、オブジェクト単位で保持を指定することもできます。個別に設定した値は、バケットの既定設定より優先されます。

保持期間(個別)

対象オブジェクトのプロパティで「オブジェクトロックの保持」→「編集」を開き、「有効」を選び、保持モード(検証ではガバナンスモード)と「保持終了日」を指定して保存します。

リーガルホールド

同じくオブジェクトのプロパティで「オブジェクトロックのリーガルホールド」→「編集」から「有効」にします。リーガルホールドには期限の概念がなく、明示的に「無効」にするまで保護が続く点が、保持期間との違いです。

(公式手順: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html

STEP

削除がブロックされることを確認する

設定が効いているかは、実際に削除を試すのが分かりやすいです。

バージョニングが有効なバケットでは、通常の「削除」は削除マーカーを作るだけで、オブジェクトの実体(バージョン)は残ります。実体を消すにはバージョンを指定した完全削除が必要ですが、保持期間中はこれが拒否されます。

  1. オブジェクトの「バージョンを表示」を有効にし、保護中のバージョンを選びます。
  2. 「完全に削除する」を試すと、Object Lock により削除が拒否されます。

なお検証で使っている Governance モードでは、s3:BypassGovernanceRetention 権限を持つ場合に限り、バイパスを承認して削除できます(コンソールでは完全削除時にバイパスを確認する表示、CLI では --bypass-governance-retention を使用)。これは後片付けで使います。Compliance モードではこのバイパス自体ができないため、検証は Governance で行うのが安全です。

(参考: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html

STEP

多層防御を加える(MFA Delete・バケットポリシー・CloudTrail)

Object Lock 単体でも強力ですが、誤操作や認証情報の漏えいに備えて、運用面の層を足しておくと安心です。

MFA Delete

MFA Delete を有効にすると、オブジェクトバージョンの削除やバージョニング状態の変更に、多要素認証が要求されます。注意点として、有効化できるのは AWS アカウントのルートユーザーのみで、バージョニングが前提です。

参考: AWS「Configuring MFA delete」(Amazon S3 ユーザーガイド)
“you cannot enable MFA Delete using the AWS Management Console”
(MFA Delete は AWS マネジメントコンソールからは有効化できない)
https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiFactorAuthenticationDelete.html

有効化はコンソールではできず、CLI または API で行います。仮想 MFA デバイスを使う場合のコマンド例は次のとおりです。

aws s3api put-bucket-versioning \
  --bucket amzn-s3-demo-bucket1 \
  --versioning-configuration Status=Enabled,MFADelete=Enabled \
  --mfa "arn:aws:iam::<アカウントID>:mfa/root-account-mfa-device <MFAコード>"

ルートユーザーのアクセスキーを一時的に作成して使う必要があるため、使用後はキーを削除しておくことをおすすめします。また、後述のライフサイクル設定とは併用できない制約があります。

バケットポリシー

バケットポリシーで、運用上のガードレールを足せます。たとえば「短すぎる保持期間を拒否する」ことで、設定ミスを防げます。次は、残り保持日数が 1 日未満になる保持設定を拒否する例です(要件に合わせて日数や対象は調整します)。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyShortRetention",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObjectRetention",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
      "Condition": {
        "NumericLessThan": { "s3:object-lock-remaining-retention-days": "1" }
      }
    }
  ]
}

CloudTrail

CloudTrail で S3 のデータイベントを記録しておくと、削除の試行や設定変更を監査できます。不審な操作の早期把握に役立つため、本番運用では有効化をおすすめします。

STEP

コスト管理と後片付け

検証後の課金を抑えるため、ライフサイクルと後片付けの手順を押さえておきます。

ライフサイクル

古いバージョンを安価なストレージクラスへ移行したり、保持期限の経過後に削除したりして、コストを最適化できます。ただし保持期間中のオブジェクトは削除されません。前述のとおり、MFA Delete とは併用できない点に注意します。

後片付け(Governance)

検証で作ったオブジェクトは、保持期限が切れれば通常どおり削除できます。すぐ消したい場合は、s3:BypassGovernanceRetention 権限でバイパス削除します(CLI 例: aws s3api delete-object --bucket <バケット名> --key <キー> --version-id <バージョンID> --bypass-governance-retention)その後、バケットを空にして削除します。

Compliance モードの注意(再掲)

Compliance + 保持期間中のオブジェクトは、誰も削除できず、期限前に消す手段はアカウント削除のみです。検証段階で安易に使わないことをおすすめします。

<スクリーンショット挿入⑧: ライフサイクルルールの設定画面(任意)>

CLI で一括設定する(補足)

コンソール操作に慣れたら、CLI を使うと再現性が高く、自動化にもつなげられます。AWS マネジメントコンソールから起動できる CloudShell でも、そのまま実行できます。以下は、これまでのステップを CLI でなぞった例です(バケット名・リージョン・日付は環境に合わせて置き換えます)

AWS CLI のインストールおよび使用方法は『AWS CLI インストール手順 Windows と Ubuntu|S3 と EC2 接続』を参照ください。

  1. Object Lock を有効化したバケットを作成します(東京リージョンの例)
aws s3api create-bucket \
  --bucket amzn-s3-demo-bucket1 \
  --region ap-northeast-1 \
  --create-bucket-configuration LocationConstraint=ap-northeast-1 \
  --object-lock-enabled-for-bucket
  1. デフォルト保持期間を設定します(ガバナンスモード・1 日)。
aws s3api put-object-lock-configuration \
  --bucket amzn-s3-demo-bucket1 \
  --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "GOVERNANCE", "Days": 1 }}}'
  1. オブジェクトをアップロードします。
aws s3 cp ./test.txt s3://amzn-s3-demo-bucket1/test.txt
  1. 個別オブジェクトに保持期間を設定します(バケット既定より優先されます)。
aws s3api put-object-retention \
  --bucket amzn-s3-demo-bucket1 \
  --key test.txt \
  --retention '{ "Mode": "GOVERNANCE", "RetainUntilDate": "2026-06-30T00:00:00Z" }'
  1. リーガルホールドを設定/解除します。
aws s3api put-object-legal-hold --bucket amzn-s3-demo-bucket1 --key test.txt --legal-hold "Status=ON"
aws s3api put-object-legal-hold --bucket amzn-s3-demo-bucket1 --key test.txt --legal-hold "Status=OFF"
  1. 設定内容を確認します。
aws s3api get-object-lock-configuration --bucket amzn-s3-demo-bucket1
aws s3api get-object-retention --bucket amzn-s3-demo-bucket1 --key test.txt
  1. 後片付けで、保持中のオブジェクトを Governance のバイパスで削除します(権限が必要です)。
aws s3api delete-object \
  --bucket amzn-s3-demo-bucket1 \
  --key test.txt \
  --version-id <バージョンID> \
  --bypass-governance-retention

各コマンドの詳細は、AWS の公式ドキュメントを参照してください(https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html

まとめ

S3 Object Lock は、バージョニングを有効にしたバケットに保持期間やリーガルホールドを設定することで、削除・改ざんできない WORM 保護を実現する仕組みです。検証段階では、解除可能な Governance モードと短い保持期間で安全に試し、削除がブロックされることを実際に確認しておくと理解が深まります。

  • S3 Object Lock はバージョニング有効なバケットで使う。
  • 保持期間かリーガルホールドで WORM 保護を実現する。
  • Governance は権限者が解除でき、検証に向く。
  • Compliance は誰も解除できず、不可逆な点に注意
  • 削除検証で保護が効いているか確認する。
  • MFA Delete・バケットポリシー・CloudTrail で多層化する。
  • 検証は短期保持で行い、後片付けまで含めて運用する。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次