從 Azure Storage 值區轉移資料前,您必須設定該值區的存取權,以便 Storage 轉移服務擷取其物件。
Storage 移轉服務支援下列 Azure 驗證方法:
共用存取簽章 (SAS) 權杖。您可以在建立轉移作業時直接指定 SAS 權杖,也可以將權杖儲存在 Secret Manager 中。
Azure 共用金鑰可儲存在 Secret Manager 中,並在建立移轉工作時傳遞密鑰。
在建立移轉工作時,聯合憑證會傳送至
federatedIdentityConfig
物件。
本文件也提供如何將 Storage 移轉服務 worker IP 位址新增至 Azure Storage 防火牆,以便存取的相關資訊。詳情請參閱「IP 限制」一節。
支援的地區
Storage 移轉服務可從下列 Microsoft Azure Storage 區域傳輸資料:- 美洲:美國東部、美國東部 2、美國西部、美國西部 2、美國西部 3、美國中部、美國中北部、美國中南部、美國西中部、加拿大中部、加拿大東部、巴西南部
- 亞太地區:澳洲中部、澳洲東部、澳洲東南部、印度中部、印度南部、印度西部、東南亞、東亞、日本東部、日本西部、韓國南部、韓國中部
- 歐洲、中東、非洲 (EMEA):法國中部、德國西部中部、挪威東部、瑞典中部、瑞士北部、北歐、西歐、英國南部、英國西部、卡達中部、阿拉伯聯合大公國北部、南非北部
方法 1:使用 SAS 權杖進行驗證
請按照下列步驟,使用 SAS 權杖設定 Microsoft Azure 儲存體容器的存取權。您也可以將 SAS 權杖儲存在 Secret Manager 中。如要這麼做,請按照「在 Secret Manager 中使用 Azure 共用金鑰或 SAS 權杖進行驗證」一文中的操作說明進行。
建立或使用現有的 Microsoft Azure 儲存體使用者,存取 Microsoft Azure 儲存體 Blob 容器的儲存體帳戶。
在容器層級建立 SAS 權杖。如需操作說明,請參閱「使用共用存取權簽章授予 Azure Storage 資源的有限存取權」。
「允許的服務」必須包含「Blob」。
在「Allowed resource types」(允許的資源類型) 中,同時選取「Container」(容器)和「Object」(物件)。
「允許的權限」必須包含「讀取」和「列出」。如果移轉作業已設定為從來源刪除物件,您也必須加入刪除權限。
SAS 權杖的預設到期時間為 8 小時。請設定合理的到期時間,讓您順利完成轉移。
請勿在「Allowed IP addresses」欄位中指定任何 IP 位址。儲存空間傳輸服務會使用各種 IP 位址,因此不支援 IP 位址限制。
「Allowed protocols」應為「HTTPS only」。
建立權杖後,請記下傳回的 SAS 權杖值。您在使用儲存空間移轉服務設定移轉作業時,需要使用這個值。
選項 2:在 Secret Manager 中使用 Azure 共用金鑰或 SAS 權杖進行驗證
Secret Manager 是安全的服務,可儲存及管理密碼等機密資料。這項服務會使用強大的加密技術、以角色為基礎的存取權控管,以及稽核記錄來保護您的機密資料。
Storage 移轉服務支援 Secret Manager 資源名稱,可參照安全儲存的 Azure 憑證。
如要使用 Azure 共用金鑰,您必須將金鑰儲存在 Secret Manager 中。SAS 權杖可儲存在 Secret Manager 中,或直接傳遞。
指定共用金鑰後,Storage Transfer Service 會使用該金鑰產生服務 SAS,並將其範圍限制為轉移作業中指定的 Azure 容器。
啟用 API
Enable the Secret Manager API.
設定其他權限
使用者權限
建立密鑰的使用者必須具備以下角色:
- Secret Manager 管理員 (
roles/secretmanager.admin
)
瞭解如何授予角色。
服務代理權限
Storage 移轉服務服務代理需要下列 IAM 角色:
- Secret Manager 密鑰存取服務 (
roles/secretmanager.secretAccessor
)
如要為服務代理授予角色,請按照下列步驟操作:
Cloud 控制台
請按照操作說明擷取服務專員的電子郵件。
前往 Google Cloud 控制台的「IAM」頁面。
按一下「授予存取權」。
在「New principals」(新增主體) 文字方塊中輸入服務專員的電子郵件地址。
在「Select a role」(請選擇角色) 下拉式選單中,搜尋並選取「Secret Manager Secret Accessor」(Secret Manager 密鑰存取工具)。
按一下 [儲存]。
gcloud
使用 gcloud projects add-iam-policy-binding
指令,將 IAM 角色新增至服務代理程式。
請按照操作說明擷取服務專員的電子郵件。
在指令列中輸入下列指令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
建立密鑰
使用 Secret Manager 建立密鑰:
Cloud 控制台
前往 Google Cloud 控制台的「Secret Manager」頁面。
按一下「Create secret」。
輸入名稱。
在「密鑰值」文字方塊中,使用下列格式輸入憑證。
{ "sas_token" : "SAS_TOKEN_VALUE" }
或:
{ "access_key" : "ACCESS_KEY" }
按一下「Create secret」。
建立密鑰後,請記下密鑰的完整資源名稱:
選取「總覽」分頁標籤。
複製「Resource name」的值。格式如下:
projects/1234567890/secrets/SECRET_NAME
gcloud
如要使用 gcloud 指令列工具建立新的機密金鑰,請將 JSON 格式的憑證傳遞至 gcloud secrets create
指令:
printf '{
"sas_token" : "SAS_TOKEN_VALUE"
}' | gcloud secrets create SECRET_NAME --data-file=-
或:
printf '{
"access_key" : "ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
擷取密鑰的完整資源名稱:
gcloud secrets describe SECRET_NAME
請注意回應中的 name
值。格式如下:
projects/1234567890/secrets/SECRET_NAME
如要進一步瞭解如何建立及管理密鑰,請參閱 Secret Manager 說明文件。
將機密資料傳遞至工作建立指令
如要將 Secret Manager 與 Storage 移轉服務搭配使用,您必須使用 REST API 建立移轉作業。
將 Secret Manager 資源名稱做為 transferSpec.azureBlobStorageDataSource.credentialsSecret
欄位的值傳遞:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
如要進一步瞭解如何建立轉移作業,請參閱「建立轉移作業」。
選項 3:使用聯合身分進行驗證
Storage 移轉服務支援 Azure 工作負載身分聯盟與Google Cloud。Storage 移轉服務可透過已註冊的 Azure 應用程式向 Azure 儲存體發出要求,因此無須直接將憑證傳送至 Storage 移轉服務。
如要設定聯合身分,請按照下列操作說明進行。
設定 Google Cloud 憑證
您必須將服務帳戶憑證建立者 (roles/iam.serviceAccountTokenCreator
) 角色新增至 Storage Transfer Service 服務代理,才能為帳戶建立 OpenID Connect (OIDC) ID 權杖。
擷取 Google 管理服務代理程式 (在您開始使用 Storage 移轉服務時自動建立) 的
accountEmail
和subjectId
。如要擷取這些值,請按照下列步驟操作:前往
googleServiceAccounts.get
參考資料頁面。系統會開啟名為「試試這個方法」的互動式面板。
在面板的「Request parameters」下方,輸入專案 ID。您在此處指定的專案必須是用於管理 Storage 移轉服務的專案。
按一下 [Execute] (執行)。回應中包含
accountEmail
和subjectId
。儲存這些值。
將「服務帳戶憑證建立者」(
roles/iam.serviceAccountTokenCreator
) 角色授予 Storage Transfer Service 服務代理。請按照「管理服務帳戶的存取權」中的操作說明進行。
設定 Microsoft 憑證
首先,請註冊應用程式並新增聯盟憑證:
- 登入 https://portal.azure.com。
- 前往「應用程式註冊」頁面。
- 按一下 [新增註冊]。
- 輸入名稱。例如
azure-transfer-app
。 - 選取「僅限這個機構目錄中的帳戶」。
- 按一下「註冊」。應用程式已建立。請注意
Application (client) ID
和Directory (tenant) ID
。您也可以稍後從應用程式的「總覽」頁面擷取這些資訊。 - 按一下「憑證與密鑰」,然後選取「聯合憑證」分頁標籤。
- 按一下「新增憑證」。
- 選取「其他發卡機構」做為情境,然後輸入下列資訊:
- 發卡機構:
https://accounts.google.com
- 主旨 ID:您在「設定 Google Cloud 憑證」中擷取的服務代理
subjectId
。 - 聯合憑證的專屬名稱。
- 目標對象必須維持為
api://AzureADTokenExchange
。
- 發卡機構:
- 按一下「新增」。
接著,授予應用程式存取 Azure 儲存體容器的權限:
- 前往 Azure 帳戶中的「Storage Accounts」頁面。
- 選取儲存空間帳戶,然後在「資料儲存空間」專區選取「容器」。
- 按一下要授予存取權的值區。
- 按一下左側選單中的「存取控制 (IAM)」,然後選取「角色」分頁標籤。
- 按一下任何角色旁邊的溢位選單 (
...
),然後選取「複製」。 - 輸入自訂角色的名稱,然後選取「從頭開始」。按一下「下一步」。
- 按一下「新增權限」,然後搜尋
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
。 - 按一下隨即顯示的「Microsoft Storage」資訊卡。
- 選取「資料動作」圓形按鈕。
- 選取「Read : Read Blob」。
- 按一下「新增」。
- 如果您要在移轉後刪除來源中的物件,請再次點選「新增權限」,然後搜尋
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
。 - 按一下顯示的「Microsoft Storage」資訊卡,選取「Data actions」,然後選取「Delete : Delete blob」。
- 按一下「新增」。
- 依序按一下「Review + create」和「Create」。您會返回值區的「存取權控管 (IAM)」頁面。
- 按一下「新增」,然後選取「新增角色指派」。
- 從角色清單中選取自訂角色,然後點選「下一步」。
- 按一下「選取成員」。
- 在「選取」欄位中,輸入先前註冊的應用程式名稱。例如:
azure-transfer-app
。 - 按一下應用程式圖塊,然後點選「選取」。
- 按一下「查看 + 指派」。
將應用程式 ID 傳遞至工作建立指令
應用程式的 ID 會透過 federatedIdentityConfig
物件傳遞至工作建立指令。複製您在設定 Microsoft 憑證步驟中儲存的應用程式 (用戶端) ID和目錄 (租戶) ID,並貼到 client_id
和 tenant_id
欄位。
"federatedIdentifyConfig": {
"client_id": "efghe9d8-4810-800b-8f964ed4057f",
"tenant_id": "abcd1234-c8f0-4cb0-b0c5-ae4aded60078"
}
工作建立要求範例如下所示:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Azure Federated Identity",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"federatedIdentifyConfig": {
"client_id": "AZURE_CLIENT_ID",
"tenant_id": "AZURE_TENANT_ID"
}
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
如要進一步瞭解如何建立轉移作業,請參閱「建立轉移作業」。
IP 限制
如果您使用 Azure Storage 防火牆限制 Azure 資源的存取權,請務必將 Storage Transfer Service 工作者使用的 IP 範圍新增至許可 IP 清單。
由於這些 IP 範圍可能會變更,我們會在永久位址中以 JSON 檔案的形式發布目前的值:
https://www.gstatic.com/storage-transfer-service/ipranges.json
當檔案新增範圍時,我們會等待至少 7 天,再使用該範圍處理儲存空間轉移服務的請求。
建議您至少每週從這份文件中提取一次資料,以便保持安全性設定的最新狀態。如需從 JSON 檔案擷取 IP 範圍的 Python 指令碼範例,請參閱虛擬私人雲端說明文件中的這篇文章。
如要將這些範圍新增為允許的 IP,請按照 Microsoft Azure 文章「Configure Azure Storage firewalls and virtual networks」中的指示操作。