Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u met configuratiegegevens in Azure App Service- of Azure Functions-toepassingen kunt werken zonder codewijzigingen aan te brengen. Azure App Configuration is een Azure-service die u kunt gebruiken om de configuratie van toepassingen centraal te beheren. Het is ook een effectief hulpprogramma voor het controleren van uw configuratiewaarden in de loop van de tijd of in verschillende releases.
App-toegang verlenen tot App Configuration
Als u wilt beginnen met het gebruik van App Configuration-verwijzingen in App Service, maakt u eerst een App Configuration-opslag. Vervolgens verleent u machtigingen aan uw app voor toegang tot de configuratiesleutel-/waardeparen die zich in de store bevinden.
Voltooi de snelstartgids voor App Configuration om een App Configuration-opslag te maken.
Maak een beheerde identiteit voor uw toepassing.
App Configuration-verwijzingen gebruiken standaard de door het systeem toegewezen identiteit van de app, maar u kunt een door de gebruiker toegewezen identiteit opgeven.
Verleent de identiteit de juiste toegangsmachtigingen voor de App Configuration opslag. Werk de roltoewijzingen voor uw winkel bij. Wijs de rol App Configuration-gegevenslezer toe aan deze identiteit, binnen het bereik van de resource.
Toegang tot het App Configuration-archief met een door de gebruiker toegewezen identiteit
In sommige gevallen moeten apps mogelijk verwijzen naar de configuratie wanneer u ze maakt, maar er is nog geen door het systeem toegewezen identiteit beschikbaar. In dit scenario kunt u vooraf een door de gebruiker toegewezen identiteit voor de App Configuration-opslag maken.
Nadat u machtigingen hebt verleend aan de door de gebruiker toegewezen identiteit, voert u de volgende stappen uit:
Wijs de identiteit toe aan uw toepassing.
Configureer de app voor het gebruik van deze identiteit voor referentiebewerkingen voor App Configuration door de
keyVaultReferenceIdentity
eigenschap in te stellen op de resource-id van de door de gebruiker toegewezen identiteit. Hoewel de eigenschapkeyVault
in de naam heeft, is de identiteit ook van toepassing op verwijzingen naar App Configuration. Hier volgt de code:userAssignedIdentityResourceId=$(az identity show -g MyResourceGroupName -n MyUserAssignedIdentityName --query id -o tsv) appResourceId=$(az webapp show -g MyResourceGroupName -n MyAppName --query id -o tsv) az rest --method PATCH --uri "${appResourceId}?api-version=2021-01-01" --body "{'properties':{'keyVaultReferenceIdentity':'${userAssignedIdentityResourceId}'}}"
Deze configuratie is van toepassing op alle verwijzingen in de app.
Verleen uw app toegang tot de genoemde sleutelkluizen
Naast het opslaan van onbewerkte configuratiewaarden heeft App Configuration een eigen indeling voor het opslaan van Azure Key Vault-verwijzingen. Als de waarde van een App Configuration-verwijzing een Key Vault-verwijzing is in de App Configuration-opslag, moet uw app ook machtigingen hebben voor toegang tot de sleutelkluis die is opgegeven in de referentie.
Notitie
Verwijzingen naar App Configuration Key Vault moeten niet worden verward met Verwijzingen naar App Service en Azure Functions Key Vault. Uw app kan elke combinatie van deze verwijzingen gebruiken, maar er zijn enkele belangrijke verschillen. Als uw kluis netwerkbeperking moet hebben of als u de app nodig hebt om periodiek bij te werken naar de nieuwste versies, kunt u overwegen om de App Service- en Azure Functions-benadering te gebruiken in plaats van een App Configuration-verwijzing te gebruiken.
Verleen uw app toegang tot een sleutelkluis:
Identificeer de identiteit die u hebt gebruikt als referentie voor App Configuration. U moet de toegang tot de kluis verlenen aan dezelfde identiteit.
Maak een toegangsbeleid in Key Vault voor die identiteit. Schakel de Geheim ophalen toestemming in voor dit beleid. Configureer de geautoriseerde toepassing of de
applicationId
instellingen niet omdat deze niet compatibel zijn met een beheerde identiteit.
Verwijzingssyntaxis
Een App Configuration-verwijzing heeft het formulier @Microsoft.AppConfiguration({referenceString})
, waarbij {referenceString}
deze wordt vervangen door een waarde zoals beschreven in de volgende tabel:
Onderdeel van de referentiestring | Beschrijving |
---|---|
Endpoint = <endpointURL> |
Endpoint (vereist). De URL van uw App Configuration-resource. |
Key = <myAppConfigKey> |
Key (vereist). De naam van de sleutel die u wilt toewijzen aan de app-instelling. |
Label = <myKeyLabel> |
Label (optioneel). De waarde van het sleutellabel dat is opgegeven in Key . |
Hier volgt een voorbeeld van een volledige verwijzing met:Label
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey; Label=myKeyLabel)
Hier is een voorbeeld dat niet Label
bevat:
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey)
Elke configuratiewijziging in de app die resulteert in het opnieuw opstarten van een site, veroorzaakt een onmiddellijke refetch van alle sleutel-/waardeparen waarnaar wordt verwezen vanuit het App Configuration-archief.
Notitie
Automatisch vernieuwen en opnieuw ophalen van deze waarden wanneer de sleutel-/waardeparen worden bijgewerkt in App Configuration wordt momenteel niet ondersteund.
Brontoepassingsinstellingen van App Configuration
U kunt App Configuration-verwijzingen gebruiken als waarden voor toepassingsinstellingen , zodat u configuratiegegevens in App Configuration kunt bewaren in plaats van in de siteconfiguratie-instellingen. Toepassingsinstellingen en sleutel-waardeparen van App Configuration zijn beide veilig versleuteld in rust. Als u gecentraliseerde configuratiebeheermogelijkheden nodig hebt, voegt u configuratiegegevens toe aan App Configuration.
Als u een App Configuration-verwijzing wilt gebruiken voor een app-instelling, stelt u de verwijzing in als de waarde van de instelling. Uw app kan naar de configuratiewaarde verwijzen via de bijbehorende sleutel zoals gebruikelijk. Er zijn geen codewijzigingen vereist.
Aanbeveling
De meeste applicatie-instellingen die gebruikmaken van App Configuration-verwijzingen moeten worden gemarkeerd als slotinstellingen, zodat u voor elke omgeving afzonderlijke winkels of labels hebt.
Overwegingen voor het koppelen van Azure Files
Apps kunnen de WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
toepassingsinstelling gebruiken om Azure Files als bestandssysteem te koppelen. Deze instelling bevat extra validatiecontroles om ervoor te zorgen dat de app correct kan worden gestart. Het platform is afhankelijk van het hebben van een inhoudsshare in Azure Files en er wordt uitgegaan van een standaardnaam, tenzij er een is opgegeven in de WEBSITE_CONTENTSHARE
instelling. Voor aanvragen die deze instellingen wijzigen, probeert het platform te valideren dat de inhoudsshare bestaat. Als de share niet bestaat, probeert het platform de share te maken. Als de inhoudsshare niet kan worden gevonden of gemaakt, wordt de aanvraag geblokkeerd.
Als u App Configuration-verwijzingen voor deze instelling gebruikt, mislukt deze validatiecontrole standaard omdat de verbinding zelf niet kan worden opgelost terwijl het platform de binnenkomende aanvraag verwerkt. Om dit probleem te voorkomen, kunt u de validatie overslaan door de instelling in te stellen WEBSITE_SKIP_CONTENTSHARE_VALIDATION
op 1
. Met deze instelling worden alle controles overgeslagen en wordt de inhoudsshare niet automatisch gemaakt. U moet ervoor zorgen dat het deel vooraf wordt gemaakt.
Let op
Als u validatie overslaat en de verbindingsreeks of de inhoudsshare ongeldig is, kan de app niet goed worden gestart en worden alleen HTTP 500-fouten weergegeven.
Wanneer u een site maakt, kan het koppelen van de inhoudsopslag mislukken als beheerde identiteitsmachtigingen niet zijn doorgevoerd of als de integratie van het virtuele netwerk niet is geconfigureerd. U kunt het instellen van Azure Files uitstellen tot later in de implementatiesjabloon om ruimte te bieden voor de vereiste installatie. Zie de Implementatie van Azure Resource Manager in de volgende sectie voor meer informatie. App Service maakt alleen gebruik van een standaardbestandssysteem totdat Azure Files is ingesteld en bestanden niet worden gekopieerd. Zorg ervoor dat er tijdens de tussentijdse periode geen implementatiepogingen worden uitgevoerd voordat Azure Files wordt gekoppeld.
Implementatie van Azure Resource Manager
Als u resource-implementaties automatiseert met behulp van ARM-sjablonen (Azure Resource Manager), moet u mogelijk uw afhankelijkheden in een specifieke volgorde rangschikken om App Configuration-verwijzingen te laten werken. In dat scenario moet u uw toepassingsinstellingen definiëren als hun eigen resource in plaats van een siteConfig
eigenschap in de sitedefinitie te gebruiken. De site moet eerst worden gedefinieerd, zodat de door het systeem toegewezen identiteit met de site kan worden gemaakt. De beheerde identiteit wordt vervolgens gebruikt in het toegangsbeleid.
Hier volgt een voorbeeldsjabloon voor een functie-app met app-configuratieverwijzingen:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"functionAppName": "DemoMBFunc",
"appConfigStoreName": "DemoMBAppConfig",
"resourcesRegion": "West US2",
"appConfigSku": "standard",
"FontNameKey": "FontName",
"FontColorKey": "FontColor",
"myLabel": "Test",
"App Configuration Data Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '516239f1-63e1-4d78-a4de-a74fb236a071')]"
},
"resources": [
{
"type": "Microsoft.Web/sites",
"name": "[variables('functionAppName')]",
"apiVersion": "2021-03-01",
"location": "[variables('resourcesRegion')]",
"identity": {
"type": "SystemAssigned"
},
//...
"resources": [
{
"type": "config",
"name": "appsettings",
"apiVersion": "2021-03-01",
//...
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('functionAppName'))]",
"[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]"
],
"properties": {
"WEBSITE_FONTNAME": "[concat('@Microsoft.AppConfiguration(Endpoint=', reference(resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))).endpoint,'; Key=',variables('FontNameKey'),'; Label=',variables('myLabel'), ')')]",
"WEBSITE_FONTCOLOR": "[concat('@Microsoft.AppConfiguration(Endpoint=', reference(resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))).endpoint,'; Key=',variables('FontColorKey'),'; Label=',variables('myLabel'), ')')]",
"WEBSITE_ENABLE_SYNC_UPDATE_SITE": "true"
//...
}
},
{
"type": "sourcecontrols",
"name": "web",
"apiVersion": "2021-03-01",
//...
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('functionAppName'))]",
"[resourceId('Microsoft.Web/sites/config', variables('functionAppName'), 'appsettings')]"
]
}
]
},
{
"type": "Microsoft.AppConfiguration/configurationStores",
"name": "[variables('appConfigStoreName')]",
"apiVersion": "2019-10-01",
"location": "[variables('resourcesRegion')]",
"sku": {
"name": "[variables('appConfigSku')]"
},
//...
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('functionAppName'))]"
],
"properties": {
},
"resources": [
{
"type": "keyValues",
"name": "[variables('FontNameKey')]",
"apiVersion": "2021-10-01-preview",
//...
"dependsOn": [
"[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]"
],
"properties": {
"value": "Calibri",
"contentType": "application/json"
}
},
{
"type": "keyValues",
"name": "[variables('FontColorKey')]",
"apiVersion": "2021-10-01-preview",
//...
"dependsOn": [
"[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]"
],
"properties": {
"value": "Blue",
"contentType": "application/json"
}
}
]
},
{
"scope": "[resourceId('Microsoft.AppConfiguration/configurationStores', variables('appConfigStoreName'))]",
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-04-01-preview",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables('App Configuration Data Reader')]",
"principalId": "[reference(resourceId('Microsoft.Web/sites/', variables('functionAppName')), '2020-12-01', 'Full').identity.principalId]",
"principalType": "ServicePrincipal"
}
}
]
}
Notitie
In dit voorbeeld is de implementatie van broncodebeheer afhankelijk van de toepassingsinstellingen. In de meeste scenario's is deze reeks minder veilig omdat app-instellingen asynchroon worden bijgewerkt. Maar omdat het voorbeeld de WEBSITE_ENABLE_SYNC_UPDATE_SITE
toepassingsinstelling bevat, is de update synchroon. De implementatie van broncodebeheer begint pas nadat de toepassingsinstellingen volledig zijn bijgewerkt. Zie Omgevingsvariabelen en app-instellingen in Azure App Service voor meer informatie over app-instellingen.
Problemen met app-configuratieverwijzingen oplossen
Als een verwijzing niet juist is opgelost, wordt in plaats daarvan de referentiewaarde gebruikt. Er wordt een omgevingsvariabele gemaakt die gebruikmaakt van de syntaxis @Microsoft.AppConfiguration(...)
. De verwijzing kan een fout veroorzaken omdat de toepassing een configuratiewaarde verwachtte.
Deze fout is meestal het gevolg van een onjuiste configuratie van het app-configuratiebeleid. Maar het kan ook gebeuren als er een syntaxisfout in de verwijzing staat of als het configuratiesleutel-waarde paar niet bestaat in de opslagplaats.