共用方式為


產生 VM 映像的 SAS URI

注意

共用存取簽章 (SAS) URI 可用來發佈虛擬機 (VM)。 或者,您也可以透過 Azure 計算資源庫在合作夥伴中心共用映像。 如需 進一步指示,請參閱使用核准的基底 建立虛擬機或 使用您自己的映像 建立虛擬機。

開始之前,您將需要下列專案:

從 VM 擷取 VHD

注意

如果您已經將 VHD 上傳至記憶體帳戶,則可以略過此步驟。

若要從 VM 擷取 VHD,您必須先擷取 VM 磁碟的快照集,然後將 VHD 從快照集擷取到記憶體帳戶。

擷取 VM 磁碟的快照集

  1. 登入 Azure 入口網站
  2. 選取 [建立資源],然後搜尋並選取 [ 快照集]。
  3. 在 [快照集] 刀鋒視窗中,選取 [ 建立]。
  4. 選取 [訂用帳戶]。 在選取的訂用帳戶或 [新建 ] 內選取現有的資源群組,然後輸入要建立之新資源群組的名稱。 這是快照集將與其相關聯的資源群組。
  5. 輸入快照集的 [名稱]
  6. 針對 [ 來源類型],選取 [ 磁碟]。
    1. 選取 [ 來源訂用帳戶],這是包含 VM 磁碟的訂用帳戶。 這可能與新快照集的目的地訂用帳戶不同。
  7. 在 [來源磁碟] 中,選取要建立快照集的受控磁碟。
  8. 針對 [ 記憶體類型],請選取 [標準 HDD ],除非您需要儲存在高效能 SSD 上。
  9. 選取 [檢閱 + 建立] 。 驗證成功后,選取 [ 建立]。

將 VHD 擷取到記憶體帳戶

使用下列腳本,將快照集導出至記憶體帳戶中的 VHD。 針對每個參數,請據以插入資訊。

#Provide the subscription Id where the snapshot is created
subscriptionId=yourSubscriptionId

#Provide the name of your resource group where the snapshot is created
resourceGroupName=myResourceGroupName

#Provide the snapshot name
snapshotName=mySnapshot

#Provide Shared Access Signature (SAS) expiry duration in seconds (such as 3600)
#Know more about SAS here: https://learn.microsoft.com/azure/storage/storage-dotnet-shared-access-signature-part-1
sasExpiryDuration=3600

#Provide storage account name where you want to copy the underlying VHD file.
storageAccountName=mystorageaccountname

#Name of the storage container where the downloaded VHD will be stored.
storageContainerName=mystoragecontainername

#Provide the access key for the storage account that you want to copy the VHD to.
storageAccountKey=mystorageaccountkey

#Give a name to the destination VHD file to which the VHD will be copied.
destinationVHDFileName=myvhdfilename.vhd

az account set --subscription $subscriptionId

sas=$(az snapshot grant-access --resource-group $resourceGroupName --name $snapshotName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv)

az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas

上述腳本會使用下列命令來產生快照集的SAS URI,並使用SAS URI將基礎 VHD 複製到記憶體帳戶。

Command 注意
az disk grant-access 產生唯讀 SAS,用來將基礎 VHD 檔案複製到記憶體帳戶,或將其下載至內部部署。
az storage blob copy start 以異步方式將 Blob 從一個記憶體帳戶複製到另一個記憶體帳戶。 使用 az storage blob show 來檢查新 Blob 的狀態。

產生SAS URI

有兩個常用工具來建立 SAS 位址(URI):

  • Azure 儲存體 瀏覽器 – 可在 Azure 入口網站 上使用。
  • Azure CLI – 建議用於非 Windows 作業系統和自動化或持續整合環境。

使用工具 1:Azure 儲存體 瀏覽器

  1. 移至您的 記憶體帳戶
  2. 開啟 [記憶體瀏覽器 ],然後選取 [Blob 容器]。
  3. 在您的 容器中,以滑鼠右鍵按下 VHD 檔案,然後選取 [ 產生 SAS]。
  4. 在顯示的 [ 共用存取簽章 ] 功能表中,完成下列欄位:
    • 許可權 – 選取讀取許可權。 請勿提供寫入或刪除許可權。
    • 開始日期/時間 – 這是 VHD 存取的許可權開始日期。 若要防止 UTC 時間變更,請提供目前日期前一天的日期。 例如,如果目前的日期是 2022 年 7 月 15 日,請將日期設定為 2022/07/14。
    • 到期日期/時間 – 這是 VHD 存取的許可權到期日。 提供至少比目前日期還三周的日期。
  5. 若要為此 VHD 建立相關聯的 SAS URI,請選取 [ 產生 SAS 令牌和 URL]。
  6. 複製 Blob SAS URL,並將它儲存到安全位置的文字檔。
  7. 針對您想要發佈的每個 VHD 重複這些步驟。

