共用方式為


產生 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. 針對 記憶體類型,除非您需要儲存在高效能 SSD 上,否則請選取 [標準 HDD]。
  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: /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 複製到記憶體帳戶。

命令 筆記
az disk grant-access 產生唯讀 SAS,用來將基礎 VHD 檔案複製到記憶體帳戶,或將其下載至內部部署。
az 儲存 blob 複製開始 以異步方式將 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 Token 與 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. 執行上述命令之前,請記得插入下列參數值。

    參數值 描述
    帳戶名稱 您的 Azure 記憶體帳戶名稱。
    帳戶密鑰 您的 Azure 記憶體帳戶金鑰。
    容器名稱 裝載 VHD 檔案的 Blob 容器。
    起始日期 這是 VHD 存取的許可權開始日期。 提供目前日期前一天的日期。 例如,如果目前的日期是 2022 年 7 月 15 日,請將日期設定為 2022/07/14。 以 UTC 日期/時間格式提供日期(YYYY-MM-DDT00:00:00Z),例如 2022-04-01T00:00:00Z。
    有效期限 這是 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 時遇到的常見錯誤,以及建議的解決方案。

問題 失敗訊息 修復
在 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. 更新 SAS URI,使用適當的 結束日期("se")值。
“sp=r” 不在 SAS URI 中 Missing Permissions (sp) must include 'read' (r). 使用設定為 Read 的許可權來更新 SAS URI(“sp=r” )。
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.

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 中的某些命令預設可能會產生縮短的值)。

如需詳細資訊,請參閱 使用共用存取簽章 (SAS)授與對 Azure 記憶體資源的有限存取權。

確認 SAS URI

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

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