Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak používat tajné kódy ze služby Azure Key Vault jako hodnoty v nastavení aplikace nebo připojovacích řetězcích pro aplikace vytvořené pomocí Azure App Service, Azure Functions nebo Azure Logic Apps (Standard).
Key Vault je služba, která poskytuje centralizovanou správu tajných kódů s plnou kontrolou nad zásadami přístupu a historií auditu. Pokud je nastavení aplikace nebo připojovací řetězec odkazem na Key Vault, může ho kód aplikace používat stejně jako jakékoli jiné nastavení aplikace nebo připojovací řetězec. Tímto způsobem můžete udržovat tajné kódy kromě konfigurace vaší aplikace. Nastavení aplikace jsou bezpečně zašifrovaná v klidovém stavu, ale pokud potřebujete možnosti pro správu tajných kódů, měli by přejít do trezoru klíčů.
Udělit vaší aplikaci přístup k trezoru klíčů
Pokud chcete číst tajné kódy z trezoru klíčů, musíte nejprve vytvořit trezor a udělit aplikaci oprávnění pro přístup k němu:
Vytvořte spravovanou identitu pro vaši aplikaci.
Odkazy na službu Key Vault ve výchozím nastavení používají identitu přiřazenou systémem aplikace, ale můžete zadat identitu přiřazenou uživatelem.
Autorizujte přístup pro čtení k tajemstvím ve vašem klíčovém trezoru pro spravovanou identitu, kterou jste vytvořili. Postup závisí na modelu oprávnění trezoru klíčů:
- Řízení přístupu na základě rolí Azure: Přiřaďte spravované identitě roli uživatele tajemství služby Key Vault. Viz Poskytnutí přístupu ke klíčům, certifikátům a tajným kódům služby Key Vault pomocí řízení přístupu na základě role v Azure.
- Zásady přístupu k trezoru : Přiřaďte spravované identitě oprávnění Získat tajné kódy. Viz Přiřazení zásad přístupu ke službě Key Vault.
Přístup k síťově omezeným trezorům
Pokud je váš trezor nakonfigurovaný s omezeními sítě, ujistěte se, že má aplikace přístup k síti. Trezory by neměly záviset na veřejných odchozích IP adresách aplikace, protože počáteční IP adresa požadavku na tajný kód se může lišit. Místo toho by měl být trezor nakonfigurovaný tak, aby přijímal provoz z virtuální sítě, kterou aplikace používá.
Ujistěte se, že aplikace má nakonfigurované odchozí síťové funkce, jak je popsáno v síťových funkcích služby App Service a možnostech sítí Azure Functions.
S výjimkou aplikací funkcí spuštěných v plánu Flex Consumption musí být linuxové aplikace, které se připojují k privátním koncovým bodům, explicitně nakonfigurované tak, aby směrovaly veškerý provoz přes virtuální síť. Při spuštění v plánu Flex Consumption se toto směrování provádí automaticky a nevyžaduje se další konfigurace. Spuštěním následujícího příkazu nakonfigurujte směrování virtuální sítě nastavením vnetRouteAllEnabled na
true:az webapp config set --resource-group <group-name> --subscription <subscription> --name <app-name> --generic-configurations '{"vnetRouteAllEnabled": true}'Ujistěte se, že konfigurace trezoru umožňuje přístup k síti nebo podsíti, kterou vaše aplikace používá.
Mějte na paměti, že i když jste správně nakonfigurovali trezor tak, aby přijímal provoz z vaší virtuální sítě, může se v protokolech auditu trezoru stále zobrazovat neúspěšná událost (403 – Zakázáno) SecretGet z veřejné odchozí IP adresy aplikace. Za ní následuje úspěšná událost SecretGet z privátní IP adresy aplikace a je to záměrné.
Přístup k trezorům s identitou přiřazenou uživatelem
Některé aplikace musí při vytváření odkazovat na tajné kódy, pokud ještě není identita přiřazená systémem dostupná. V těchto případech vytvořte uživatelsky přiřazenou identitu a dejte jí přístup do trezoru.
Po udělení oprávnění identitě přiřazené uživatelem postupujte takto:
Přiřaďte identitu k aplikaci.
Nakonfigurujte aplikaci tak, aby používala tuto identitu pro referenční operace služby Key Vault nastavením vlastnosti
keyVaultReferenceIdentityna ID prostředku uživatelsky přiřazené identity: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}
Toto nastavení platí pro všechny reference ke službě Key Vault pro aplikaci.
Porozumět rotaci
Pokud v referenci není zadaná verze tajného kódu, aplikace používá nejnovější verzi, která existuje v trezoru klíčů. Když jsou k dispozici novější verze, například v rámci plánované rotace, aplikace se automaticky aktualizuje a začne používat nejnovější verzi během 24 hodin.
Zpoždění spočívá v tom, že služba App Service ukládá hodnoty odkazů služby Key Vault do mezipaměti a načítá je každých 24 hodin. Jakákoli změna konfigurace aplikace způsobí restartování aplikace a okamžité načtení všech odkazovaných tajných kódů.
Pokud chcete vynutit vyřešení odkazů na Key Vault ve vaší aplikaci, proveďte ověřený požadavek POST na koncový bod rozhraní API https://management.azure.com/[Resource ID]/config/configreferences/appsettings/refresh?api-version=2022-03-01.
Pochopte nastavení zdrojové aplikace ze služby Key Vault
Pokud chcete použít odkaz služby Key Vault, nastavte odkaz jako hodnotu nastavení. Vaše aplikace může na tajný klíč odkazovat jako obvykle. Nejsou vyžadovány žádné změny kódu.
Návod
Vzhledem k tomu, že byste měli mít samostatné trezory pro každé prostředí, musí být většina nastavení aplikace, která používají odkazy služby Key Vault, označena jako nastavení slotu.
Odkaz služby Key Vault je ve formátu @Microsoft.KeyVault({referenceString}), kde {referenceString} je v jednom z následujících formátů:
| Referenční řetězec | Popis |
|---|---|
SecretUri=<secretUri> |
Měl SecretUri by to být úplný identifikátor URI roviny dat tajného kódu v trezoru. Například: https://myvault.vault.azure.net/secrets/mysecret. Volitelně můžete zahrnout verzi, například https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931. |
VaultName=<vaultName>;SecretName=<secretName>;SecretVersion=<secretVersion> |
Hodnota VaultName je povinná a je názvem trezoru. Hodnota SecretName je povinná a je tajným názvem. Hodnota SecretVersion je nepovinná, ale pokud je k dispozici, označuje verzi tajného kódu, který se má použít. |
Například úplný odkaz bez konkrétní verze by vypadal jako následující řetězec:
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret)
Máte k dispozici i další možnosti:
@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret)
Důležité informace o připojení služby Azure Files
Aplikace můžou pomocí WEBSITE_CONTENTAZUREFILECONNECTIONSTRING nastavení aplikace připojit službu Azure Files jako systém souborů. Toto nastavení obsahuje ověřovací kontroly, aby se zajistilo, že aplikace může být správně spuštěná.
Platforma spoléhá na to, že má sdílenou složku obsahu ve službě Azure Files. Platforma předpokládá výchozí název, pokud ho nezadáte pomocí WEBSITE_CONTENTSHARE nastavení. U všech požadavků, které tato nastavení upravují, platforma ověří, že tato sdílená složka obsahu existuje. Pokud sdílená složka obsahu neexistuje, platforma se ji pokusí vytvořit. Pokud platforma nemůže najít nebo vytvořit sdílenou složku obsahu, zablokuje žádost.
Pokud v tomto nastavení použijete odkazy na službu Key Vault, kontrola ověření ve výchozím nastavení selže, protože tajný kód nelze během zpracování příchozího požadavku vyřešit. Chcete-li se tomuto problému vyhnout, můžete přeskočit ověření nastavením WEBSITE_SKIP_CONTENTSHARE_VALIDATION na 1. Toto nastavení říká službě App Service, aby obešla všechny kontroly a nevytvoří sdílenou složku obsahu za vás. Měli byste zajistit, aby se sdílená složka obsahu vytvořila předem.
Upozornění
Pokud přeskočíte ověření a připojovací řetězec nebo sdílená složka obsahu je neplatná, aplikace se nespustí správně a vytvoří chyby HTTP 500.
Při vytváření aplikace může pokus o připojení sdílené složky obsahu selhat, protože se nešíří oprávnění spravované identity nebo není nastavena integrace virtuální sítě. Nastavení služby Azure Files můžete odložit až později v šabloně nasazení, aby toto chování vyhovovalo. Další informace najdete v tématu Nasazení Azure Resource Manageru dále v tomto článku.
V tomto případě služba App Service používá výchozí systém souborů, dokud se nenastaví služba Azure Files a soubory se nezkopírují. Před připojením služby Azure Files musíte zajistit, aby během přechodného období nedošlo k žádným pokusům o nasazení.
Důležité informace o instrumentaci Application Insights
Aplikace mohou použít nastavení aplikace APPINSIGHTS_INSTRUMENTATIONKEY nebo APPLICATIONINSIGHTS_CONNECTION_STRING k integraci s Application Insights.
Pro App Service a Azure Functions používá Azure portal tato nastavení také pro zobrazení telemetrických dat z prostředku. Pokud se na tyto hodnoty odkazuje ze služby Key Vault, tento přístup není k dispozici. Místo toho musíte pracovat přímo s prostředkem Application Insights, abyste mohli zobrazit telemetrii. Tyto hodnoty se ale nepovažují za tajemství, takže můžete zvážit jejich přímou konfiguraci, namísto použití odkazů na Key Vault.
Nasazení podle modelu Azure Resource Manager
Když automatizujete nasazení prostředků prostřednictvím šablon Azure Resource Manageru, budete možná muset sekvencovat závislosti v určitém pořadí. Ujistěte se, že nastavíte nastavení aplikace jako samostatný prostředek, než použijete vlastnost siteConfig v definici aplikace. Aplikace musí být definována jako první, aby se s ní vytvořila identita přiřazená systémem a dá se použít v zásadách přístupu.
Následující pseudo-šablona je příkladem toho, jak může aplikace funkcí vypadat:
{
//...
"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]"
}
}
]
}
]
}
Poznámka:
V tomto příkladu nasazení správy zdrojového kódu závisí na nastavení aplikace. Tato závislost je obvykle nebezpečné chování, protože se aktualizace nastavení aplikace chová asynchronně. Vzhledem k tomu, že jste zahrnuli WEBSITE_ENABLE_SYNC_UPDATE_SITE nastavení aplikace, je aktualizace synchronní. Nasazení správy zdrojového kódu začíná až po úplné aktualizaci nastavení aplikace. Další nastavení aplikace najdete v tématu Proměnné prostředí a nastavení aplikace ve službě Aplikace Azure Service.
Řešení potíží s odkazy na službu Key Vault
Pokud se odkaz nepřeloží správně, použije se místo toho řetězec odkazu, například @Microsoft.KeyVault(...). Tato situace může způsobit, že aplikace způsobí chyby, protože očekává tajný klíč s jinou hodnotou.
Řešení se obvykle nezdařilo kvůli chybné konfiguraci zásad přístupu ke službě Key Vault. Důvodem však může být také to, že tajný klíč již neexistuje nebo odkaz obsahuje chybu syntaxe.
Pokud je syntaxe správná, můžete zobrazit další příčiny chyby tak, že zkontrolujete aktuální stav řešení na webu Azure Portal. Přejděte do Nastavení aplikace a vyberte Upravit pro příslušný odkaz. Dialogové okno pro úpravy zobrazuje informace o stavu, včetně chyb. Pokud se stavová zpráva nezobrazí, znamená to, že syntaxe je neplatná a nerozpozná se jako odkaz služby Key Vault.
Další informace získáte také pomocí některého z integrovaných detektorů.
Použití detektoru služby App Service:
- Na webu Azure Portal přejděte do aplikace.
- Vyberte Diagnostikovat a řešit problémy.
- Vyberte Dostupnost a Výkon>webová aplikace je nedostupná.
- Ve vyhledávacím poli vyhledejte a vyberte Diagnostiku nastavení aplikace služby Key Vault.
Použití detektoru pro Azure Functions:
- Na webu Azure Portal přejděte do aplikace.
- Přejděte na funkce platformy.
- Vyberte Diagnostikovat a řešit problémy.
- Vyberte dostupnost a výkon>aplikaci funkcí, která nefunguje nebo hlásí chyby.
- Vyberte Diagnostiku nastavení aplikace služby Key Vault.