Megosztás a következőn keresztül:


Key Vault-hivatkozások használata alkalmazásbeállításokként a Azure-alkalmazás Service-ben és az Azure Functionsben

Feljegyzés

2024. június 1-től az összes újonnan létrehozott App Service-alkalmazás létrehozhat egy egyedi alapértelmezett gazdagépnevet a .<region>.azurewebsites.net. elnevezési<random-hash><app-name>- konvencióval. A meglévő alkalmazások neve nem változik.

Példa: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

További információkért tekintse meg az App Service-erőforrás egyedi alapértelmezett állomásnevét.

Ez a cikk bemutatja, hogyan használhatja az Azure Key Vault titkos kulcsait alkalmazásbeállítások vagy kapcsolati sztring értékeiként az App Service-ben vagy az Azure Functions-alkalmazásokban.

Az Azure Key Vault egy központosított titkos kulcskezelést biztosító szolgáltatás, amely teljes körűen szabályozza a hozzáférési szabályzatokat és a naplózási előzményeket. Ha egy alkalmazásbeállítás vagy kapcsolati sztring kulcstartó-hivatkozás, az alkalmazáskód bármely más alkalmazásbeállításhoz vagy kapcsolati sztring hasonlóan használhatja. Így az alkalmazás konfigurációján kívül titkos kulcsokat is kezelhet. Az alkalmazásbeállítások biztonságosan titkosítva vannak inaktív állapotban, de ha titkos kulcskezelési képességekre van szüksége, akkor egy kulcstartóba kell lépniük.

Az alkalmazás hozzáférésének biztosítása kulcstartóhoz

Ahhoz, hogy titkos kulcsokat olvashasson egy kulcstartóból, létre kell hoznia egy tárolót, és engedélyt kell adnia az alkalmazásnak a hozzáférésre.

  1. Hozzon létre egy kulcstartót a Key Vault rövid útmutatójának követésével.

  2. Hozzon létre egy felügyelt identitást az alkalmazáshoz.

    A key vault-hivatkozások alapértelmezés szerint az alkalmazás rendszer által hozzárendelt identitását használják, de megadhat egy felhasználó által hozzárendelt identitást.

  3. Engedélyezze a kulcstartó titkos kulcsainak olvasási hozzáférését a korábban létrehozott felügyelt identitáshoz. Ennek menete a kulcstartó engedélymodelljétől függ:

Hozzáférés a hálózat által korlátozott tárolókhoz

Ha a tároló hálózati korlátozásokkal van konfigurálva, győződjön meg arról, hogy az alkalmazás rendelkezik hálózati hozzáféréssel. A tárolók nem függhetnek az alkalmazás nyilvános kimenő IP-címétől, mert a titkos kérés forrás IP-címe eltérő lehet. Ehelyett a tárolót úgy kell konfigurálni, hogy fogadja az alkalmazás által használt virtuális hálózatról érkező forgalmat.

  1. Győződjön meg arról, hogy az alkalmazás rendelkezik konfigurált kimenő hálózati képességekkel az App Service hálózati funkcióiban és az Azure Functions hálózatkezelési beállításaiban leírtak szerint.

    A privát végpontokhoz csatlakozó Linux-alkalmazásokat explicit módon kell konfigurálni, hogy az összes forgalmat a virtuális hálózaton keresztül irányíthassa. Ezt a követelményt egy hamarosan megjelenő frissítés eltávolítja. A beállítás konfigurálásához futtassa a következő parancsot:

    az webapp config set --subscription <sub> -g <group-name> -n <app-name> --generic-configurations '{"vnetRouteAllEnabled": true}'
    
  2. Győződjön meg arról, hogy a tároló konfigurációja lehetővé teszi az alkalmazás által a hozzáféréshez használt hálózatot vagy alhálózatot.

Hozzáférés tárolókhoz felhasználó által hozzárendelt identitással

Egyes alkalmazásoknak a létrehozáskor titkos kódokra kell hivatkoznia, ha egy rendszer által hozzárendelt identitás még nem érhető el. Ezekben az esetekben létre lehet hozni egy felhasználó által hozzárendelt identitást, és előre meg lehet adni a hozzáférést a tárolóhoz.

