設定來源存取權:Microsoft Azure 儲存體

從 Azure Storage 值區轉移資料前,您必須先設定該值區的存取權,Storage 轉移服務才能擷取其中的物件。

Storage 移轉服務支援下列 Azure 驗證方法:

  • 共用存取簽章 (SAS) 權杖。建立轉移作業時,可以直接指定 SAS 權杖,也可以將權杖儲存在 Secret Manager 中。

  • Azure 共用金鑰可以儲存在 Secret Manager 中,並在建立移轉工作時傳遞密鑰。

  • 同盟憑證會在建立移轉工作時,以 federatedIdentityConfig 物件的形式傳入。

本文也說明如何將 Storage 移轉服務工作人員的 IP 位址新增至 Azure 儲存體防火牆,以允許存取。詳情請參閱「IP 限制」。

支援的地區

Storage 移轉服務可從下列 Microsoft Azure Storage 區域轉移資料:
  • 美洲:美國東部、美國東部 2、美國西部、美國西部 2、美國西部 3、美國中部、美國中北部、美國中南部、美國中西部、加拿大中部、加拿大東部、巴西南部
  • 亞太地區:澳洲中部、澳洲東部、澳洲東南部、印度中部、印度南部、印度西部、東南亞、東亞、日本東部、日本西部、韓國南部、韓國中部
  • 歐洲、中東、非洲 (EMEA):法國中部、 德國中西部、挪威東部、瑞典中部、瑞士北部、 北歐、西歐、英國南部、英國西部、卡達中部、阿拉伯聯合大公國北部、 南非北部

方法 1:使用 SAS 權杖進行驗證

請按照下列步驟,使用 SAS 權杖設定 Microsoft Azure 儲存體容器的存取權。您也可以將 SAS 權杖儲存在 Secret Manager 中;如要這麼做,請按照「在 Secret Manager 中使用 Azure 共用金鑰或 SAS 權杖進行驗證」一文中的操作說明進行。

  1. 建立或使用現有的 Microsoft Azure 儲存體使用者,存取 Microsoft Azure 儲存體 Blob 容器的儲存體帳戶。

  2. 在容器層級建立 SAS 權杖。如需操作說明,請參閱「使用共用存取簽章授予 Azure 儲存體資源的有限存取權」。

    1. 「允許的服務」必須包含「Blob」

    2. 在「Allowed resource types」(允許的資源類型) 中,選取「Container」(容器) 和「Object」(物件)

    3. 「允許的權限」必須包含「讀取」和「列出」。如果移轉作業設定為從來源刪除物件,您也必須加入「刪除」權限。

    4. SAS 權杖的預設到期時間為 8 小時。設定合理的到期時間,確保您能順利完成轉移。

    5. 請勿在「允許的 IP 位址」欄位中指定任何 IP 位址。 Storage Transfer Service 使用各種 IP 位址,且不支援 IP 位址限制。

    6. 「允許的通訊協定」應為「僅限 HTTPS」

  3. 建立權杖後,請記下傳回的 SAS 權杖值。 使用 Storage 移轉服務設定移轉作業時,需要這個值。

方法 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.

Enable the API

設定其他權限

使用者權限

建立密鑰的使用者必須具備下列角色:

  • Secret Manager 管理員 (roles/secretmanager.admin)

瞭解如何授予角色

服務代理權限

Storage 移轉服務代理需要下列 IAM 角色:

  • Secret Manager Secret Accessor (roles/secretmanager.secretAccessor)

如要將角色授予服務代理:

Cloud 控制台

  1. 按照操作說明尋找服務專員的電子郵件地址

  2. 前往 Google Cloud 控制台的「IAM」IAM頁面。

    前往身分與存取權管理頁面

  3. 按一下「授予存取權」

  4. 在「New principals」(新增主體) 文字方塊中,輸入服務代理商的電子郵件地址。

  5. 在「Select a role」(請選擇角色) 下拉式選單中,搜尋並選取「Secret Manager Secret Accessor」(Secret Manager 密碼存取者)

  6. 按一下 [儲存]

gcloud

使用 gcloud projects add-iam-policy-binding 指令,將 IAM 角色新增至服務代理程式。

  1. 按照操作說明尋找服務專員的電子郵件地址

  2. 在指令列中輸入下列指令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

建立密鑰

使用 Secret Manager 建立密鑰:

