Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használhatja az Azure Key Vault titkos kulcsait értékként az Azure App Service-vel, az Azure Functions-lel vagy az Azure Logic Appsszel (Standard) létrehozott alkalmazások alkalmazásbeállításaiban vagy kapcsolati sztringjeiben .
A 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. Amikor egy alkalmazásbeállítás vagy kapcsolati karakterlánc egy Key Vault-referenciát tartalmaz, az alkalmazáskódod úgy használhatja, mint bármely más alkalmazásbeállítást vagy kapcsolati karakterláncot. Í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 titkok kezeléséhez szükséges képességekre van szüksége, akkor azokat egy kulcstartóban kell elhelyezni.
Alkalmazásának hozzáférésének megadása egy kulcstárhoz
Ha titkos kulcsokat szeretne olvasni egy kulcstartóból, először létre kell hoznia egy tárolót, és engedélyt kell adnia az alkalmazásnak a hozzáférésre:
Hozzon létre egy kulcstárat a Key Vault rövid útmutatójának követve.
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.
Engedélyezze a kulcstartó titkos kulcsainak olvasási hozzáférését a létrehozott felügyelt identitáshoz. Ennek menete a kulcstár engedélyezési modelljétől függ.
- Azure szerepköralapú hozzáférés-vezérlés: Rendelje hozzá a Key Vault titkos kulcsainak felhasználói szerepkörét a felügyelt identitáshoz. Lásd: Hozzáférés biztosítása a Key Vault kulcsaihoz, tanúsítványaihoz és titkos kulcsaihoz az Azure szerepköralapú hozzáférés-vezérlésével.
- Tároló-hozzáférési szabályzat: Rendelje hozzá a Get titkos kulcsok lekéréséhez szükséges engedélyt a felügyelt identitáshoz. Lásd: Key Vault hozzáférési szabályzat hozzárendelése.
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ónak úgy kell konfigurálva lennie, hogy fogadja a forgalmat az alkalmazás által használt virtuális hálózatról.
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 Flex Consumption csomagban futó függvényalkalmazások kivételével a magánvé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. Rugalmas használatú csomagban való futtatáskor ez az útválasztás automatikusan megtörténik, és nincs szükség további konfigurációra. Futtassa a következő parancsot a virtuális hálózat útválasztásának konfigurálásához a vnetRouteAllEnabled
truebeállításával:az webapp config set --resource-group <group-name> --subscription <subscription> --name <app-name> --generic-configurations '{"vnetRouteAllEnabled": true}'Győződjön meg arról, hogy a páncélterem konfigurációja lehetővé teszi az alkalmazás által használt hálózat vagy alhálózat hozzáférését.
Vegye figyelembe, hogy még ha megfelelően konfigurálta is a tárolót a virtuális hálózatból érkező forgalom fogadására, a tároló naplói továbbra is sikertelen (403 – Tiltott) SecretGet-eseményt jeleníthetnek meg az alkalmazás nyilvános kimenő IP-címéről. Ezt követi egy sikeres SecretGet-esemény az alkalmazás privát IP-címéről, és ez szándékos.
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 hozzon létre egy felhasználó által hozzárendelt identitást, és előre biztosítson hozzáférést a tárolóhoz.
Miután engedélyt adott a felhasználó által hozzárendelt identitásnak, kövesse az alábbi lépéseket:
Rendelje hozzá az identitást az alkalmazáshoz.
Konfigurálja az alkalmazást úgy, hogy ezt az identitást használja a Key Vault referenciaműveleteihez úgy, hogy a
keyVaultReferenceIdentitytulajdonsá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.
A forgatás megértése
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 forgatással, az alkalmazás automatikusan frissül, és 24 órán belül megkezdi a legújabb verzió használatát.
A késés oka, hogy az App Service gyorsítótárazza a Key Vault-hivatkozások értékeit, és 24 óránként ismét lekéri őket. 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.
Az alkalmazás Key Vault-hivatkozásainak feloldásához hozzon létre egy hitelesített POST-kérést az API-végpontra https://management.azure.com/[Resource ID]/config/configreferences/appsettings/refresh?api-version=2022-03-01.
A Key Vault forrásalkalmazás-beállításainak ismertetése
Key Vault-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.
Mivel minden környezethez külön tárolókat kell használni, a Key Vault hivatkozásokkal rendelkező legtöbb alkalmazásbeállítást helybeállításként kell megjelölni.
A Key Vault-referenciák az alábbi @Microsoft.KeyVault({referenceString}){referenceString} formátumok egyikében találhatók:
| Hivatkozási karakterlánc | Leírás |
|---|---|
SecretUri=<secretUri> |
A SecretUri a tárolóban lévő titok teljes adatsík URI-jának kell lennie. Például: https://myvault.vault.azure.net/secrets/mysecret. Igény szerint adjon meg egy verziót, például https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931. |
VaultName=<vaultName>;SecretName=<secretName>;SecretVersion=<secretVersion> |
Az VaultName értéket meg kell adni, és ez a tároló neve. Az SecretName érték megadása kötelező, és a titkos név. Az SecretVersion érték nem kötelező, de ha van ilyen, a használni kívánt titkos kód verzióját jelzi. |
Egy adott verzió nélküli teljes hivatkozás például a következő sztringhez hasonlóan nézne ki:
@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. A platform alapértelmezés szerint nevet ad, hacsak a WEBSITE_CONTENTSHARE beállítással más név nincs meghatározva. 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. Ha a tartalommegosztás nem létezik, a platform megpróbálja létrehozni. Ha a platform 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, mert 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 a következő beállítással WEBSITE_SKIP_CONTENTSHARE_VALIDATION1: . Ez a beállítás arra utasítja az App Service-t, hogy megkerülje az összes ellenőrzést, és nem hozza létre a tartalommegosztást. Győződjön meg arról, hogy a tartalommegosztást előre létrehozták.
Figyelemfelhívás
Ha kihagyja az ellenőrzést, és a kapcsolati sztring vagy a tartalommegosztás érvénytelen, az alkalmazás nem indul el megfelelően, és HTTP 500-hibákat okoz.
Az alkalmazás létrehozása során előfordulhat, hogy a tartalommegosztás csatlakoztatási kísérlete meghiúsul, mivel a felügyelt identitásengedélyek nem kerülnek továbbításra, vagy a virtuális hálózati integráció nincs beállítva. Ennek a viselkedésnek 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ó: Az Azure Resource Manager üzembe helyezése a cikk későbbi részében.
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 Application Insights műszeres megvalósításának szempontjai
Az alkalmazások az APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING alkalmazásbeállítások használatával integrálhatók az Application Insights szolgáltatással.
Az App Service és az Azure Functions esetében az Azure Portal ezeket a beállításokat is használja az erőforrás telemetriai adatainak felszínre hozásához. Ha ezekre az értékekre a Key Vault hivatkozik, ez a megközelítés nem érhető el. Ehelyett közvetlenül az Application Insights-erőforrással kell dolgoznia a telemetriai adatok megtekintéséhez. Ezek az értékek azonban nem számítanak titkos kulcsnak, ezért érdemes lehet közvetlenül konfigurálni őket a Key Vault-hivatkozások használata helyett.
Az Azure Resource Manager üzembe helyezése
Ha azure Resource Manager-sablonokon keresztül automatizálja az erőforrás-telepítéseket, előfordulhat, hogy a függőségeket egy adott sorrendben kell sorrendbe rendeznie. Ü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. Először meg kell határozni az alkalmazást, 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 a függőség általában nem biztonságos viselkedés, mivel az alkalmazásbeállítás frissítése aszinkron módon működik. Azonban, mivel az alkalmazásbeállítás tartalmazza a WEBSITE_ENABLE_SYNC_UPDATE_SITE, a frissítés szinkron módon történik. 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 oldható meg megfelelően, a hivatkozási sztringet használja a rendszer, például @Microsoft.KeyVault(...). Ez a helyzet hibákat okozhat az alkalmazás számára, mivel egy másik érték titkos kódját várja.
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 az is, hogy már nem létezik titkos kód, vagy a hivatkozás szintaxishibát tartalmaz.
Ha a szintaxis helyes, a hiba egyéb okait az Azure Portal aktuális megoldási állapotának ellenőrzésével tekintheti meg. Nyissa meg az Alkalmazásbeállítások lapot , é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 Key Vault-hivatkozásként.
Az egyik beépített detektorsal további információt is kaphat.
Az App Service detektorának használata:
- Az Azure Portalon nyissa meg az alkalmazást.
- Válassza a Problémák diagnosztizálása és megoldása lehetőséget.
- Válassza a Rendelkezésre állás és teljesítmény>Webalkalmazás leállt lehetőséget.
- A keresőmezőben keresse meg és válassza a Key Vault alkalmazásbeállítások diagnosztikáit.
Az Azure Functions detektorának használata:
- Az Azure Portalon nyissa meg az alkalmazást.
- Nyissa meg a Platform funkcióit.
- Válassza a Problémák diagnosztizálása és megoldása lehetőséget.
- Válassza a Rendelkezésre állás és teljesítmény>Alkalmazás leállt vagy hiba jelentve.
- Válassza a Key Vault alkalmazásbeállítások diagnosztikái lehetőséget.