Miután engedélyt adott a felhasználó által hozzárendelt identitásra, kövesse az alábbi lépéseket:

  1. Ha még nem tette meg, rendelje hozzá az identitást az alkalmazáshoz.

  2. Konfigurálja az alkalmazást úgy, hogy ezt az identitást használja a Key Vault referenciaműveleteihez úgy, hogy a keyVaultReferenceIdentity tulajdonságot a felhasználó által hozzárendelt identitás erőforrás-azonosítójára állítja.

    identityResourceId=$(az identity show --resource-group <group-name> --name <identity-name> --query id -o tsv)
    az webapp update --resource-group <group-name> --name <app-name> --set keyVaultReferenceIdentity=${identityResourceId}
    

Ez a beállítás az alkalmazás összes key vault-hivatkozására vonatkozik.

Változtatás

Ha a titkos verzió nincs megadva a hivatkozásban, az alkalmazás a key vaultban található legújabb verziót használja. Amikor újabb verziók válnak elérhetővé, például rotációs esemény esetén, az alkalmazás automatikusan frissül, és 24 órán belül megkezdi a legújabb verzió használatát. A késést az okozza, hogy az App Service gyorsítótárazza a kulcstartó-referenciák értékeit, és 24 óránként kéri le őket újra. Az alkalmazás konfigurálásának bármilyen módosítása az alkalmazás újraindítását és az összes hivatkozott titkos kód azonnali visszavételét eredményezi.

Forrásalkalmazás-beállítások a Key Vaultból

Kulcstartó-referencia használatához állítsa be a referenciát a beállítás értékeként. Az alkalmazás a szokásos módon hivatkozhat a titkos kódra a kulcsán keresztül. Nincs szükség kódmódosításra.

Tipp.

A kulcstartó-hivatkozásokat használó legtöbb alkalmazásbeállítást pontbeállításként kell megjelölni, mivel az egyes környezetekhez külön tárolókat kell használnia.

A key vault-referenciák az alábbi @Microsoft.KeyVault({referenceString}){referenceString} formátumok egyikében találhatók:

Hivatkozási sztring Leírás
SecretUri=secretUri A SecretUri-knak a tárolóban lévő titkos kódok teljes adatsík URI-jának kell lenniük, opcionálisan beleértve egy verziót is, például https://myvault.vault.azure.net/secrets/mysecret/https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931
VaultName=vaultName; SecretName=secretName; SecretVersion=secretVersion A Tárolónév megadása kötelező, és a tároló neve. A Titkos név megadása kötelező, és a titkos név. A SecretVersion nem kötelező, de ha jelen van, a használni kívánt titkos kód verzióját jelzi.

Egy teljes hivatkozás például a következő sztringre hasonlít:

@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/)

Alternatív megoldás:

@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret)

Az Azure Files csatlakoztatásával kapcsolatos szempontok

Az alkalmazások az WEBSITE_CONTENTAZUREFILECONNECTIONSTRING alkalmazásbeállítással csatlakoztathatják az Azure Filest fájlrendszerként. Ez a beállítás érvényesítési ellenőrzésekkel biztosítja, hogy az alkalmazás megfelelően indítható legyen. A platform a tartalommegosztásra támaszkodik az Azure Filesban, és alapértelmezett nevet feltételez, kivéve, ha a WEBSITE_CONTENTSHARE beállítással meg van adva. A beállításokat módosító kérések esetén a platform ellenőrzi, hogy létezik-e ez a tartalommegosztás, és megpróbálja-e létrehozni, ha nem. Ha nem találja vagy nem tudja létrehozni a tartalommegosztást, letiltja a kérést.

Ha ebben a beállításban key vault-hivatkozásokat használ, az érvényesítési ellenőrzés alapértelmezés szerint meghiúsul, mivel maga a titkos kód nem oldható fel a bejövő kérés feldolgozása során. A probléma elkerülése érdekében kihagyhatja az érvényesítést az "1" beállítással WEBSITE_SKIP_CONTENTSHARE_VALIDATION . Ez a beállítás arra utasítja az App Service-t, hogy megkerülje az összes ellenőrzést, és ne hozza létre a tartalommegosztást. Győződjön meg arról, hogy előre létre van hozva.

