バージョニング、MFA Delete、レプリケーション
誤削除から保護するためにバージョニングを有効にし、クロスリージョンレプリケーションを設定して MFA Delete を追加します。
「バージョニング、MFA Delete、レプリケーション」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。
S3 バージョニング: なぜ重要か
S3 バージョニングを使用すると、バケットに保存されたすべてのオブジェクトのすべてのバージョンを保持、取得、復元できます。バージョニングを有効にすると、PUT のたびに一意のバージョン IDを持つ新しいバージョンが作成され、古いバージョンは上書きされずに保持されます。オブジェクトを削除すると、S3 は削除マーカーを現行バージョンとして追加しますが、それまでのすべてのバージョンは保持されます。これにより、本番環境で最も一般的なデータ損失シナリオである、誤った上書き、誤削除、意図しないアプリケーションレベルのデータ破損から保護できます。
# Enable versioning on a bucket
aws s3api put-bucket-versioning \
--bucket my-important-bucket \
--versioning-configuration Status=Enabled
# List all versions of an object
aws s3api list-object-versions \
--bucket my-important-bucket \
--prefix my-document.pdfバージョニングの状態と遷移
S3 バケットのバージョニング状態は 3 つあります。Unversioned(デフォルト、バージョン ID なし)、Versioning-enabled(すべての新規オブジェクトに一意のバージョン ID が付与され、すべての上書きで新しいバージョンが作成される)、Versioning-suspended(新規オブジェクトには null バージョン ID が付与されるが、既存バージョンは保持される)です。一度有効にしたバージョニングを削除することはできず、停止のみ可能です。バージョニングを有効にする前に作成されたオブジェクトは null バージョン ID を持ち、上書きまたは削除されるまで影響を受けません。
以前のバージョンを復元する
バージョニングが有効なオブジェクトの古いバージョンを復元する方法は 2 つあります。方法 1: 古いバージョン ID を同じキーにコピーし戻します。これにより、古いコンテンツをコピーした新しいバージョンが作成され、それが現行バージョンになります。方法 2: 現行バージョンまたは削除マーカーを削除して、以前のバージョンを現行として表示させます。バージョニングが有効なバケットで、バージョン ID を指定せずにコンソールからオブジェクトを「削除」すると、S3 は削除マーカーを追加します。このオブジェクトはバージョンを指定しないリクエストでは削除されたように見えますが、すべてのバージョンは残っています。
# Restore a specific version by copying it back to the same key
aws s3api copy-object \
--bucket my-important-bucket \
--copy-source 'my-important-bucket/my-document.pdf?versionId=abc123'\
--key my-document.pdfMFA Delete: 追加の保護
MFA Deleteは、バージョニングが有効なバケットに第 2 の保護層を追加します。有効にすると、特定のバージョンを完全に削除する操作、またはバケットのバージョニング状態を変更する操作(有効 → 停止)には、API リクエストで有効な MFA 認証情報を提示する必要があります。これにより、AWS 認証情報を侵害した攻撃者による重要なバージョンの完全削除、固定されたオブジェクトバージョンの誤削除や自動削除、監査証跡を破壊しようとする内部脅威から保護できます。MFA Delete を有効化または無効化できるのは、CLI 経由のルートユーザーのみです。
# Enable MFA Delete (must be done as root user)
aws s3api put-bucket-versioning \
--bucket my-important-bucket \
--versioning-configuration Status=Enabled,MFADelete=Enabled \
--mfa 'arn:aws:iam::123456789012:mfa/root-account-mfa-device 123456'S3 Object Lock
S3 Object Lockは、規制コンプライアンスのために Write Once Read Many(WORM)モデルを強制します。Object Lock でロックされたオブジェクトは、指定された保持期間中、アカウントのルートユーザーであっても削除または上書きできません。モードは 2 つあります。Governance mode(特別な権限を持つユーザーはロックを上書きまたは解除できる)と、Compliance mode(保持期間中は AWS を含め誰もオブジェクトを削除できない、最も強力な保護)です。Object Lock はバケット作成時に有効化する必要があり、バージョニングが必要です。
# Apply a retention rule to an object
aws s3api put-object-retention \
--bucket my-compliance-bucket \
--key audit-log-2024.csv \
--version-id abc123 \
--retention '{"Mode":"COMPLIANCE","RetainUntilDate":"2027-01-01T00:00:00Z"}'S3 クロスリージョンレプリケーション(CRR)
クロスリージョンレプリケーション(CRR)は、あるリージョンのソースバケットにある新しいオブジェクトと更新を、別のリージョンの送信先バケットへ自動的にレプリケートします。用途には、コンプライアンス(特定の国にデータのコピーを保持)、災害復旧(重要なデータのコピーを第 2 リージョンに保持して RPO を短縮)、レイテンシーの削減(ユーザーに最も近いリージョンからオブジェクトを配信)があります。CRR には、ソースバケットと送信先バケットの両方でバージョニングを有効にし、必要なレプリケーション権限を持つ IAM ロールを設定する必要があります。
# Apply a replication configuration
aws s3api put-bucket-replication \
--bucket source-bucket-us-east-1 \
--replication-configuration file://replication-config.json
# Config specifies Role ARN, destination bucket ARN, and filter rules同一リージョンレプリケーション(SRR)
同一リージョンレプリケーション(SRR)は、同じリージョン内でオブジェクトをレプリケートします。用途には、ログ集約(複数のソースバケットからのログを 1 つの中央バケットへレプリケート)、テスト環境の同期(本番データのコピーを同一リージョン内の開発用バケットに保持)、複数の AWS AZ がある 1 つの国の中でのデータ主権への準拠があります。CRR と同様に、SRR には両方のバケットでのバージョニングと IAM ロールが必要です。レプリケーションを有効にした後に作成された新規オブジェクトのみが自動的にレプリケートされます。既存オブジェクトをレプリケートするには S3 Batch Replication を使用してください。
レプリケーションの対象と対象外
S3 レプリケーションでレプリケートされるものは、新規オブジェクト、メタデータ、タグ、ACL、暗号化状態です。デフォルトでレプリケートされないものは、レプリケーションを有効にする前から存在するオブジェクト(これには S3 Batch Replication を使用)、削除マーカー(Delete Marker Replication を有効にした場合を除く)、Glacier 内のオブジェクト(レプリケート不可。先に復元が必要)、レプリケート済みオブジェクト(3 つのバケット間で連鎖的にレプリケートされない)です。履歴データや削除イベントもレプリケートする必要がある完全な DR 戦略を設計するには、これらの境界を理解することが重要です。
S3 Replication Time Control(RTC)
Replication Time Control(RTC)は、CRR 向けのオプションアドオンであり、サービスレベル契約を提供します。オブジェクトの 99.99% が15 分以内にレプリケートされ、CloudWatch でレプリケーションメトリクスと通知を利用できます。RTC を使用しない場合、レプリケーション時間は保証されません。ほとんどのオブジェクトは速やかにレプリケートされますが、例外的に数時間かかることがあります。DR またはコンプライアンス要件で S3 データの最大 Recovery Point Objective(RPO)が指定されている場合、RTC は不可欠です。標準のレプリケーションデータ転送コストに加えて、GB 単位のレプリケーション料金が発生します。
バージョニングとストレージコストへの影響
バージョニングを有効にすると、S3 は明示的に削除されるまで各オブジェクトのすべてのバージョンを保持するため、ストレージコストが増加します。100 MB のファイルを 10 回上書きすると、ストレージを 1,000 MB 消費することになります。これを抑えるには、ライフサイクルルールを使用して、設定した日数が経過した非現行バージョンを自動的に期限切れにします(例:30 日より古い非現行バージョンを削除する)。または、非現行バージョンを Glacier などのより安価なストレージクラスに移行します。本番環境では、ストレージコストを管理するために、必ずバージョニングとライフサイクルルールを組み合わせて使用してください。
# Lifecycle rule to expire non-current versions after 30 days
aws s3api put-bucket-lifecycle-configuration \
--bucket my-important-bucket \
--lifecycle-configuration '{"Rules":[{"ID":"expire-old-versions","Status":"Enabled","NoncurrentVersionExpiration":{"NoncurrentDays":30}}]}'ランサムウェアからの保護
S3 のバージョニングと Object Lock(Compliance モード)を組み合わせることで、ランサムウェアに対する強力な保護を実現できます。攻撃者がオブジェクトを暗号化または削除しても、バージョニングによって以前のバージョンが保持されます(攻撃者がそれらを完全に削除した場合を除きます。そのため、Object Lock によって保持期間中の完全な削除を防止します)。最大限の保護を実現するには、バージョニングと MFA Delete を有効にし、重要なデータには Object Lock の Compliance モードを適用し、別の IAM 認証情報を使用して別の Region にレプリケーションしてください。これにより、単一アカウントの侵害によってすべてのコピーが破壊される事態を防げます。
クイックチェック
このレッスンで学んだ AWS Solutions Architect(SAA-C03)の概念について理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、バージョニングによってすべてのオブジェクトの全バージョンが保持され、誤削除から保護されること、MFA Delete と Object Lock によって、コンプライアンス対応やランサムウェア対策に必要な追加の不変性が実現されること、そしてCRR と SRR によってオブジェクトが他のバケットにレプリケートされ、DR やコンプライアンスの要件を満たせることを学びました。次は、S3 のストレージクラスとコスト最適化のためのライフサイクルポリシーについて学びます。
よくある質問
「バージョニング、MFA Delete、レプリケーション」レッスンは無料ですか?
はい。「バージョニング、MFA Delete、レプリケーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。
「バージョニング、MFA Delete、レプリケーション」で何を学びますか?
誤削除から保護するためにバージョニングを有効にし、クロスリージョンレプリケーションを設定して MFA Delete を追加します。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AWS Solutions Architectを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「バージョニング、MFA Delete、レプリケーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAWS Solutions Architectレッスンでコードを書いて実行できますか?
はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- バケット、オブジェクト、リージョン
- S3 のアクセス制御:バケットポリシーと ACL
- バージョニング、MFA Delete、レプリケーション
- ストレージクラスとライフサイクルポリシー