通过 ARM 模板创建 Azure 密钥保管库、密钥和磁盘加密集

时间:2021-03-23 12:13:13

标签: azure azure-keyvault arm-template

我想通过 ARM 模板创建 Azure 密钥保管库、密钥和磁盘加密集。

我知道如何通过门户执行此操作,并且我知道如何通过 ARM 模板创建密钥保管库、密钥和磁盘加密集,但我不明白的是 1) 如何引用密钥(如在如何获取带有版本号的 keyUrl 和 2) 如何让磁盘加密集访问密钥保管库。在门户中,我通过转到密钥保管库并授予生成的身份访问权限来执行后者,但不确定如何通过 ARM 模板或什至可能这样做。

谢谢。

更新:深入研究一下,我认为做第一个的方法是这样的?

"keyUrl": "[reference(resourceId('Microsoft.KeyVault/vaults/keys', variables('keyvaultName'), variables('keyName'))).keyUriWithVersion]"

(其中保管库名称等存储在引用的变量中)。

1 个答案:

答案 0 :(得分:0)

想出了这个问题的答案。以下代码段部署了一个密钥保管库、一个密钥、一个磁盘加密集,然后是一个允许磁盘加密集访问密钥保管库的访问策略。

        {
            "type": "Microsoft.KeyVault/vaults/keys",
            "apiVersion": "2019-09-01",
            "name": "[concat(variables('keyvaultName'), '/', variables('keyName'))]",
            "location": "[variables('location')]",
            "tags": "[parameters('resourceTags')]",
            "dependsOn": [
                "[resourceId('Microsoft.KeyVault/vaults', variables('keyvaultName'))]"
            ],
            "properties": {
                "kty": "RSA",
                "keySize": 4096
            }
        },
        {
            "type": "Microsoft.Compute/diskEncryptionSets",
            "apiVersion": "2019-07-01",
            "name": "[variables('diskencsetName')]",
            "location": "[variables('location')]",
            "tags": "[parameters('resourceTags')]",
            "dependsOn": [
                "[resourceId('Microsoft.KeyVault/vaults/keys', variables('keyvaultName'), variables('keyName'))]"
            ],
            "identity": {
                "type": "SystemAssigned"
            },
            "properties": {
                "activeKey": {
                    "sourceVault": {
                        "id": "[resourceId('Microsoft.KeyVault/vaults', variables('keyvaultName'))]"
                    },
                    "keyUrl": "[reference(resourceId('Microsoft.KeyVault/vaults/keys', variables('keyvaultName'), variables('keyName')), '2019-09-01', 'Full').properties.keyUriWithVersion]"
                }
            }
        },
        {
            "type": "Microsoft.KeyVault/vaults/accessPolicies",
            "apiVersion": "2019-09-01",
            "name": "[concat(variables('keyvaultName'), '/add')]",
            "dependsOn": [
                "[resourceId('Microsoft.Compute/diskEncryptionSets', variables('diskencsetName'))]"
            ],
            "properties": {
                "accessPolicies": [
                    {
                        "tenantId": "[subscription().tenantId]",
                        "objectId": "[reference(resourceId('Microsoft.Compute/diskEncryptionSets', variables('diskencsetName')), '2019-07-01', 'Full').identity.PrincipalId]",
                        "permissions": {
                            "keys": [
                                "Get",
                                "WrapKey",
                                "UnwrapKey"
                            ],
                            "secrets": [],
                            "certificates": []
                        }
                    }
                ]
            }
        },

我意识到我可以通过 reference() 函数获得我需要的属性,所以只需弄清楚我需要什么,然后将其全部放入模板中。不得不从 Key Vault 定义中分离出访问策略,以便我可以创建 Key Vault 和磁盘加密集,然后将两者结合在一起。

希望这可以帮助其他寻找相同内容的人。谢谢。