Шаблон ARM для импорта сертификата хранилища ключей Azure в приложении-функции

У меня есть приложение-функция, которое вызывает другой API с сертификатом. Этот файл сертификата (.pfx) уже присутствует в хранилище ключей. Я использую указанный ниже шаблон ARM для импорта сертификата в настройки SSL приложения-функции. Примечание: приложение-функция развертывается нормально, когда я удаляю раздел hostNameSslStates. Но после его добавления я получаю - «Код»: «Конфликт», «Сообщение»: «Сертификат с отпечатком« XXXXXXXX »не соответствует имени хоста
« blobcreate-eventgridtrigger-functionapp.azurewebsites.net ».

Раздел ресурсов шаблона ARM - "ресурсы": [

    //StorageAccount
    {
        "type": "Microsoft.Storage/storageAccounts",
        "apiVersion": "2019-06-01",
        "name": "[parameters('storageAccounts_name')]",
        "location": "[resourceGroup().location]",
        "sku": {
            "name": "[parameters('storageSKU')]",
            "tier": "Standard"
        },
        "kind": "StorageV2",
        "properties": {
            "networkAcls": {
                "bypass": "AzureServices",
                "virtualNetworkRules": [],
                "ipRules": [],
                "defaultAction": "Allow"
            },
            "supportsHttpsTrafficOnly": true,
            "encryption": {
                "services": {
                    "file": {
                        "keyType": "Account",
                        "enabled": true
                    },
                    "blob": {
                        "keyType": "Account",
                        "enabled": true
                    }
                },
                "keySource": "Microsoft.Storage"
            },
            "accessTier": "Hot"
        }
    },

    //BlobService
    {
        "type": "Microsoft.Storage/storageAccounts/blobServices",
        "apiVersion": "2019-06-01",
        "name": "[variables('blobServiceName')]",
        "dependsOn": ["[variables('storageAccountResourceId')]"],
        "sku": {
            "name": "[parameters('storageSKU')]"//,
           // "tier": "Standard"
        },
        "properties": {
            "cors": {
                "corsRules": []
            },
            "deleteRetentionPolicy": {
                "enabled": false
            }
        }
    },

    //function app with server farm  

    //cert store access policies update-
    {
        "type": "Microsoft.KeyVault/vaults",
        "name": "testARMTemplateKeyVault",
        "apiVersion": "2016-10-01",
        "location": "[resourceGroup().location]",
        "properties": {
            "sku": {
                "family": "A",
                "name": "standard"
            },
            "tenantId": "c29678d0-eceb-4df2-a225-79cf795a6b64",
            "accessPolicies": [
                {
                    "tenantId": "tenantIdOfSubscription", //obtained from Get-AzTenant
                    "objectId": "objectid of Microsoft Azure App Service", //obtained from Get-AzADServicePrincipal 
                    "permissions": {
                        "keys": [
                            "Get",
                            "List",
                            "Update",
                            "Create",
                            "Import",
                            "Delete",
                            "Recover",
                            "Backup",
                            "Restore"
                        ],
                        "secrets": [
                            "Get",
                            "List",
                            "Set",
                            "Delete",
                            "Recover",
                            "Backup",
                            "Restore"
                        ],
                        "certificates": [
                            "Get",
                            "List",
                            "Update",
                            "Create",
                            "Import",
                            "Delete",
                            "Recover",
                            "ManageContacts",
                            "ManageIssuers",
                            "GetIssuers",
                            "ListIssuers",
                            "DeleteIssuers"
                        ],
                        "storage": []
                    }
                }
            ],
            "enabledForDeployment": false,
            "enabledForDiskEncryption": false,
            "enabledForTemplateDeployment": true,
            "enableSoftDelete": true
        }

    },

    {
        "type": "Microsoft.Web/serverfarms",
        "apiVersion": "2018-02-01",
        "name": "[variables('azurefunction_hostingPlanName')]",
        "location": "[resourceGroup().location]",
        "sku": {
            "name": "Y1",
            "tier": "Dynamic"
        },
        "properties": {
            "name": "[variables('azurefunction_hostingPlanName')]",
            "computeMode": "Dynamic"
            }
        },

        {
            "type": "Microsoft.Web/certificates",
            "name": "testingcert",
            "apiVersion": "2016-03-01",
            "location": "[resourceGroup().location]",
            "properties": {
                "keyVaultId": "[resourceId('Microsoft.KeyVault/vaults', 'testARMTemplateKeyVault')]",
                "keyVaultSecretName": "testingcert",
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('azurefunction_hostingPlanName'))]"
            }
        },

        {
        "apiVersion": "2018-11-01",
        "type": "Microsoft.Web/sites",
        "name": "[parameters('functionAppName')]",
        "location": "[resourceGroup().location]",
        "kind": "functionapp",
        "dependsOn": [
            "[variables('azureFunction_serverFarmResourceId')]",
            "[variables('storageAccountResourceId')]",
            "[resourceId('Microsoft.Web/certificates', 'testingcert')]"
        ],
        "properties": {
            "serverFarmId": "[variables('azureFunction_serverFarmResourceId')]",
            "siteConfig": {
                "appSettings": [
                    {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccounts_name'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),variables('storageAccountApiVersion')).keys[0].value)]"
                    },
                    {
                    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccounts_name'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),variables('storageAccountApiVersion')).keys[0].value)]"
                    },
                    {
                    "name": "WEBSITE_CONTENTSHARE",
                    "value": "[toLower(parameters('functionAppName'))]"
                    },
                    {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                    },
                    {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "~10"
                    },
                    {
                    "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                    "value": "[reference(resourceId('microsoft.insights/components/', parameters('functionApp_applicationInsightsName')), '2015-05-01').InstrumentationKey]"
                    },
                    {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "dotnet"
                    },
                    {
                        "name": "WEBSITE_LOAD_CERTIFICATES",
                        "value": "required certificate thumprint"
                    }
                ]
            },
            "hostNameSslStates": [
                {
                    "name": "blobcreate-eventgridtrigger-functionapp.azurewebsites.net",//obtained from custom domains flatform features of the function app
                    "sslState": "SniEnabled",
                    "thumbprint": "[reference(resourceId('Microsoft.Web/certificates', 'testingcert')).Thumbprint]",
                    "toUpdate": true
                }
            ]
        }
    }
]`

person user2848940    schedule 05.04.2020    source источник


Ответы (2)


добавить в шаблон раздел сертификатов -

{
        "type": "Microsoft.Web/certificates",
        "name": "[parameters('CertificateName')]",
        "apiVersion": "2019-08-01",
        "location": "[resourceGroup().location]",
        "dependsOn": [
            "[concat('Microsoft.Web/serverFarms/', variables('azurefunction_hostingPlanName'))]"
        ],
        "properties": {
                "keyVaultId": "[parameters('keyvaultResourceId')]",
                "keyVaultSecretName": "[parameters('invoiceApiCertificateKeyVaultSecretName')]",
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('azurefunction_hostingPlanName'))]"
        }
    }

а затем добавьте зависимыйOn для этого сертификата в приложение-функцию.

[resourceId('Microsoft.Web/certificates', parameters('CertificateName'))]
person user2848940    schedule 06.04.2020

Что ж, ошибка довольно очевидна, вы пытаетесь добавить сертификат для blobcreate-eventgridtrigger-functionapp.azurewebsites.net, но имя DNS в сертификате не совпадает с этим, отсюда и ошибка. это, вероятно, неправильный способ добавления сертификата, если он не будет использоваться для завершения SSL

person 4c74356b41    schedule 05.04.2020
comment
что тогда будет правильным? Я создал тестовый сертификат и имитировал фактический api, который необходимо вызвать из приложения-функции ... в основном пытался сделать то, что объясняется в - rahulpnath.com/blog/ с использованием шаблона руки - person user2848940; 05.04.2020