Figyelemfelhívás

Ha kihagyja az érvényesítést, és a kapcsolati sztring vagy a tartalommegosztás érvénytelen, az alkalmazás nem fog megfelelően elindulni, és csak HTTP 500-hibákat fog kiszolgálni.

Az alkalmazás létrehozása során a tartalommegosztás csatlakoztatásának kísérlete meghiúsulhat, mert a felügyelt identitásengedélyek nem propagálása vagy a virtuális hálózati integráció nincs beállítva. Ennek megfelelően elhalaszthatja az Azure Files beállítását az üzembe helyezési sablon későbbi szakaszáig. További információért tekintse meg az Azure Resource Manager üzembe helyezését . Ebben az esetben az App Service egy alapértelmezett fájlrendszert használ, amíg be nem állítja az Azure Filest, és a fájlok nem lesznek átmásolva. Győződjön meg arról, hogy az Azure Files csatlakoztatása előtti időközi időszakban nem történik üzembe helyezési kísérlet.

Az alkalmazás Elemzések rendszerezésének szempontjai

Az alkalmazások az APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING alkalmazásbeállítások használatával integrálhatók az Alkalmazás Elemzések. Az App Service-hez és az Azure Functionshez készült portálfunkciók ezen beállítások használatával is felszínre hozhatják az erőforrás telemetriai adatait. Ha ezekre az értékekre a Key Vault hivatkozik, ezek a szolgáltatások nem érhetők el, és ehelyett közvetlenül az alkalmazással Elemzések erőforrással kell dolgoznia a telemetriai adatok megtekintéséhez. Ezek az értékek azonban nem minősülnek titkos kulcsoknak, ezért érdemes lehet közvetlenül konfigurálni őket a kulcstartó-hivatkozások használata helyett.

Az Azure Resource Manager üzembe helyezése

Ha azure Resource Manager-sablonokkal automatizálja az erőforrás-telepítéseket, előfordulhat, hogy a függőségeket egy adott sorrendbe kell rendeznie a funkció működéséhez. Ügyeljen arra, hogy az alkalmazásbeállításokat saját erőforrásként definiálja, és ne használjon tulajdonságot siteConfig az alkalmazásdefinícióban. Ennek az az oka, hogy először az alkalmazást kell definiálni, hogy a rendszer által hozzárendelt identitás létrejönjön vele, és használható legyen a hozzáférési szabályzatban.

Az alábbi pszeudosablon egy példa a függvényalkalmazások megjelenésére:

{
    //...
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageAccountName')]",
            //...
        },
        {
            "type": "Microsoft.Insights/components",
            "name": "[variables('appInsightsName')]",
            //...
        },
        {
            "type": "Microsoft.Web/sites",
            "name": "[variables('functionAppName')]",
            "identity": {
                "type": "SystemAssigned"
            },
            //...
            "resources": [
                {
                    "type": "config",
                    "name": "appsettings",
                    //...
                    "dependsOn": [
                        "[resourceId('Microsoft.Web/sites', variables('functionAppName'))]",
                        "[resourceId('Microsoft.KeyVault/vaults/', variables('keyVaultName'))]",
                        "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('storageConnectionStringName'))]",
                        "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('appInsightsKeyName'))]"
                    ],
                    "properties": {
                        "AzureWebJobsStorage": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('storageConnectionStringName')).secretUriWithVersion, ')')]",
                        "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('storageConnectionStringName')).secretUriWithVersion, ')')]",
                        "APPINSIGHTS_INSTRUMENTATIONKEY": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('appInsightsKeyName')).secretUriWithVersion, ')')]",
                        "WEBSITE_ENABLE_SYNC_UPDATE_SITE": "true"
                        //...
                    }
                },
                {
                    "type": "sourcecontrols",
                    "name": "web",
                    //...
                    "dependsOn": [
                        "[resourceId('Microsoft.Web/sites', variables('functionAppName'))]",
                        "[resourceId('Microsoft.Web/sites/config', variables('functionAppName'), 'appsettings')]"
                    ],
                }
            ]
        },
        {
            "type": "Microsoft.KeyVault/vaults",
            "name": "[variables('keyVaultName')]",
            //...
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', variables('functionAppName'))]"
            ],
            "properties": {
                //...
                "accessPolicies": [
                    {
                        "tenantId": "[reference(resourceId('Microsoft.Web/sites/', variables('functionAppName')), '2020-12-01', 'Full').identity.tenantId]",
                        "objectId": "[reference(resourceId('Microsoft.Web/sites/', variables('functionAppName')), '2020-12-01', 'Full').identity.principalId]",
                        "permissions": {
                            "secrets": [ "get" ]
                        }
                    }
                ]
            },
            "resources": [
                {
                    "type": "secrets",
                    "name": "[variables('storageConnectionStringName')]",
                    //...
                    "dependsOn": [
                        "[resourceId('Microsoft.KeyVault/vaults/', variables('keyVaultName'))]",
                        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
                    ],
                    "properties": {
                        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),'2019-09-01').key1)]"
                    }
                },
                {
                    "type": "secrets",
                    "name": "[variables('appInsightsKeyName')]",
                    //...
                    "dependsOn": [
                        "[resourceId('Microsoft.KeyVault/vaults/', variables('keyVaultName'))]",
                        "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]"
                    ],
                    "properties": {
                        "value": "[reference(resourceId('microsoft.insights/components/', variables('appInsightsName')), '2019-09-01').InstrumentationKey]"
                    }
                }
            ]
        }
    ]
}

