クロスリージョンレプリケーション (CRR) を使用すると、あるリージョンと Alibaba Cloud アカウントのソースバケットから、別のリージョンと Alibaba Cloud アカウントの宛先バケットにオブジェクトを自動的かつ非同期にコピーできます。CRR は、ディザスタリカバリ、分離されたクロスアカウントバックアップ、またはデータ所在地のコンプライアンス要件を満たすために使用できます。
クロスアカウント CRR の設定には、ソースアカウントと宛先アカウントの両方での設定が必要です。このプロセスは 3 つのステップで構成されます:
ソースアカウント: データレプリケーション用の RAM ロールを作成し、ソースバケットからデータを読み取るために必要な最小限の権限を付与します。
宛先アカウント: 宛先バケットのバケットポリシーを変更して、ソースアカウントの RAM ロールに宛先バケットへのデータ書き込み権限を付与します。
ソースアカウント: クロスリージョンレプリケーションルールを作成します。このルールは、ソースバケットと宛先バケットをリンクし、レプリケーションタスクを開始します。
ステップ 1: ソースアカウントで RAM ロールを作成して権限を付与する
RAM ロールを作成します。[RAM ロールの作成] ページに移動します。[信頼できるエンティティタイプ] を [Alibaba Cloud サービス] に設定します。[信頼できるサービス] で、[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 ロールに KMS へのアクセス権限を付与します。宛先バケットにレプリケートされるデータが KMS で暗号化されている場合は、RAM ロールに KMS へのアクセス権を付与する必要があります。
[ロール] ページで、作成したロールを見つけて、[権限の追加] をクリックします。[権限の追加] パネルでは、プリンシパルが自動的に入力されます。[承認ポリシー] で
AliyunKMSCryptoUserAccessを選択し、[OK] をクリックします。RAM ロールの ARN を記録します。[ロール] ページで、作成した RAM ロールを見つけます。[基本情報] ページで、後で使用するためにロールの ARN をコピーします。フォーマットは
acs:ram::{source-account-UID}:role/{role-name}です。
ステップ 2: 宛先アカウントで RAM ロールを承認し、リソースを準備する
RAM ロールに宛先バケットへの書き込みを承認します。宛先アカウントで、宛先バケットのバケットポリシーを変更して、ソースアカウントの RAM ロールに書き込み権限を付与します。
宛先アカウントにログオンし、[バケットリスト] ページに移動します。宛先バケットをクリックします。
左側のナビゲーションウィンドウで、[アクセス制御] > [バケットポリシー] を選択します。
[ビジュアルエディター] タブをクリックし、[レプリケートされたオブジェクトの受信] をクリックします。
表示されるパネルで、次のパラメーターを設定します:
[UID と RAM ロールの取得方法]: [ソース RAM ロールの ARN から取得] を選択します。
[ソース RAM ロールの ARN]: ステップ 1 で記録したソースアカウントの RAM ロール ARN を入力します。
[承認の目的]: [クロスアカウントクロスリージョンレプリケーション] を選択します。
[ポリシーの生成] をクリックし、[保存] をクリックします。
(オプション) 宛先の KMS キーを設定します。KMS で暗号化されたオブジェクトをレプリケートする場合、または宛先バケットで KMS によるサーバー側暗号化が有効になっている場合は、宛先アカウントで KMS キーを設定し、キーの キーポリシーを設定 し、ソースアカウントの RAM ロールにキーを使用する権限を付与する必要があります。キーポリシーを設定する際、[その他のアカウントユーザー] として ソースアカウントで作成した RAM ロールの ARN を追加します。
この操作により、復号 (
kms:Decrypt) やデータキーの生成 (kms:GenerateDataKey) など、必要な権限がデフォルトでロールに付与されます。これらの権限により、ロールはこのキーを使用して宛先バケットに暗号化されたオブジェクトを作成できます。通常、コンソールウィザードには必要な権限がデフォルトで含まれています。ただし、OpenAPI を使用してカスタムキーポリシーを設定する場合は、これらの権限が正しく追加されていることを手動で確認する必要があります。
ステップ 3: ソースアカウントでクロスリージョンレプリケーションルールを作成する
権限付与が完了したら、ソースアカウントのコンソールに戻り、レプリケーションルールを作成してタスクを開始します。
ソースアカウントにログオンし、[バケットリスト] ページに移動します。ソースバケットをクリックします。
左側のナビゲーションウィンドウで、[データ管理] > [クロスリージョンレプリケーション] を選択します。
[クロスリージョンレプリケーション] をクリックします。表示されるダイアログボックスで、次のパラメーターを設定します:
[宛先バケットの設定]: [別のアカウントのバケットを指定] を選択します。宛先バケットが配置されているリージョンを選択し、宛先バケットの名前を入力します。
[レプリケーションポリシーの設定]:
[レプリケートするオブジェクト]: すべてのファイルの同期 または [特定のプレフィックスを持つファイルをレプリケート] を選択します。指定されたプレフィックスを持つソースバケット内のオブジェクトが宛先バケットにレプリケートされます。デフォルトでは、最大 10 個のプレフィックスを追加できます。さらにプレフィックスを追加するには、 に連絡して増加をリクエストしてください。上限は最大 30 まで引き上げることができます。
[データレプリケーションポリシー]: データ同期方法を選択します。ディザスタリカバリのシナリオでは、[追加/変更を同期] を選択して、ソースバケットでの偶発的な削除がバックアップバケットに同期されるのを防ぎます。これにより、データのセキュリティが強化されます。
[追加/変更を同期]: 新規および変更されたオブジェクトのみをレプリケートします。ソースバケット内のオブジェクトを削除しても、宛先バケットには影響しません。この方法では、ソースバケットでの手動削除やライフサイクルルールによる自動削除が原因で発生する宛先バケットでのデータ損失を防ぎます。
[追加/削除/変更を同期]: 新規、変更、削除されたオブジェクトをレプリケートして、宛先バケットをソースバケットと一致させます。この方法はデータ整合性を確保し、同じデータセットを共有してアクセスする必要があるマルチユーザーまたはアプリケーション環境に適しています。ただし、このポリシーでは、ソースバケット内のオブジェクトが手動またはライフサイクルルールによって自動的に削除されると、宛先バケット内の対応するオブジェクトも削除され、回復できなくなります。
[履歴データのレプリケート]: ルールが作成される前にソースバケットに存在していた既存のデータをレプリケートするかどうかを選択します。この操作は、宛先バケット内の同じ名前のオブジェクトを上書きします。データ損失を避けるために、ソースバケットと宛先バケットの両方でバージョン管理を有効にしてください。
[(オプション) KMS で暗号化されたオブジェクトのレプリケート]: ソースオブジェクトが KMS で暗号化されており、宛先バケットでも暗号化されたままにしたい場合は、このオプションを選択します。次に、ステップ 2 で準備した宛先 KMS キーの ARN を入力します。
説明ソースオブジェクトと宛先バケットの暗号化ステータスは、それぞれ HeadObject および GetBucketEncryption 操作を使用してクエリできます。
[承認済みロール]: ドロップダウンリストから、ステップ 1 でソースアカウントに作成した RAM ロール を選択します。
[(オプション) レプリケーションアクセラレーションの設定]:
[転送アクセラレーション]: この機能を有効にすると、中国本土と中国本土以外のリージョン間のレプリケーションタスクのデータ転送を高速化できます。この機能には、追加の 転送アクセラレーション料金 が発生します。
[レプリケーション時間制御 (RTC)]: この機能は、ほとんどの増分データのレプリケーションの遅延を 10 分以内に保ちます。この機能は特定のリージョン間でのみサポートされており、追加の クロスリージョンレプリケーション RTC 料金 が発生します。詳細については、「RTC 機能の説明」をご参照ください。
説明クロスリージョンレプリケーションルールは、作成後に変更または削除することはできません。[OK] をクリックする前に、すべての設定項目を注意深く確認してください。レプリケーションを終了するには、レプリケーションタスクを停止してデータ同期を停止できます。
すべての設定が正しいことを確認したら、[OK] をクリックし、次に [有効化の確認] をクリックします。
レプリケーションタスクは、ルールが正常に作成されてから数分以内に開始されます。データレプリケーションは非同期プロセスです。必要な時間は、オブジェクトのサイズと数、およびクロスリージョンのネットワーク遅延によって異なります。このプロセスには数分から数時間かかることがあります。ソースバケットの [クロスリージョンレプリケーション] タブで、履歴データと増分データの同期ステータスを含むレプリケーションの進行状況を表示できます。
よくある質問
ソースバケット内のオブジェクトのストレージタイプまたは最終アクセス時間の変更が、宛先バケットに同期されないのはなぜですか?
データレプリケーションは、追加、削除、変更などのオブジェクトコンテンツの変更によってのみトリガーされます。ライフサイクルルールや CopyObject 操作などのストレージタイプを変更する操作、または最終アクセス時間 (LastAccessTime) の更新は、オブジェクトコンテンツの書き込みを伴いません。したがって、これらのアクションは新しいレプリケーションタスクをトリガーせず、宛先バケット内のオブジェクトレプリカは更新されません。
解決策:
ストレージタイプの同期: 同じストレージタイプのトランジションを実現するには、ソースバケットに設定されているのと同じライフサイクルルールを宛先バケットに設定します。
LastAccessTimeの更新: 宛先オブジェクトの最終アクセス時間を更新するには、宛先バケット内のオブジェクトに直接アクセスする必要があります。たとえば、GetObjectリクエストを実行して、そのLastAccessTimeをリフレッシュできます。
マルチパートアップロードを使用してアップロードされたオブジェクトはレプリケートされますか?
オブジェクトがマルチパートアップロードを使用してアップロードされると、各パートのアップロード操作が宛先バケットにレプリケートされます。CompleteMultipartUpload 操作を使用してソースバケットでパートがマージされた後、完全なオブジェクトも宛先バケットにレプリケートされます。
カスタムポリシーを使用するよりも簡単な方法でソースアカウントの RAM ロールを承認する方法はありますか?
はい。迅速な権限付与のために、作成した RAM ロールに AliyunOSSFullAccess システムポリシーを付与できます。ただし、このポリシーには、アカウント内のすべての 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}/*"
]
}
]
}