你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:✔️ Linux VM
本“作方法”演示如何使用 Azure Command-Line 接口(Azure CLI)为 Azure 中的机密虚拟机(机密 VM)创建自定义映像。 Azure CLI 用于通过命令行或脚本创建和管理 Azure 资源。
创建自定义映像允许使用满足要求的特定软件、设置和安全措施预配置机密 VM。 如果要导入与 机密 VM 不兼容的 Ubuntu 映像,可以按照以下步骤查看您的映像所需的最低要求。
先决条件
如果没有 Azure 订阅,请在开始之前 创建一个免费的 Azure 帐户 。
启动 Azure Cloud Shell
Azure Cloud Shell 是免费的交互式 shell,可以使用它运行本文中的操作步骤。 它预装了常用的 Azure 工具,并已配置好以便与您的帐户一起使用。
若要打开 Cloud Shell,只需要从代码块的右上角选择“试一试”。 也可以在单独的浏览器标签页中通过转到 https://shell.azure.com/bash 打开 Cloud Shell。 选择 “复制” 以复制代码块,将其粘贴到 Cloud Shell 中,然后选择 Enter 以运行它。
如果想要在本地安装和使用 CLI,本快速入门需要 Azure CLI 2.0.30 或更高版本。 运行 az --version 即可查找版本。 如果需要安装或升级,请参阅 安装 Azure CLI。
创建资源组
使用“az group create”命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。
注释
机密 VM 并非在所有位置都可用。 有关当前支持的位置,请参阅 Azure 区域提供哪些 VM 产品。
az group create --name $resourceGroupName --location eastus
为 Azure 机密 VM 创建自定义映像
从 Azure 支持的映像列表中创建具有所选 Ubuntu 映像的虚拟机。
确保内核版本至少为 5.15.0-1037-azure。 连接到 VM 后,可以使用“uname -r”来检查内核版本。 在这里,可以根据需要向图像添加任何更改。
解除分配虚拟机。
az vm deallocate --name $vmname --resource-group $resourceGroupName为 OS 磁盘创建共享访问令牌(SAS 令牌),并将其存储在变量中。 请注意,此 OS 磁盘不必与机密 VM 位于同一资源组中。
disk_name=$(az vm show --name $vmname --resource-group $resourceGroupName | jq -r .storageProfile.osDisk.name) disk_url=$(az disk grant-access --duration-in-seconds 3600 --name $disk_name --resource-group $resourceGroupName | jq -r .accessSas)
创建用于存储导出磁盘的存储帐户
- 创建存储帐户。
az storage account create --resource-group ${resourceGroupName} --name ${storageAccountName} --location $region --sku "Standard_LRS" - 在存储帐户中创建容器。
az storage container create --name $storageContainerName --account-name $storageAccountName --resource-group $resourceGroupName - 为 存储容器 生成读取共享访问令牌(SAS 令牌),并将令牌保存在变量中。
container_sas=$(az storage container generate-sas --name $storageContainerName --account-name $storageAccountName --auth-mode key --expiry 2024-01-01 --https-only --permissions dlrw -o tsv) - 使用 azcopy 将 OS 磁盘复制到存储容器。
blob_url="https://${storageAccountName}.blob.core.windows.net/$storageContainerName/$referenceVHD" azcopy copy "$disk_url" "${blob_url}?${container_sas}"
创建机密支持的映像
- 创建共享映像库。
az sig create --resource-group $resourceGroupName --gallery-name $galleryName - 创建机密 VM 支持的共享映像库 (SIG) 定义。 为图库图像定义、共享映像库发布者和 SKU 设置新名称。
az sig image-definition create --resource-group $resourceGroupName --location $region --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --publisher $sigPublisherName --offer ubuntu --sku $sigSkuName --os-type Linux --os-state specialized --hyper-v-generation V2 --features SecurityType=ConfidentialVMSupported - 获取存储帐户 ID。
storageAccountId=$(az storage account show --name $storageAccountName --resource-group $resourceGroupName | jq -r .id) - 创建 SIG 映像版本。
az sig image-version create --resource-group $resourceGroupName --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --os-vhd-storage-account $storageAccountId --os-vhd-uri $blob_url - 存储在上一步中创建的 SIG 映像版本的 ID。
galleryImageId=$(az sig image-version show --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --gallery-name $galleryName --resource-group $resourceGroupName | jq -r .id)
创建机密 VM
- 使用 az vm create 命令创建 VM。 有关详细信息,请参阅 安全启动和 vTPM。 有关磁盘加密的详细信息,请参阅 机密 OS 磁盘加密。 目前机密 VM 支持 DC 系列 和 EC 系列 VM 大小。
az vm create \ --resource-group $resourceGroupName \ --name $cvmname \ --size Standard_DC4as_v5 \ --enable-vtpm true \ --enable-secure-boot true \ --image $galleryImageId \ --public-ip-sku Standard \ --security-type ConfidentialVM \ --os-disk-security-encryption-type VMGuestStateOnly \ --specialized