跨地區複製功能可將一個儲存空間(Bucket)內的資料對象,自動、非同步地複製到另一個阿里雲帳號下、位於不同地區的目標 Bucket 中,以實現異地容災、建立跨帳號的隔離備份,或滿足資料駐留的合規性要求。
配置跨帳號複製需要源帳號和目標帳號共同操作,分為三個步驟:
源帳號操作:建立專用於資料複製的RAM角色,並授予其讀取源Bucket資料的最小許可權。
目標帳號操作:修改目標 Bucket 的授權策略,允許源帳號建立的 RAM 角色向其中寫入資料。
返回源帳號操作:建立跨地區複製規則,將源 Bucket 和目標 Bucket 關聯起來,正式啟動複製任務。
步驟一:源帳號建立RAM角色並授權
建立RAM角色:進入建立RAM角色頁面,信任主體類型選擇雲端服務,信任主體名稱選擇Object Storage Service。
為RAM角色授予訪問源Bucket的許可權:建立一個僅包含複製要求的權限的自訂策略用於讀取源Bucket資料以啟動複製任務:
在建立權限原則頁面,單擊指令碼編輯頁簽。將以下策略內容粘貼到策略編輯器中,並將
src-bucket替換為實際的源Bucket名稱。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ReplicateList", "oss:ReplicateGet" ], "Resource": [ "acs:oss:*:*:src-bucket", "acs:oss:*:*:src-bucket/*" ] } ] }建立策略後,在角色頁面,列表中找到剛建立的角色,單擊新增授權。在新增授權面板中,授權主體已自動填滿,權限原則選擇上一步建立的自訂策略,然後單擊確認新增授權。
(可選)為RAM角色授予訪問KMS的許可權:如果複製到目標Bucket的資料會使用KMS加密,則需要為該RAM角色授予KMS存取權限。
在角色頁面,列表中找到剛建立的角色,單擊新增授權。在新增授權面板中,授權主體已自動填滿,權限原則選擇
AliyunKMSCryptoUserAccess,然後單擊確認新增授權。記錄角色ARN:在角色頁面找到建立RAM角色,進入基本資料頁面,複製角色的ARN備用。格式為
acs:ram::{源帳號UID}:role/{角色名稱}。
步驟二:目標帳號授權RAM角色並準備資源
授權RAM角色寫入目標Bucket:在目標帳號側,修改目標Bucket的授權策略,允許源帳號的RAM角色向其中寫入資料。
使用目標帳號進入Bucket列表頁面,單擊目標Bucket。
在左側導覽列,選擇許可權控制 > Bucket 授權策略。
單擊按圖形策略添加頁簽,然後單擊接收複製對象。
在彈出的面板中,按如下說明配置:
UID及RAM角色擷取方式: 選擇從源端複製RAM角色ARN擷取。
源端複製RAM角色ARN: 輸入步驟一記錄的源帳號的RAM角色ARN。
授權用途: 選擇跨帳號地區複製。
單擊產生Policy,然後單擊儲存。
(可選) 配置目標端KMS密鑰:若要複製 KMS 加密的對象,或目標 Bucket 啟用了 KMS 加密,需在目標帳號中預先配置 KMS 密鑰,為密鑰設定密鑰策略,授予源帳號RAM角色使用該密鑰的許可權。設定密鑰策略時,將源帳號建立的RAM角色ARN添加為其他帳號使用者。
此操作預設會授予該角色解密(
kms:Decrypt)和產生資料密鑰(kms:GenerateDataKey)的許可權等必要許可權,允許其使用此密鑰在目標Bucket中建立加密對象。通過控制台嚮導配置通常會預設包含要求的權限,但若通過OpenAPI設定自訂密鑰策略,請務必手動確認這些許可權已正確添加。
步驟三:源帳號建立跨地區複製規則
完成授權後,返回源帳號控制台建立複製規則,正式啟動任務。
使用源帳號進入Bucket列表頁面,單擊源Bucket。
在左側導覽列,選擇資料管理 > 跨地區複製。
單擊跨地區複製,在彈出的對話方塊中配置以下參數:
設定目標Bucket:選擇在另一個帳號中指定一個Bucket,選擇目標Bucket所在地區並輸入其名稱。
設定複製策略:
資料複製對象:選擇全部檔案進行同步或指定檔案名稱首碼進行同步。在源 Bucket內指定首碼的Object複製到目標Bucket,預設最多可以添加10個首碼。如需增加首碼數量,請聯絡申請調整,最多可提升至30個。
資料複製策略:選擇資料同步的方式。在資料容災情境下,選擇增/改 同步可防止源Bucket的意外刪除操作同步到備份Bucket,增強資料安全性。
增/改 同步:僅同步建立和修改的對象。刪除源Bucket中的對象不會影響目標Bucket。通過這種方式,可以有效防止因源Bucket手動刪除、通過生命週期自動刪除的行為導致目標Bucket資料丟失的問題。
增/刪/改 同步:同步建立、修改和刪除操作,使目標Bucket與源Bucket保持一致。通過這種方式,確保了資料的一致性,適用於需要共用和訪問同一資料集的多使用者或應用程式環境。但是配置該策略後,當手動刪除或者通過生命週期自動刪除源Bucket內的Object時,目標Bucket也會刪除對應的Object,且Object刪除後無法恢複。
複製歷史資料:選擇是否複製規則生效前源Bucket中已有的資料。此操作會覆蓋目標 Bucket 中的同名對象。為避免資料丟失,建議為源和目標Bucket都開啟版本控制功能。
(可選)複製 KMS 加密目標對象:如果源端對象已使用KMS加密,並且希望在目標端也保持加密狀態,請勾選此項,並提供在步驟二中準備的目標端KMS密鑰ARN。
說明可以通過HeadObject和GetBucketEncryption分別查詢源Object和目標Bucket的加密狀態。
授權角色:從下拉式清單中選擇步驟一中源帳號建立的RAM角色。
(可選)設定複製加速:
傳輸加速: 當複製任務涉及中國內地與非中國內地地區時,可開啟此功能以提升資料轉送速度,此功能會產生額外傳輸加速費用。
資料複製時間控制(RTC): 將絕大多數增量資料的複寫延遲控制在10分鐘內。此功能僅在部分地區間支援且會產生額外跨地區複製RTC費用。詳情請參見RTC功能說明。
說明跨地區複製規則一旦建立,將無法修改或刪除。請在單擊“確定”前仔細檢查所有配置項。如需終止複製,可通過關閉複製任務的方式停止資料同步。
確認所有配置無誤後,單擊確定並確認開啟。
複製任務將在規則建立成功後的幾分鐘內啟動。資料複製為非同步過程,具體耗時取決於對象大小、數量以及跨地區網路延遲,可能從幾分鐘到幾小時不等。可在源Bucket的跨地區複製頁簽查看複製進度,包括歷史資料和增量資料的同步狀態。
常見問題
為什麼源Bucket中對象的儲存類型或最後訪問時間變更後,沒有同步到目標Bucket?
資料複製操作僅由對象內容的變更(如增/刪/改)觸發。通過生命週期規則或 CopyObject 操作更改儲存類型,以及最後訪問時間(LastAccessTime)的更新不涉及對象內容的寫入,因此不會觸發新的複製任務,目標 Bucket 中的對象副本不會更新。
解決方案:
同步儲存類型:建議在目標 Bucket 上配置與源Bucket一致的生命週期規則,以實現相同的儲存類型轉換。
更新
LastAccessTime:若需更新目標對象的最後訪問時間,請直接在目標 Bucket 中訪問該對象(例如執行GetObject請求),以觸發其LastAccessTime的重新整理。
分區上傳的對象會被複製嗎?
當通過分區上傳方式上傳的Object,每個分區的上傳操作都會複製至目標Bucket。且在源Bucket中完成合併(CompleteMultipartUpload)後產生的完整對象也會被作為一個整體複製到目標Bucket。
為源帳號的 RAM 角色授權時,有比自訂策略更簡單的授權方式嗎?
有。如果您希望快速授權,可以直接為建立的 RAM 角色授予阿里雲官方提供的系統策略 AliyunOSSFullAccess。但該策略包含您帳號下所有 OSS 資源的所有許可權,許可權範圍過大,不推薦在生產環境中使用。
為目標 Bucket 授權時,除了圖形化介面,是否支援通過 JSON 策略進行配置?
支援。您可以在目標 Bucket 的Bucket 授權策略頁面選擇按文法策略添加來進行更靈活的配置。使用 JSON 策略時需注意以下幾點:
新添加的策略會覆蓋已有的 Bucket 策略,因此請確保新策略包含了所有需要的授權規則。
策略中的
Principal欄位需要填寫源帳號中 RAM 角色的 ARN。如果角色名稱中包含大寫字母,在策略中需要轉換為小寫。例如,角色
AliyunOssDrsRole在策略中應寫為aliyunossdrsrole。需要準確填寫源帳號的 UID 和目標 Bucket 的名稱及目標帳號的UID。
一個策略樣本如下:
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Action":[
"oss:ReplicateList",
"oss:ReplicateGet",
"oss:ReplicatePut",
"oss:ReplicateDelete"
],
"Principal": [
"arn:sts::{源帳號UID}:assumed-role/{角色名稱}/*"
],
"Resource":[
"acs:oss:*:{目標帳號UID}:{目標Bucket名}",
"acs:oss:*:{目標帳號UID}:{目標Bucket名}/*"
]
}
]
}