クロスリージョンレプリケーション (CRR) 機能は、ある Alibaba Cloud アカウントのソースバケットから、別の Alibaba Cloud アカウントの異なるリージョンにある宛先バケットへ、オブジェクトを自動的かつ非同期にコピーします。アカウント間の CRR は、ディザスタリカバリ、分離されたクロスアカウントバックアップ、またはデータレジデンシーのコンプライアンス要件を満たすために使用します。
クロスアカウントレプリケーションの設定には、ソースアカウントと宛先アカウントの両方での操作が必要です。このプロセスは 3 つのステップで構成されます。
ソースアカウント:データレプリケーション用の Resource Access Management (RAM) ロールを作成し、ソースバケットからデータを読み取るために必要な最小権限を付与します。
宛先アカウント:宛先バケットの権限付与ポリシーを変更し、ソースアカウントの RAM ロールにバケットへのデータ書き込み権限を付与します。
ソースアカウント:ソースアカウントに戻り、ソースバケットと宛先バケットをリンクさせ、レプリケーションタスクを開始する CRR ルールを作成します。
ステップ 1:ソースアカウントでの RAM ロールの作成と権限付与
RAM ロールを作成するには、[ロールの作成] ページに移動し、[プリンシパルタイプ] を [クラウドサービス] に、[プリンシパル名] を [Object Storage Service] に設定します。
RAM ロールにソースバケットへのアクセス権限を付与します。ソースバケットからデータを読み取り、レプリケーションタスクを開始するために必要な権限のみを含むカスタムポリシーを作成します。
[ポリシーの作成] ページで、[スクリプトエディター] タブをクリックします。次のポリシーをエディターに貼り付けます。
src-bucketをご利用のソースバケット名に置き換えてください。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ReplicateList", "oss:ReplicateGet" ], "Resource": [ "acs:oss:*:*:src-bucket", "acs:oss:*:*:src-bucket/*" ] } ] }ポリシーを作成した後、[ロール] ページに移動します。先ほど作成したロールを見つけて、[権限の付与] をクリックします。[権限の付与] パネルでは、プリンシパルは自動的に入力されます。[ポリシー] パラメーターで、前のステップで作成したカスタムポリシーを選択し、[OK] をクリックします。
(オプション) RAM ロールに Key Management Service (KMS) へのアクセス権限を付与します。宛先バケットにレプリケートするデータが KMS で暗号化されている場合は、RAM ロールに KMS のアクセス権限を付与する必要があります。
[ロール] ページで、先ほど作成したロールを見つけて、[権限の付与] をクリックします。[権限の付与] パネルでは、プリンシパルは自動的に入力されます。[ポリシー] を
AliyunKMSCryptoUserAccessに設定し、[OK] をクリックします。[ロール] ページで、作成した RAM ロールを見つけます。[基本情報] ページで、後で使用するためにロールの ARN をコピーします。ARN のフォーマットは
acs:ram::{Source Account UID}:role/{Role Name}です。
ステップ 2:宛先アカウントでの RAM ロールの権限付与とリソースの準備
RAM ロールに宛先バケットへの書き込み権限を付与します。宛先アカウントで、宛先バケットの権限付与ポリシーを変更し、ソースアカウントの RAM ロールに書き込み権限を付与します。
宛先アカウントにログインし、[バケット] ページに移動します。宛先バケットをクリックします。
左側のナビゲーションウィンドウで、[アクセス制御] > [バケットポリシー] を選択します。
[GUI で追加] タブをクリックし、[レプリケートするオブジェクトの受信] をクリックします。
表示されるパネルで、パラメーターを次のように設定します。
UID と RAM ロールの取得元:[レプリケーション用のソース RAM ロール ARN] を選択します。
レプリケーション用のソース RAM ロール ARN:ステップ 1 で記録したソースアカウントの RAM ロール ARN を入力します。
目的:[クロスアカウントレプリケーション] を選択します。
[ポリシーの生成] をクリックし、[保存] をクリックします。
(オプション) 宛先の KMS キーを設定します。KMS で暗号化されたオブジェクトをレプリケートする場合、または宛先バケットで KMS 暗号化が有効になっている場合は、宛先アカウントで KMS キーを設定する必要があります。キーの キーポリシーを設定 して、ソースアカウントの RAM ロールにキーの使用権限を付与します。キーポリシーを設定する際、[他のアカウントユーザー] としてソースアカウントで作成された RAM ロールの ARN を追加します。
この操作により、復号 (
kms:Decrypt) やデータキーの生成 (kms:GenerateDataKey) など、必要な権限がロールにデフォルトで付与されます。これにより、ロールはこのキーを使用して宛先バケットに暗号化されたオブジェクトを作成できます。通常、コンソールのウィザードには必要な権限がデフォルトで含まれています。ただし、OpenAPI を使用してカスタムキーポリシーを設定する場合は、これらの権限が正しく追加されていることを手動で確認する必要があります。
ステップ 3:ソースアカウントでのクロスリージョンレプリケーションルールの作成
権限を付与した後、ソースアカウントのコンソールに戻り、レプリケーションルールを作成してタスクを開始します。
ソースアカウントにログインし、[バケット] ページに移動します。ソースバケットをクリックします。
左側のナビゲーションウィンドウで、[データ管理] > [クロスリージョンレプリケーション] を選択します。
[クロスリージョンレプリケーション] をクリックします。表示されるダイアログボックスで、次のパラメーターを設定します。
宛先バケットの設定:[別の Alibaba Cloud アカウントに属するバケットを指定] を選択します。宛先バケットがあるリージョンを選択し、その名前を入力します。
レプリケーションポリシーの設定:
レプリケートするオブジェクト:すべてのファイルの同期 または [指定されたプレフィックスを持つオブジェクト] を選択します。指定されたプレフィックスを持つソースバケット内のオブジェクトが、宛先バケットにレプリケートされます。デフォルトでは、最大 10 個のプレフィックスを追加できます。プレフィックスの上限を増やすには、にご連絡ください。上限は最大 30 まで増やすことができます。
削除操作のレプリケート:ソースバケットからのオブジェクトの削除を宛先バケットにレプリケートするかどうかを選択します。ディザスタリカバリのシナリオでは、ソースバケットでの偶発的な削除がバックアップバケットにレプリケートされるのを防ぐために [いいえ] を選択します。これにより、データのセキュリティが向上します。
いいえ:新規および変更されたオブジェクトをレプリケートします。ソースバケットでのオブジェクトの削除は、宛先バケットに影響しません。このメソッドは、ソースバケットでの手動削除やライフサイクルルールによる自動削除によって引き起こされる宛先バケットでのデータ損失を防ぎます。
説明ソースバケットでバージョン管理が有効になっている場合、バージョン ID を指定せずにソースバケットからオブジェクトを削除すると、OSS はソースバケットに削除マーカーを作成します。この削除マーカーは宛先バケットにレプリケートされます。
はい:新規オブジェクト、変更されたオブジェクト、および削除操作をレプリケートして、宛先バケットをソースバケットと一致させます。このメソッドはデータ整合性を確保し、同じデータセットを共有およびアクセスする必要があるマルチユーザーまたはアプリケーション環境に適しています。ただし、このポリシーを選択すると、ソースバケット内のオブジェクトが手動またはライフサイクルルールによって自動的に削除された場合、宛先バケット内の対応するオブジェクトも削除され、回復できなくなります。
履歴データのレプリケート:ルールが作成される前にソースバケットに存在していたデータをレプリケートするかどうかを選択します。この操作は、宛先バケット内の同じ名前のオブジェクトを上書きします。データ損失を避けるために、ソースバケットと宛先バケットの両方でバージョン管理を有効にしてください。
KMS で暗号化されたオブジェクトのレプリケート:ソースオブジェクトが KMS で暗号化されており、宛先バケットでも暗号化された状態を維持したい場合は、[レプリケート] を選択します。ステップ 2 で準備した宛先 KMS キーの ARN を指定します。[レプリケートしない] を選択した場合、KMS で暗号化されたファイルは宛先バケットにレプリケートされません。
説明ソースオブジェクトと宛先バケットの暗号化ステータスは、それぞれ HeadObject と GetBucketEncryption を使用してクエリできます。
RAM ロール:ドロップダウンリストから、ステップ 1 でソースアカウントに作成した RAM ロールを選択します。
(オプション) レプリケーションアクセラレーションの設定:
転送アクセラレーション:レプリケーションタスクに中国本土と中国本土以外のリージョンが含まれる場合、この機能を有効にしてデータ転送速度を向上させることができます。この機能には、追加の転送アクセラレーション料金が発生します。
レプリケーション時間管理 (RTC):有効にすると、この機能はほとんどの増分データのレプリケーションの遅延を 10 分以内に抑えます。この機能は特定のリージョン間でのみサポートされており、追加のクロスリージョンレプリケーションの RTC 料金が発生します。詳細については、「RTC 機能の概要」をご参照ください。
CRR ルールは作成後に変更または削除することはできません。OK をクリックする前に、すべての設定項目を慎重に確認してください。レプリケーションを終了するには、レプリケーションタスクを無効にしてデータ同期を停止できます。
すべての設定が正しいことを確認した後、[OK] をクリックし、次に [有効化の確認] をクリックします。
レプリケーションタスクは、ルールが正常に作成されてから数分以内に開始されます。データレプリケーションは非同期プロセスです。所要時間は、オブジェクトのサイズ、オブジェクトの数、およびクロスリージョン間のネットワーク遅延によって異なり、数分から数時間かかる場合があります。履歴データと増分データの同期ステータスを含むレプリケーションの進捗状況は、ソースバケットの [クロスリージョンレプリケーション] タブで確認できます。
よくある質問
ソースバケットでのオブジェクトのストレージクラスや最終アクセス時刻の変更が、宛先バケットに同期されないのはなぜですか?
データレプリケーションは、オブジェクトのコンテンツの変更 (追加、削除、または変更) によってのみトリガーされます。ライフサイクルルールや CopyObject 操作によるストレージクラスの変更、または最終アクセス時刻 (LastAccessTime) の更新は、新しいオブジェクトコンテンツの書き込みを伴いません。したがって、これらのアクションは新しいレプリケーションタスクをトリガーせず、宛先バケットのオブジェクトレプリカは更新されません。
ソリューション:
ストレージクラスを同期するには:宛先バケットにソースバケットと同一のライフサイクルルールを設定します。これにより、同じストレージクラスのトランジションが保証されます。
LastAccessTimeを更新するには:宛先バケット内のオブジェクトに直接アクセスします。たとえば、GetObjectリクエストを実行して、そのLastAccessTimeのリフレッシュをトリガーします。
マルチパートアップロードを使用してアップロードされたオブジェクトはレプリケートされますか?
オブジェクトがマルチパートアップロードを使用してアップロードされると、各パートのアップロードが宛先バケットにレプリケートされます。ソースバケットでマージ (CompleteMultipartUpload) が完了すると、完全なオブジェクトが全体として宛先バケットにレプリケートされます。
カスタムポリシーを使用するよりも簡単な方法で、ソースアカウントの RAM ロールに権限を付与する方法はありますか?
はい、あります。迅速な権限付与のために、Alibaba Cloud が提供する AliyunOSSFullAccess システムポリシーを作成した RAM ロールに直接付与することができます。ただし、このポリシーはアカウント配下のすべての OSS リソースに対するすべての権限を付与します。その範囲が広すぎるため、本番環境での使用は推奨されません。
グラフィカルインターフェイス以外に、JSON ポリシーを使用して宛先バケットの権限を設定できますか?
はい、できます。宛先バケットの [バケットポリシー] ページで、[構文によるルールの追加] を選択して、より柔軟な設定を行うことができます。JSON ポリシーを使用する際は、次の点に注意してください。
新しく追加されたポリシーは、既存のバケットポリシーを上書きします。新しいポリシーに必要なすべての権限付与ルールが含まれていることを確認してください。
ポリシーの
Principalフィールドには、ソースアカウントの RAM ロールの ARN を含める必要があります。ロール名に大文字が含まれている場合は、ポリシー内で小文字に変換する必要があります。たとえば、ロール
AliyunOssDrsRoleは、ポリシー内でaliyunossdrsroleと記述する必要があります。ソースアカウントの正しい UID、宛先バケットの名前、および宛先アカウントの UID を入力する必要があります。
以下はポリシーの例です。
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Action":[
"oss:ReplicateList",
"oss:ReplicateGet",
"oss:ReplicatePut",
"oss:ReplicateDelete"
],
"Principal": [
"arn:sts::{Source Account UID}:assumed-role/{Role Name}/*"
],
"Resource":[
"acs:oss:*:{Destination Account UID}:{Destination Bucket Name}",
"acs:oss:*:{Destination Account UID}:{Destination Bucket Name}/*"
]
}
]
}