你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure 容器实例 (ACI) 上的机密容器进行的安全密钥发布
使用机密容器产品/服务的 Azure Key Vault (AKV) 的安全密钥发布 (SKR) 流可以通过几种方式实现。 机密容器通过 Linux 内核运行来宾启发式公开 AMD SEV-SNP 设备,该 Linux 内核使用带有必要的 Hyper-V 相关补丁的来宾内固件,我们将其称为直接 Linux 启动 (DLB)。 该平台不使用基于 vTPM 和 HCL 且提供 AMD SEV-SNP 支持的机密 VM。 本概念文档假设你计划在选择机密计算 SKU 的 Azure 容器支持中运行容器
- Azure 提供的挎斗帮助程序容器
- 使用容器应用程序的自定义实现
Azure 提供的挎斗帮助程序容器
开源 GitHub 项目“机密挎斗”详细说明了如何构建此容器,以及准备和运行此挎斗容器需要哪些参数/环境变量。 当前的挎斗实现提供了各种 HTTP REST API,主应用程序容器可以使用这些 API 从 AKV 提取密钥。 通过 Microsoft Azure 证明 (MAA) 进行的集成已经内置。 运行挎斗 SKR 容器的详细准备步骤可在此处找到。
主应用程序容器应用程序可以调用以下示例中定义的挎斗 WEB API 终结点。 挎斗在同一个容器组内运行,是应用程序容器的本地终结点。 可以在此处找到该 API 的完整详细信息
key/release
POST 方法需要以下格式的 JSON:
{
"maa_endpoint": "<maa endpoint>", //https://learn.microsoft.com/en-us/azure/attestation/quickstart-portal#attestation-provider
"akv_endpoint": "<akv endpoint>", //AKV URI
"kid": "<key identifier>" //key name,
"access_token": "optional aad token if the command will run in a resource without proper managed identity assigned"
}
成功后,key/release
POST 方法响应会携带 StatusOK
标头和以下格式的有效负载:
{
"key": "<key in JSON Web Key format>"
}
出现错误时,key/release
POST 方法响应会携带 StatusForbidden
标头和以下格式的有效负载:
{
"error": "<error message>"
}
使用容器应用程序的自定义实现
若要执行扩展 Azure Key Vault (AKV) 功能(即安全密钥发布和 Microsoft Azure 证明 (MAA))的自定义容器应用程序,请使用以下内容作为高级参考流。 一种简单的方法是查看此挎斗 GitHub 项目中当前的挎斗实现代码。
- 步骤 1:使用可导出密钥设置 AKV 并附加发布策略。 在此处了解详细信息
- 步骤 2:使用 Microsoft Entra ID 设置托管标识并将其附加到 AKV。 在此处了解详细信息
- 步骤 3:通过设置机密计算强制执行策略,在 ACI 中使用所需参数部署容器应用程序。 在此处了解详细信息
- 步骤 4:在此步骤中,应用程序应通过执行 IOCTL Linux 套接字调用来提取 RAW AMD SEV-SNP 硬件报告。 不需要任何来宾证明库即可执行此操作。 此处提供有关现有挎斗实现的详细信息
- 步骤 5:提取容器组的 AMD SEV-SNP 证书链。 这些证书由 Azure 主机 IMDS 终结点提供。 在此处了解详细信息
- 步骤 6:将 SNP RAW 硬件报告和证书详细信息发送至 MAA,用于验证和退货索赔。 在此处了解详细信息
- 步骤 7:将 MAA 令牌和 ACI 生成的托管标识令牌发送到 AKV 进行密钥发布。 在此处了解详细信息
成功从 AKV 提取密钥后,可以使用密钥来解密数据集或加密从机密容器环境传出的数据。
参考
使用 SKR AKV 密钥进行加密 blob 提取和解密的挎斗实现