Cloud 控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 按一下「建立密鑰」

  3. 輸入名稱。

  4. 在「Secret value」(密鑰值) 文字方塊中,以其中一種格式輸入憑證。

    {
      "sas_token" : "SAS_TOKEN_VALUE"
    }
    

    或:

    {
      "access_key" : "ACCESS_KEY"
    }
    
  5. 按一下「建立密鑰」

  6. 建立密鑰後,請記下密鑰的完整資源名稱:

    1. 選取「總覽」分頁標籤。

    2. 複製「資源名稱」的值。格式如下:

      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 憑證。

  1. 擷取您開始使用 Storage 移轉服務時自動建立的 Google 管理服務代理程式 accountEmailsubjectId。如要擷取這些值,請按照下列步驟操作:

    1. 前往googleServiceAccounts.get參考頁面

      系統會開啟互動式面板,標題為「試試這個方法」

    2. 在面板的「Request parameters」(要求參數) 下方,輸入專案 ID。您在此指定的專案,必須是您用來管理 Storage 移轉服務的專案。

    3. 按一下 [Execute] (執行)。回覆中會包含 accountEmailsubjectId。儲存這些值。

  2. 服務帳戶憑證建立者 (roles/iam.serviceAccountTokenCreator) 角色授予 Storage Transfer Service 服務代理程式。請按照「管理服務帳戶的存取權」一文中的操作說明進行。

設定 Microsoft 憑證

首先,請註冊應用程式並新增聯盟憑證:

  1. 登入 https://portal.azure.com
  2. 前往「App registrations」頁面。
  3. 按一下 [新增註冊]
  4. 輸入名稱。例如 azure-transfer-app
  5. 選取「Accounts in this organizational directory only」
  6. 按一下「Register」(註冊)。應用程式已建立,請注意 Application (client) IDDirectory (tenant) ID。您也可以稍後從應用程式的「總覽」頁面擷取這些內容。
  7. 按一下「憑證和密鑰」,然後選取「聯合憑證」分頁標籤。
  8. 按一下「新增憑證」
  9. 選取「其他發行者」做為情境,然後輸入下列資訊:
    • 發卡機構:https://accounts.google.com
    • 主體 ID:服務代理的 subjectId,您在「設定 Google Cloud 憑證」中擷取。
    • 聯盟憑證的專屬名稱。
    • 目標對象必須維持「api://AzureADTokenExchange」。
  10. 按一下「新增」

接著,授予應用程式 Azure 儲存體容器的存取權:

  1. 前往 Azure 帳戶的「儲存體帳戶」頁面。
  2. 選取儲存空間帳戶,然後從「資料儲存空間」部分選取「容器」
  3. 按一下要授予存取權的值區。
  4. 按一下左側選單中的「存取控制 (IAM)」,然後選取「角色」分頁標籤。
  5. 按一下任一角色旁的溢位 (...) 選單,然後選取「複製」
  6. 輸入這個自訂角色的名稱,然後選取「從頭開始」。按一下「下一步」
  7. 按一下「新增權限」,然後搜尋 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
  8. 按一下隨即顯示的「Microsoft Storage」資訊卡。
  9. 選取「資料動作」圓形按鈕。
  10. 選取「Read : Read Blob」(讀取:讀取 Blob)
  11. 按一下「新增」
  12. 如果要在轉移後刪除來源中的物件,請再次按一下「新增權限」,然後搜尋 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
  13. 按一下顯示的「Microsoft Storage」資訊卡,選取「資料動作」,然後選取「刪除:刪除 Blob」
  14. 按一下「新增」
  15. 按一下「檢閱並建立」,然後按一下「建立」。系統會將您帶回 bucket 的「Access Control (IAM)」頁面。
  16. 按一下「新增」,然後選取「新增角色指派」
  17. 從角色清單中選取自訂角色,然後按一下「下一步」
  18. 按一下「選取成員」
  19. 在「Select」(選取) 欄位中,輸入您先前註冊的應用程式名稱。例如:azure-transfer-app
  20. 按一下應用程式圖塊,然後點選「選取」
  21. 按一下「Review + assign」

將應用程式 ID 傳遞至工作建立指令

應用程式的 ID 會透過 federatedIdentityConfig 物件傳遞至工作建立指令。將您在「設定 Microsoft 憑證」步驟中儲存的「應用程式 (用戶端) ID」和「目錄 (租戶) ID」,複製到 client_idtenant_id 欄位。

"federatedIdentityConfig": {
  "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",
      "federatedIdentityConfig": {
        "client_id": "AZURE_CLIENT_ID",
        "tenant_id": "AZURE_TENANT_ID"
      }
    },
    "gcsDataSink": {
      "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
    }
  }
}

如要進一步瞭解如何建立轉移作業,請參閱「建立轉移作業」。

IP 限制

如果您使用 Azure 儲存體防火牆限制 Azure 資源的存取權,請務必將 Storage Transfer Service 工作人員使用的 IP 範圍新增至允許的 IP 清單。

由於這些 IP 範圍可能會變動,我們會在永久位址發布目前的 JSON 檔案值:

https://www.gstatic.com/storage-transfer-service/ipranges.json

在檔案中新增範圍後,我們至少會等待 7 天,才會將該範圍用於儲存空間轉移服務的要求。

建議您至少每週從這份文件提取資料,確保安全設定維持在最新狀態。如需從 JSON 檔案擷取 IP 範圍的 Python 指令碼範例,請參閱這篇虛擬私有雲說明文件

如要將這些範圍新增為允許的 IP,請按照 Microsoft Azure 文章「設定 Azure 儲存空間防火牆和虛擬網路」中的操作說明進行。