通过 ARM 模板部署 Azure ML MSI 可在 Key Vault 上启用清除保护

Posted

技术标签:

【中文标题】通过 ARM 模板部署 Azure ML MSI 可在 Key Vault 上启用清除保护【英文标题】:Azure ML MSI deployment over ARM Templates enables purge protection on Key Vault 【发布时间】:2021-10-04 01:56:40 【问题描述】:

我最近发现,当您从ARM Template 部署Azure ML 实例时,MSI 将覆盖Key Vault 的清除保护设置。它将在Key Vault 上启用清除保护。这不是我要寻找的行为,因为当尝试再次部署它时,模板将失败,指出同名的 Key Vault 已经存在,并且您无法在保留期之前删除。

如果您手动部署 Azure ML 实例并选择 Key Vault,它将保留禁用清除设置。有什么想法可以让我们保持禁用清除功能吗?

我们使用的 Azure ML 属性如下所述:

  
    "type": "Microsoft.MachineLearningServices/workspaces",
    "apiVersion": "2020-09-01-preview",
    "name": "[variables('machineLearningWorkspaceName')]",
    "location": "[parameters('location')]",
    "identity": 
      "type": "[parameters('amlManagedIdentityOption')]"
    ,
    "dependsOn": [
      "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
      "[resourceId('Microsoft.Insights/components', variables('applicationInsightsName'))]",
      "[resourceId('Microsoft.ContainerRegistry/registries', variables('containerRegistryName'))]"
    ],
    "tags": "[parameters('resourceTags')]",
    "properties": 
      "friendlyName": "[variables('machineLearningWorkspaceName')]",
      "storageAccount": "[variables('storageAccount')]",
      "keyVault": "[variables('keyVault')]",
      "applicationInsights": "[variables('applicationInsights')]",
      "containerRegistry": "[ variables('containerRegistry')]",
      "adbWorkspace": "[variables('adbWorkSpace')]",
      "hbiWorkspace": "[parameters('confidential_data')]",
      "allowPublicAccessWhenBehindVnet": "[parameters('allowPublicAccessWhenBehindVnet')]"
    
  

在 Key Vault ARM 上,我们具有以下属性:

         "properties": 
                 "enabledForDeployment": "[parameters('enabledForDeployment')]",
                 "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
                 "enabledForVolumeEncryption": "[parameters('enableVaultForVolumeEncryption')]",
                 "softDeleteRetentionInDays": 7,
                 "tenantId": "[subscription().tenantId]",
                 "copy": [
                     
                         "name": "accessPolicies",
                         "count": "[length(parameters('userObjectId'))]",
                         "input": 
                             "tenantId": "[subscription().tenantId]",
                             "objectId": "[parameters('userObjectId')[copyIndex('accessPolicies')].Id]",
                             "permissions": "[parameters('userObjectId')[copyIndex('accessPolicies')].Permissions]"
                         
 

【问题讨论】:

是否可以在 Azure 门户中查找或与部署模板进行比较?当我尝试使用新的密钥库清除设置从 Azure 门户进行部署时,默认情况下已启用。您是否使用过关闭清除设置的现有密钥库?如果您也从门户创建新的密钥库,您是否也看到类似的行为? 感谢您与我们联系。在门户中,如果选择禁用了清除保护的现有 Key Vault,它将在完成 Azure ML 部署后保持禁用状态。 在密钥库臂上,您应该可以设置enablePurgeProtection: false 【参考方案1】:

场景 1: 使用 Azure 门户 创建了一个 Machine Learning,并将 KeyVault 配置为依赖资源,其中清除生产默认设置为启用

场景 2: 创建了一个 Test keyVault 服务作为独立资源,可以看到 purge production 设置为 disabled 并且可以看到 enable 相同的选项

场景 3: 在部署机器语言 keyVault(禁用清除生产)后,通过portal再次创建Test keyVault(禁用清除生产)Machine language purge production 自动启用

找到一篇公开文章here 问题基本上是在将Key Vault 附加到Azure 机器学习工作区时,会自动激活Key Vault 上的清除保护

【讨论】:

【参考方案2】:

在通过 Azure 中的手动/模板部署 ML 时,默认情况下在 Key Vault 中 enables 软删除和清除保护。它保护密钥免受意外或恶意删除。我们不会把它改成Disable,因为这是设计行为。Refer machine learning security baseline

一旦 Purge Productionenabled,就不能被包括 Microsoft 在内的任何人禁用或覆盖。 Refer

您需要作为功能请求进行投票或提交反馈here

【讨论】:

不完全正确,如果您首先部署 KV 和 Azure ML 并选择 KV,则默认情况下不会启用清除。此外,我们不将其更改为 Disable 的论点,因为它是设计行为不是很强制。

以上是关于通过 ARM 模板部署 Azure ML MSI 可在 Key Vault 上启用清除保护的主要内容,如果未能解决你的问题,请参考以下文章

使用 ARM 模板问题的 Azure 仪表板部署

用于部署和禁用 Azure 流分析服务的 ARM 模板

Azure Functions ARM 模板重新部署会删除我发布的函数

是否可以使用 ARM 模板重新部署 Azure 数据工厂

是否可以通过 ARM 模板将分配的 Azure DSC 配置更新到 VM?

无法使用已装载存储的 Linux 部署 Azure 应用服务的 ARM 模板