注意
共用存取簽章 (SAS) URI 可用來發佈虛擬機 (VM)。 或者,您也可以透過 Azure 計算資源庫在合作夥伴中心共用映像。 如需進一步指示,請參閱 使用核准的基底 建立虛擬機,或 使用您自己的映像建立虛擬機。
開始之前,您將需要以下項目:
從 VM 擷取 VHD
注意
如果您已經將 VHD 上傳至記憶體帳戶,則可以略過此步驟。
若要從 VM 擷取 VHD,您必須先擷取 VM 磁碟的快照集,然後將 VHD 從快照集擷取到記憶體帳戶。
擷取 VM 磁碟的快照
- 登入 Azure 入口網站。
- 選取 [建立資源],然後搜尋並選取 [快照]。
- 在「快照」窗格中,選取 「建立」。
- 選取 訂用帳戶。 在選取的訂用帳戶內選取現有的資源群組,或 [建立新的],然後輸入要建立的新資源群組的名稱。 這是快照集將與其相關聯的資源群組。
- 輸入快照 名稱。
- 針對 [來源類型],選取 [磁碟]。
- 選取 來源訂用帳戶,這是包含 VM 磁碟的訂用帳戶。 這可能與新快照集的目標訂閱帳戶不同。
- 針對 來源磁碟,選取要進行快照的受控磁碟。
- 針對 記憶體類型,除非您需要儲存在高效能 SSD 上,否則請選取 [標準 HDD]。
- 選擇 檢閱 + 建立。 驗證成功後,請選取 建立。
將 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 記憶體瀏覽器
- 移至 記憶體帳戶。
- 開啟 儲存器瀏覽器,然後選取 Blob 儲存容器。
- 在您的 容器中,右鍵點擊 VHD 檔案,然後選取 [產生 SAS]。
- 當出現 [共用存取簽章] 選項時,完成下列欄位:
- 許可權 – 選取讀取許可權。 請勿提供寫入或刪除許可權。
- 開始日期/時間 – 這是 VHD 存取的許可權開始日期。 若要防止 UTC 時間變更,請提供目前日期前一天的日期。 例如,如果目前的日期是 2022 年 7 月 15 日,請將日期設定為 2022/07/14。
- 到期日期/時間 – 這是 VHD 存取的許可權到期日。 提供至少比目前日期還三周的日期。
- 若要為此 VHD 建立相關聯的 SAS URI,請選擇 [產生 SAS Token 與 URL]。
- 複製 Blob SAS URL,並將它儲存到安全位置的文字檔。
- 針對您想要發佈的每個 VHD 重複這些步驟。
注意
如果您需要同時產生具有讀取和清單許可權的 SAS URI,您可以在容器層級產生它。 請遵循上述相同的步驟,但請務必同時選取讀取和列表許可權。 完成步驟 6 之後,您必須在 “?sp=rl” 之前新增 Blob 檔名,以參考容器內的 VHD 檔案。 例如,如果 VHD 檔案是 “mytestvhd.vhd”,SAS URI 看起來會像這樣:
<container-service-endpoint>/mytestvhd.vhd?<sas-connection-string>
使用工具 2:Azure CLI
在 Azure CLI 中,執行下列命令:
Azure CLICopy
開啟 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\>'
執行上述命令之前,請記得插入下列參數值。
參數值 描述 帳戶名稱 您的 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。 複製 SAS 連接字串,並將它儲存到安全位置的文字檔。 編輯此字串以新增 VHD 位置資訊,以建立最終的 SAS URI。
在 Azure 入口網站中,移至包含與新 URI 相關聯之 VHD 的 Blob 容器。
複製 Blob 服務端點的 URL。
使用步驟 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(您可以在下載完成之前取消作業)。
相關內容
- 在 Azure Marketplace 上建立虛擬機供應專案