4

我正在使用一个 ARM 模板,该模板为 Service Fabric 群集创建了一个 VM 规模集,并将一些机密与密钥库中的 VM 相关联。今天早上我发现虚拟机和 keyvault 似乎必须存在于同一区域,否则我会收到如下错误:

New-AzureRmResourceGroupDeployment : 9:24:55 AM - Resource Microsoft.Compute/virtualMachineScaleSets 'StdNode' failed with message '{   "status": "Failed",   "error": {
    "code": "ResourceDeploymentFailure",
    "message": "The resource operation completed with terminal provisioning state 'Failed'.",
    "details": [
      {
        "code": "KeyVaultAndVMInDifferentRegions",
        "message": "The Key Vault https://obscured.vault.azure.net/secrets/secretname/1112222aa31c4dcca4363bb0013e9999 is located in location West US, which is different from the  location of the VM, northcentralus. "
      }
    ]   } }'

这感觉像是人为的限制,对我来说是一个主要问题。我想要一个集中的密钥库,在其中部署我的所有秘密并从我的所有部署中使用它们。不得不在世界各地复制我的秘密似乎很荒谬,而且很容易出错。在跨区域获取秘密时,这里应该没有重大的性能问题。那么这背后的原因是什么,它会改变吗?

Azure Scale Sets 团队中的任何人都想为此提供一些颜色吗?

4

3 回答 3

3

我们强制执行区域边界的原因是为了防止用户创建具有跨区域依赖关系的架构。

对于这样设计的应用程序,japaneast 数据中心的中断将导致 JapanWest 中的 VMSS 无法成功横向扩展。

区域隔离是基于云的应用程序的关键设计原则,我们希望尽可能防止用户做出错误的选择。

我们不允许交叉订阅引用的原因是作为防止恶意用户使用 CRP 作为权限提升机制来访问其他用户机密的重要最后一步。在 ARM 中还有其他机制也可以防止这种情况发生,但它们是基于配置的。

于 2016-09-29T19:30:22.233 回答
1

为了克服这个问题,您可能只想应用一个简单的修复

Get-AzVM -ResourceGroupName "rg1" -Name "vm1" | Remove-AzVMSecret | Update-AzVM

这将删除较早的密钥并重新发布一个新密钥,以便您的虚拟机回到配置状态。

于 2020-01-02T08:46:47.993 回答
0

您可以使用您为模板参数访问的中央密钥保管库的体系结构,并将这些机密存储在区域密钥保管库中。然后链接到规模集的区域密钥保管库。如果机密是证书,您可以使用 ARM 函数来正确格式化证书(作为机密),以便作为 VM/VMSS 上的 OSImage 属性的一部分导入。

可以在这里找到更深入的了解:https ://devblogs.microsoft.com/premier-developer/centralized-vm-certificate-deployment-across-multiple-regions-with-arm-templates/

于 2020-02-12T14:11:34.967 回答