注意

如果您需要同時產生具有讀取和清單許可權的 SAS URI,您可以在容器層級產生它。 請遵循上述相同的步驟,但請務必同時選取讀取和列表許可權。 完成步驟 6 之後,您必須在 “?sp=rl” 之前新增 Blob 檔名,以參考容器內的 VHD 檔案。 例如,如果 VHD 檔案是 “mytestvhd.vhd”,SAS URI 看起來會像這樣:

<container-service-endpoint>/mytestvhd.vhd?<sas-connection-string>

使用工具 2:Azure CLI

  1. 在 Azure CLI 中,執行下列命令: Azure CLICopy

  2. 開啟 Cloud Shell,執行下列命令:

    az storage container generate-sas --connection-string 'DefaultEndpointsProtocol=https;AccountName=\<account-name\>;AccountKey=\<account-key\>;EndpointSuffix=core.windows.net' --name \<container-name\> --permissions r --start '\<start-date\>' --expiry '\<expiry-date\>'

  3. 執行上述命令之前,請記得插入下列參數值。

    參數值 描述
    account-name 您的 Azure 記憶體帳戶名稱。
    account-key 您的 Azure 記憶體帳戶金鑰。
    container-name 裝載 VHD 檔案的 Blob 容器。
    start-date 這是 VHD 存取的許可權開始日期。 提供目前日期前一天的日期。 例如,如果目前的日期是 2022 年 7 月 15 日,請將日期設定為 2022/07/14。 以 UTC 日期/時間格式提供日期(YYYY-MM-DDT00:00:00Z),例如 2022-04-01T00:00:00Z。
    expiry-date 這是 VHD 存取的許可權到期日。 提供目前日期之後至少三周的日期。 以 UTC 日期/時間格式提供日期(YYYY-MM-DDT00:00:00Z),例如 2022-04-01T00:00:00Z。
  4. 複製 SAS 連接字串,並將它儲存到安全位置的文字檔。 編輯此字串以新增 VHD 位置資訊,以建立最終的 SAS URI。

  5. 在 Azure 入口網站 中,移至包含與新 URI 相關聯之 VHD 的 Blob 容器。

  6. 複製 Blob 服務端點的 URL。

  7. 使用步驟 2 中的 SAS 連接字串 編輯文字檔。 使用此格式建立完整的SAS URI。 請務必在端點 URL 與 連接字串 之間插入 “?” 。

    <blob-service-endpoint-url>?<sas-connection-string>

虛擬機 SAS 失敗訊息

下表顯示合作夥伴中心提供共用存取簽章 (SAS) URI 時遇到的常見錯誤,以及建議的解決方案。

問題 失敗訊息 Fix
在 SAS URI 中找不到 “?” Must be a valid Azure shared access signature URI. 請確定提供的 SAS URI 使用適當的語法,並包含 “?”字元。
語法: <blob-service-endpoint-url>?<sas-connection-string>
“st” 參數不在 SAS URI 中 Specified SAS URL cannot be reached. 使用適當的 開始日期 (“st”) 值更新 SAS URI。
“se” 參數不在 SAS URI 中 The end date parameter (se) is required. 使用適當的 結束日期 (“se”) 值更新 SAS URI。
“sp=r” 不在 SAS URI 中 Missing Permissions (sp) must include 'read' (r). 使用設定為 Read 「sp=r」 的許可權來更新 SAS URI。
SAS URI 授權錯誤 Failure: Copying Images. Not able to download blob due to authorization error. 檢閱並更正SAS URI格式。 必要時重新產生。
SAS URI “st” 和 “se” 參數沒有完整的日期時間規格 The start time parameter (st) is not a valid date string.
OR
The end date parameter (se) is not a valid date string.
SAS URI 開始日期和結束日期參數 (“st” 和 “se” 子字串) 必須具有完整的日期時間格式 (YYYY-MM-DDT00:00:00Z),例如 11-02-2017T00:00:00Z。 縮短的版本無效(Azure CLI 中的某些命令預設可能會產生縮短的值)。

如需詳細資訊,請參閱使用共用存取簽章將有限的存取權授與 Azure 儲存體 資源。

確認 SAS URI

在合作夥伴中心發佈 SAS URI 之前,請先檢查 SAS URI,以避免在提交要求之後發生任何與 SAS URI 相關的問題。 此程式是選擇性的,但建議使用。

  • URI 包含您的 VHD 映像檔名,包括擴充名稱 .vhd
  • Sp=r 會出現在 URI 中間附近。 此字串會顯示已授與讀取許可權。
  • 出現時 sr=c ,這表示已指定容器層級存取。
  • 將 URI 複製並貼到瀏覽器中以測試下載 Blob(您可以在下載完成之前取消作業)。