首页 > 解决方案 > 通过 ARM 模板创建 Azure 密钥保管库、密钥和磁盘加密集

问题描述

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

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

谢谢。

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

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

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

标签: azureazure-keyvaultarm-template

解决方案


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

        {
            "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()函数获得我需要的属性,所以只需弄清楚我需要什么,然后将它们全部放入模板中。必须从密钥保管库定义中分离出访问策略,以便我可以创建密钥保管库和磁盘加密集,然后将两者绑定在一起。

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


推荐阅读