OSS は、バケット間でデータをレプリケーションするために、リソースアクセス管理 (RAM) ロールを偽装します。このロールにアタッチする権限は、ソースバケットおよび送信先バケットが同じ Alibaba Cloud アカウントに属しているか、異なるアカウントに属しているかによって異なります。
前提条件
開始する前に、以下を確認してください。
OSS (
oss.aliyuncs.com) を信頼できるエンティティとする RAM ロールソースバケットと送信先バケットの両方のアカウントへのアクセス (クロスアカウントレプリケーションの場合は、アカウント A とアカウント B の両方へのアクセス)
仕組み
各レプリケーションタスクでは、OSS がお客様が作成した RAM ロールを偽装する必要があります。このロールには、2 種類のポリシーを付与する必要があります。
信頼ポリシー — OSS がロールを偽装することを承認します
権限ポリシー — ソースバケットと送信先バケットに対する最小限必要な操作を付与します
RAM ポリシーの Resource フィールドは、同一の Alibaba Cloud アカウント内のリソースのみを参照できるため、ポリシーの構造は、同一アカウントレプリケーションとクロスアカウントレプリケーションで異なります。
| シナリオ | ソース側の設定 | 送信先側の設定 |
|---|---|---|
| 同一アカウント | ロール上の RAM ポリシー (両方のバケットを対象) | — |
| クロスアカウント | アカウント A のロール上の RAM ポリシー (ソースバケットのみ) | アカウント B の送信先バケット上のバケットポリシー |
同一アカウントレプリケーションの権限設定
信頼ポリシー
次の信頼ポリシーを RAM ロールにアタッチします。これにより、OSS がロールを偽装することを承認します。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"oss.aliyuncs.com"
]
}
}
],
"Version": "1"
}権限ポリシー
次の RAM ポリシーをロールにアタッチします。これにより、ソースバケットと送信先バケットの両方に対する最小限の操作が付与されます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ReplicateList",
"oss:ReplicateGet"
],
"Resource": [
"acs:oss:*:*:src-bucket",
"acs:oss:*:*:src-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"oss:ReplicateList",
"oss:ReplicateGet",
"oss:ReplicatePut",
"oss:ReplicateDelete"
],
"Resource": [
"acs:oss:*:*:dest-bucket",
"acs:oss:*:*:dest-bucket/*"
]
}
]
}src-bucket と dest-bucket を実際のバケット名に置き換えてください。
操作リファレンス
| 操作 | 範囲 | 説明 |
|---|---|---|
oss:ReplicateList | ソースバケットと送信先バケット | ソースバケット内の履歴オブジェクトをリストし、OSS がそれらを送信先にレプリケートできるようにします |
oss:ReplicateGet | ソースバケットと送信先バケット | オブジェクト、パート、マルチパートアップロードタスク、およびオブジェクトのメタデータを読み取ります |
oss:ReplicatePut | 送信先バケット | オブジェクト、パート、マルチパートアップロードタスク、シンボリックリンク、およびオブジェクトのメタデータを送信先に書き込みます |
oss:ReplicateDelete | 送信先バケット | 送信先で DeleteObject、AbortMultipartUpload、および DeleteMarker 操作を実行します |
oss:ReplicateDelete は、[レプリケーションポリシー] を [追加/削除/変更] に設定した場合にのみ必要です。
クロスアカウントレプリケーションの権限設定
クロスアカウントレプリケーションは、アカウント A (ソースバケット) とアカウント B (送信先バケット) を使用します。設定は同一アカウントレプリケーションと類似していますが、2 つの違いがあります。
アカウント A の RAM ポリシーは、ソースバケットのみを対象とし、送信先バケットは対象としません。
アカウント B は、アカウント A の RAM ロールに送信先バケットへのアクセスを付与するバケットポリシーを追加する必要があります。
ステップ 1: アカウント A の RAM ロールへのポリシーのアタッチ
信頼ポリシー — 同一アカウントの信頼ポリシーと同一です。アカウント A の RAM ロールにアタッチします。
権限ポリシー — アカウント A のロールにソースバケットに対する最小限の権限のみを付与します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ReplicateList",
"oss:ReplicateGet"
],
"Resource": [
"acs:oss:*:*:src-bucket",
"acs:oss:*:*:src-bucket/*"
]
}
]
}src-bucket を実際のソースバケット名に置き換えてください。
ステップ 2: アカウント B の送信先バケットへのバケットポリシーの追加
アカウント B で、次のバケットポリシーを送信先バケットに追加します。これにより、アカウント A の RAM ロールにレプリケートされたデータを書き込むために必要な権限が付与されます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ReplicateList",
"oss:ReplicateGet",
"oss:ReplicatePut",
"oss:ReplicateDelete"
],
"Principal": [
"arn:sts::src-uid:assumed-role/role-name/*"
],
"Resource": [
"acs:oss:*:dest-uid:dest-bucket",
"acs:oss:*:dest-uid:dest-bucket/*"
]
}
]
}プレースホルダーを、ご利用の環境の値に置き換えてください。
| プレースホルダー | 説明 |
|---|---|
src-uid | ソースバケットが属する Alibaba Cloud アカウントの UID |
role-name | アカウント A で作成された RAM ロールの名前 |
dest-uid | 送信先バケットが属する Alibaba Cloud アカウントの UID |
dest-bucket | 送信先バケットの名前 |
操作の説明については、「操作リファレンス」をご参照ください。