Feljegyzés

Ebben a példában a forrásvezérlő üzembe helyezése az alkalmazás beállításaitól függ. Ez általában nem biztonságos viselkedés, mivel az alkalmazásbeállítás frissítése aszinkron módon működik. Mivel azonban az WEBSITE_ENABLE_SYNC_UPDATE_SITE alkalmazásbeállítást is belefoglaltuk, a frissítés szinkronban van. Ez azt jelenti, hogy a forrásvezérlő üzembe helyezése csak az alkalmazásbeállítások teljes frissítése után kezdődik. További alkalmazásbeállításokért tekintse meg a környezeti változókat és az alkalmazásbeállításokat a Azure-alkalmazás Service-ben.

Key Vault-referenciák hibaelhárítása

Ha a hivatkozás nem oldódik meg megfelelően, a hivatkozási sztringet használja helyette (például @Microsoft.KeyVault(...)). Előfordulhat, hogy az alkalmazás hibát jelez, mert egy másik érték titkos kódjára számít.

A probléma megoldásának sikertelenségét általában a Key Vault hozzáférési szabályzatának helytelen konfigurációja okozza. Ennek oka lehet azonban egy már nem létező titkos kód, vagy egy szintaxishiba a hivatkozásban.

Ha a szintaxis helyes, a hiba egyéb okait a portál aktuális feloldási állapotának ellenőrzésével tekintheti meg. Lépjen az Application Gépház lapra, és válassza a "Szerkesztés" lehetőséget a szóban forgó hivatkozáshoz. A szerkesztési párbeszédpanel állapotinformációkat jelenít meg, beleértve a hibákat is. Ha nem látja az állapotüzenetet, az azt jelenti, hogy a szintaxis érvénytelen, és nem ismeri fel kulcstartó-hivatkozásként.

Az egyik beépített detektorsal további információkat is kaphat.

A detektor használata az App Service-hez

  1. A portálon navigáljon az alkalmazáshoz.
  2. Válassza a Problémák diagnosztizálása és megoldása lehetőséget.
  3. Válassza a Rendelkezésre állás és teljesítmény lehetőséget, majd válassza a Webalkalmazás leállt lehetőséget.
  4. A keresőmezőben keresse meg és válassza a Key Vault-alkalmazás Gépház Diagnostics lehetőséget.

Az Azure Functions detektorának használata

  1. A portálon navigáljon az alkalmazáshoz.
  2. Navigáljon a platformfunkciókhoz.
  3. Válassza a Problémák diagnosztizálása és megoldása lehetőséget.
  4. Válassza a Rendelkezésre állás és teljesítmény lehetőséget, majd válassza a Függvényalkalmazás leállása vagy a jelentési hibák lehetőséget.
  5. Válassza a Key Vault-alkalmazás Gépház diagnosztika lehetőséget.