共享访问签名 (SAS) URI 可用于发布你的虚拟机 (VM)。 或者,你可以通过 Azure 计算库在合作伙伴中心共享映像。 请参阅
使用已批准的基础映像创建虚拟机
或
使用自己的映像创建虚拟机
以了解详细说明。
开始之前,需要执行以下操作:
具有用于存储虚拟硬盘驱动器 (VHD) 的容器的
存储帐户
你的
存储帐户密钥
如果已在存储帐户中上传了 VHD,则可以跳过此步骤。
要从 VM 中提取 VHD,你需要先创建 VM 磁盘的快照,然后将 VHD 从快照中提取到你的存储帐户中。
创建 VM 磁盘的快照
登录到
Azure 门户
。
选择“创建资源”,然后搜索并选择“快照”。
在“快照”边栏选项卡中选择“创建”。
选择“订阅”。 选择所选订阅中的现有资源组或创建新资源组,并输入要创建的新资源组的名称。 这是快照将关联的资源组。
输入快照的“名称” 。
对于“源类型”,选择“磁盘”。
选择“源订阅”,即包含 VM 磁盘的订阅。 这可能不同于新快照的目标订阅。
对于
源磁盘
,选择要获取其快照的托管磁盘。
对于“存储类型”,请选择“标准 HDD”,除非你需要将其存储在高性能 SSD 上。
选择“查看 + 创建” 。 成功验证后,选择“创建”。
使用以下脚本将快照导出到你的存储帐户中的某个 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 复制到存储帐户。
在显示的“共享访问签名”菜单中填写以下字段:
- 权限– 选择读取权限。 不要提供“写入”或“删除”权限。
- 开始日期/时间 - 这是 VHD 访问权限的开始日期。 若要防范 UTC 时间更改,提供的日期要比当前日期早一天。 例如,如果当前日期是 2022 年 7 月 15 日,则将日期设置为 07/14/2022。
- 到期日期/时间 – 这是 VHD 访问的权限到期日期。 请提供自当前日期开始算起的至少三周后的日期。
- 若要为此 VHD 创建关联的 SAS URI,请选择“生成 SAS 令牌和 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>
在 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\>'
在运行上述命令之前,请记住插入以下参数值。
start-date
这是 VHD 访问权限的开始日期。 请提供当前日期的前一天的日期。 例如,如果当前日期是 2022 年 7 月 15 日,则将日期设置为 07/14/2022。 以 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。
复制 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>
SAS URI 中没有“st”参数
Specified SAS URL cannot be reached.
使用正确的开始日期(“st”)值更新 SAS URI。
SAS URI 中没有“se”参数
The end date parameter (se) is required.
使用正确的“结束日期”(“se”)值更新 SAS URI。
SAS URI 中不存在“sp=r”
Missing Permissions (sp) must include 'read' (r).
更新 SAS URI,将权限设置为 Read
(“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.
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 中的某些命令可能会生成缩短的值)。
有关详细信息,请参阅使用共享访问签名 (SAS) 授予对 Azure 存储资源的有限访问权限。
验证 SAS URI
在合作伙伴中心发布 SAS URI 之前请先对其进行检查,以免在提交请求后发生 SAS URI 相关的任何问题。 此过程是可选的,但建议这样做。
- URI 包含 VHD 映像文件名(包括扩展名
.vhd
)。
Sp=r
出现在 URI 中间附近。 此字符串显示“已授予读取权限”。
- 当
sr=c
出现时,这表示指定了容器级访问权限。
- 将 URI 复制并粘贴到浏览器中以对 blob 进行测试下载(可以在下载完成之前取消该操作)。
- 在 Azure 市场中创建虚拟机产品/服务