Met Azure Container Apps kunt u in uw toepassing gevoelige configuratiewaarden veilig opslaan. Zodra geheimen op toepassingsniveau zijn gedefinieerd, zijn beveiligde waarden beschikbaar voor revisies in uw container-apps. Daarnaast kunt u verwijzen naar beveiligde waarden binnen schaalregels. Raadpleeg Dapr-integratie voor informatie over het gebruik van geheimen met Dapr.
- Geheimen zijn afgestemd op een toepassing, buiten een specifieke revisie van een toepassing.
- Nieuwe revisies worden niet gegenereerd door geheimen toe te voegen, te verwijderen of te wijzigen.
- Elke toepassingsrevisie kan naar een of meer geheimen verwijzen.
- Meerdere revisies kunnen naar hetzelfde geheim of dezelfde geheimen verwijzen.
Een bijgewerkt of verwijderd geheim heeft niet automatisch invloed op bestaande revisies in uw app. Wanneer een geheim wordt bijgewerkt of verwijderd, kunt u op twee manieren op wijzigingen reageren:
- Implementeer een nieuwe revisie.
- Start een bestaande revisie opnieuw.
Voordat u een geheim verwijdert, implementeert u een nieuwe revisie die niet meer naar het oude geheim verwijst. Schakel vervolgens alle revisies uit die verwijzen naar het geheim.
Geheimen definiëren
Geheimen worden gedefinieerd als een set naam-/waardeparen. De waarde van elk geheim wordt rechtstreeks opgegeven of als verwijzing naar een geheim dat is opgeslagen in Azure Key Vault.
Opmerking
Vermijd het opgeven van de waarde van een geheim rechtstreeks in een productieomgeving. Gebruik in plaats daarvan een verwijzing naar een geheim dat is opgeslagen in Azure Key Vault, zoals beschreven in de sectie Geheime waarde opslaan in Container Apps.
Geheime waarde opslaan in Container Apps
Wanneer u geheimen definieert via de portal of via verschillende opdrachtregelopties.
Ga naar uw container-app in Azure Portal.
Selecteer Geheimen in de sectie Instellingen.
Selecteer Toevoegen.
Voer in het deelvenster Geheime context toevoegen de volgende gegevens in:
-
Naam: De naam van het geheim.
-
Type: Selecteer Container Apps Secret.
-
Waarde: De waarde van het geheim.
Selecteer Toevoegen.
Geheimen worden gedefinieerd op toepassingsniveau in de resources.properties.configuration.secrets sectie.
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"value": "<MY-CONNECTION-STRING-VALUE>"
}],
}
}
}
Hier wordt een verbindingsreeks voor een wachtrijopslagaccount gedeclareerd in de secrets matrix. In dit voorbeeld vervangt u <MY-CONNECTION-STRING-VALUE> met de waarde van uw verbindingsreeks.
Wanneer u een container-app maakt, worden geheimen gedefinieerd met behulp van de --secrets parameter.
- De parameter accepteert een door spaties gescheiden set naam-/waardeparen.
- Met een gelijkteken (
=) wordt elk paar gescheiden.
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--secrets "queue-connection-string=<CONNECTION_STRING>"
Hier wordt een verbindingsreeks voor een wachtrijopslagaccount gedeclareerd in de --secrets parameter. Vervang <CONNECTION_STRING> met de waarde van uw verbindingsreeks.
Wanneer u een container-app maakt, worden geheimen gedefinieerd als een of meer geheime objecten die worden doorgegeven via de ConfigurationSecrets parameter.
$EnvId = (Get-AzContainerAppManagedEnv -ResourceGroupName my-resource-group -EnvName my-environment-name).Id
$TemplateObj = New-AzContainerAppTemplateObject -Name queuereader -Image demos/queuereader:v1
$SecretObj = New-AzContainerAppSecretObject -Name queue-connection-string -Value $QueueConnectionString
$ContainerAppArgs = @{
Name = 'my-resource-group'
Location = '<location>'
ResourceGroupName = 'my-resource-group'
ManagedEnvironmentId = $EnvId
TemplateContainer = $TemplateObj
ConfigurationSecret = $SecretObj
}
New-AzContainerApp @ContainerAppArgs
Hier wordt een verbindingsreeks voor een wachtrijopslagaccount gedeclareerd. De waarde hiervoor queue-connection-string is afkomstig van een omgevingsvariabele met de naam $QueueConnectionString.
Referentiegeheim uit Key Vault
Wanneer u een geheim definieert, maakt u een verwijzing naar een geheim dat is opgeslagen in Azure Key Vault. Container Apps haalt automatisch de geheime waarde op uit Key Vault en maakt deze beschikbaar als een geheim in uw container-app.
Als u wilt verwijzen naar een geheim uit Key Vault, moet u eerst beheerde identiteit inschakelen in uw container-app en de identiteit toegang verlenen tot de Key Vault-geheimen.
Raadpleeg Beheerde identiteiten om beheerde identiteiten in uw container-app in te schakelen.
Als u toegang wilt verlenen tot Key Vault-geheimen, verleent u de Azure RBAC-rol Key Vault-geheimengebruiker aan de beheerde identiteit.
Ga naar uw container-app in Azure Portal.
Selecteer Identiteit in de sectie Instellingen.
Stel op het tabblad Systeem toegewezen de status in op Aan.
Opmerking
U kunt ook een door de gebruiker toegewezen beheerde identiteit gebruiken, die opnieuw kan worden gebruikt voor meerdere resources en onafhankelijk van de levenscyclus van de app blijft bestaan. Als u dit wilt gebruiken, selecteert u het tabblad Door de gebruiker toegewezen en kiest u een bestaande identiteit.
Selecteer Opslaan om door het systeem toegewezen beheerde identiteit in te schakelen.
Er verschijnt een pop-up om te bevestigen dat u door het systeem toegewezen beheerde identiteit wilt inschakelen en uw container-app wilt registreren bij Microsoft Entra ID. Selecteer Ja.
Selecteer Geheimen in de sectie Instellingen.
Selecteer Toevoegen.
Voer in het deelvenster Geheime context toevoegen de volgende gegevens in:
-
Naam: De naam van het geheim.
-
Type: Kies Key Vault-verwijzing.
-
Key Vault-geheime URL: de URI van uw geheim in Key Vault. Deze URI heeft de volgende vorm:
https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
-
Identiteit: Selecteer Systeem toegewezen.
Selecteer Toevoegen.
Geheimen worden gedefinieerd op toepassingsniveau in de resources.properties.configuration.secrets sectie.
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "<KEY_VAULT_SECRET_URI>",
"identity": "system"
}],
}
}
}
Hier wordt een verbindingsreeks voor een wachtrijopslagaccount gedeclareerd in de secrets matrix. De waarde wordt automatisch opgehaald uit Key Vault met behulp van de opgegeven identiteit. Als u een door een gebruiker beheerde identiteit wilt gebruiken, vervangt u deze door system de resource-id van de identiteit.
Vervang <KEY_VAULT_SECRET_URI> door de URI van uw geheim in Key Vault.
Wanneer u een container-app maakt, worden geheimen gedefinieerd met behulp van de --secrets parameter.
- De parameter accepteert een door spaties gescheiden set naam-/waardeparen.
- Met een gelijkteken (
=) wordt elk paar gescheiden.
- Als u een Key Vault-verwijzing wilt opgeven, gebruikt u de indeling
<SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Bijvoorbeeld: queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--user-assigned "<USER_ASSIGNED_IDENTITY_ID>" \
--secrets "queue-connection-string=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<USER_ASSIGNED_IDENTITY_ID>"
Hier wordt een verbindingsreeks voor een wachtrijopslagaccount gedeclareerd in de --secrets parameter. Vervang <KEY_VAULT_SECRET_URI> door de URI van uw geheim in Key Vault. Vervang door <USER_ASSIGNED_IDENTITY_ID> de resource-id van de door de gebruiker toegewezen identiteit.
Opmerking
De door de gebruiker toegewezen identiteit moet toegang hebben tot het lezen van het geheim in Key Vault. Door het systeem toegewezen identiteit kan niet worden gebruikt met de opdracht maken, omdat deze pas beschikbaar is nadat de container-app is gemaakt.
Verwijzingen naar Secrets Key Vault worden niet ondersteund in PowerShell.
Opmerking
Als u UDR met Azure Firewall gebruikt, moet u de servicetag en de AzureKeyVault FQDN toevoegen aan de acceptatielijst voor uw firewall. Raadpleeg het configureren van UDR met Azure Firewall om te bepalen welke extra servicetags u nodig hebt.
Sleutelkluisgeheim-URI en roulatie van geheimen
De geheime URI van Key Vault moet een van de volgende indelingen hebben:
-
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: Verwijs naar een specifieke versie van een geheim.
-
https://myvault.vault.azure.net/secrets/mysecret: Verwijs naar de nieuwste versie van een geheim.
Als een versie niet is opgegeven in de URI, gebruikt de app de nieuwste versie die in de sleutelkluis aanwezig is. Wanneer nieuwere versies beschikbaar komen, haalt de app binnen 30 minuten automatisch de nieuwste versie op. Actieve revisies die verwijzen naar het geheim in een omgevingsvariabele, worden automatisch opnieuw opgestart om de nieuwe waarde op te halen.
Geef de versie in de URI op voor volledig beheer van welke versie van een geheim wordt gebruikt.
Verwijzen naar geheimen in omgevingsvariabelen
Nadat u geheimen op toepassingsniveau hebt declareren zoals beschreven in de sectie Geheimen definiëren , kunt u ernaar verwijzen in omgevingsvariabelen wanneer u een nieuwe revisie in uw container-app maakt. Wanneer een omgevingsvariabele verwijst naar een geheim, wordt de waarde gevuld met de waarde die in het geheim is gedefinieerd.
Voorbeeld
In het volgende voorbeeld ziet u een toepassing die een verbindingsreeks declareert op toepassingsniveau. Naar deze verbinding wordt verwezen in een containeromgevingsvariabele en in een schaalregel.
Nadat u een geheim in uw container-app hebt gedefinieerd, kunt u ernaar verwijzen in een omgevingsvariabele wanneer u een nieuwe revisie maakt.
Ga naar uw container-app in Azure Portal.
In de sectie Toepassing, selecteer Revisies en replica's.
Selecteer op de pagina Revisies en replica'sde optie Nieuwe revisie maken.
Selecteer op de pagina Nieuwe revisie maken en implementeren op het tabblad Container , onder de sectie Containerinstallatiekopieën , een container.
Kies Bewerken.
Selecteer in het deelvenster Een containercontext bewerken het tabblad Omgevingsvariabelen .
Selecteer Toevoegen.
Voer de volgende gegevens in:
-
Naam: De naam van de omgevingsvariabele.
-
Bron: Selecteer Verwijzing naar een geheim.
-
Waarde: Selecteer het geheim dat u eerder hebt gedefinieerd.
Selecteer Opslaan.
Selecteer Op de pagina Nieuwe revisie maken en implementeren de optie Maken om de nieuwe revisie te maken.
In dit voorbeeld wordt de verbindingsreeks van de toepassing gedeclareerd als queue-connection-string en wordt deze elders beschikbaar in de configuratiesecties.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "String"
},
"environment_id": {
"type": "String"
},
"key_vault_secret_uri": { ⬅️
"type": "String" ⬅️
} ⬅️
},
"variables": {},
"resources": [
{
"name": "queuereader",
"type": "Microsoft.App/containerApps",
"apiVersion": "2022-03-01",
"kind": "containerapp",
"location": "[parameters('location')]",
"properties": {
"managedEnvironmentId": "[parameters('environment_id')]",
"configuration": {
"activeRevisionsMode": "single",
"secrets": [ ⬅️
{ ⬅️
"name": "queue-connection-string", ⬅️
"keyVaultUrl": "[parameters('key_vault_secret_uri')", ⬅️
"identity": "system" ⬅️
}] ⬅️
},
"template": {
"containers": [
{
"image": "myregistry/myQueueApp:v1",
"name": "myQueueApp",
"env": [
{
"name": "QueueName",
"value": "myqueue"
},
{
"name": "ConnectionString", ⬅️
"secretRef": "queue-connection-string" ⬅️
}
]
}
],
"scale": {
"minReplicas": 0,
"maxReplicas": 10,
"rules": [
{
"name": "myqueuerule",
"azureQueue": {
"queueName": "demoqueue",
"queueLength": 100,
"auth": [
{
"secretRef": "queue-connection-string", ⬅️
"triggerParameter": "connection" ⬅️
}
]
}
}
]
}
}
}
}]
}
Hier haalt de omgevingsvariabele met de naam connection-string de waarde op uit het geheim op toepassingsniveau queue-connection-string . De verificatieconfiguratie van de schaalregel voor Azure Queue Storage maakt ook gebruik van de queue-connection-string geheim om de verbinding te definiëren.
Als u wilt voorkomen dat geheime waarden worden doorgevoerd in broncodebeheer met uw ARM-sjabloon, geeft u geheime waarden door als ARM-sjabloonparameters.
In dit voorbeeld maakt u een container-app met behulp van de Azure CLI met een geheim waarnaar wordt verwezen in een omgevingsvariabele. Als u wilt verwijzen naar een geheim in een omgevingsvariabele in de Azure CLI, stelt u de waarde secretref:in op , gevolgd door de naam van het geheim.
az containerapp create \
--resource-group "my-resource-group" \
--name myQueueApp \
--environment "my-environment-name" \
--image demos/myQueueApp:v1 \
--user-assigned "<USER_ASSIGNED_IDENTITY_ID>" \
--secrets "queue-connection-string=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<USER_ASSIGNED_IDENTITY_ID>" \
--env-vars "QueueName=myqueue" "ConnectionString=secretref:queue-connection-string"
Hier haalt de omgevingsvariabele met de naam connection-string de waarde op uit het geheim op toepassingsniveau queue-connection-string .
Verwijzingen naar Secrets Key Vault worden niet ondersteund in PowerShell.
In dit voorbeeld maakt u een container met behulp van Azure PowerShell met een geheim waarnaar wordt verwezen in een omgevingsvariabele. Als u wilt verwijzen naar het geheim in een omgevingsvariabele in PowerShell, stelt u de waarde secretref:in op , gevolgd door de naam van het geheim.
$EnvId = (Get-AzContainerAppManagedEnv -ResourceGroupName my-resource-group -EnvName my-environment-name).Id
$SecretObj = New-AzContainerAppSecretObject -Name queue-connection-string -Value $QueueConnectionString
$EnvVarObjQueue = New-AzContainerAppEnvironmentVarObject -Name QueueName -Value myqueue
$EnvVarObjConn = New-AzContainerAppEnvironmentVarObject -Name ConnectionString -SecretRef queue-connection-string -Value secretref
$TemplateObj = New-AzContainerAppTemplateObject -Name myQueueApp -Image demos/myQueueApp:v1 -Env $EnvVarObjQueue, $EnvVarObjConn
$ContainerAppArgs = @{
Name = 'myQueueApp'
Location = '<location>'
ResourceGroupName = 'my-resource-group'
ManagedEnvironmentId = $EnvId
TemplateContainer = $TemplateObj
ConfigurationSecret = $SecretObj
}
New-AzContainerApp @ContainerAppArgs
Hier haalt de omgevingsvariabele met de naam ConnectionString de waarde op uit het geheim op toepassingsniveau $QueueConnectionString .
Het monteren van geheimen in een volume
Nadat u geheimen op toepassingsniveau hebt gedeclareerd zoals beschreven in de sectie Geheimen definiëren, kunt u ze gebruiken in volume mounts wanneer u een nieuwe revisie in uw container-app maakt. Wanneer u geheimen in een volume koppelt, wordt elk geheim gekoppeld als een bestand in het volume. De bestandsnaam is de naam van het geheim en de bestandsinhoud is de waarde van het geheim. U kunt alle geheimen gegevens in een volume-aankoppeling laden, of specifieke geheimen gegevens laden.
Voorbeeld
Nadat u een geheim in uw container-app hebt gedefinieerd, kunt u ernaar verwijzen via een volume mount bij het maken van een nieuwe revisie.
Ga naar uw container-app in Azure Portal.
In de sectie Toepassing, selecteer Revisies en replica's.
Selecteer op de pagina Revisies en replica'sde optie Nieuwe revisie maken.
Selecteer op de pagina Nieuwe revisie maken en implementeren op het tabblad Container , onder de sectie Containerinstallatiekopieën , een container.
Kies Bewerken.
Selecteer in het deelvenster Container bewerken het tabblad Volumemounts.
Selecteer Nieuw volume maken.
Voer in het deelvenster Volume toevoegen de volgende gegevens in:
-
Volumetype: Selecteer
Secret.
-
Naam:
mysecrets
-
Alle geheimen koppelen: ingeschakeld
Opmerking
Als u specifieke geheimen wilt laden, schakelt u Alle geheimen mounten uit en selecteert u de geheimen die u wilt laden.
Selecteer Toevoegen.
Selecteer mysecrets in het deelvenster Een containercontext bewerken onder Volumenaam.
Voer onder Mountpad het in /mnt/secrets.
Selecteer Opslaan.
Klik op de pagina Nieuwe revisie maken en implementeren op Maken om de nieuwe revisie met de volumekoppeling te maken.
In dit voorbeeld worden twee geheimen gedeclareerd op toepassingsniveau. Deze geheime gegevens worden gekoppeld in een volume met de naam mysecrets van het type Secret. Het volume is gekoppeld aan het pad /mnt/secrets. De toepassing kan vervolgens verwijzen naar de geheimen in de volumekoppeling.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "String"
},
"environment_id": {
"type": "String"
},
"key_vault_secret_uri": {
"type": "Securestring"
},
"api-key": {
"type": "Securestring"
}
},
"variables": {},
"resources": [
{
"name": "queuereader",
"type": "Microsoft.App/containerApps",
"apiVersion": "2022-11-01-preview",
"kind": "containerapp",
"location": "[parameters('location')]",
"properties": {
"managedEnvironmentId": "[parameters('environment_id')]",
"configuration": {
"activeRevisionsMode": "single",
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "[parameters('key_vault_secret_uri')",
"identity": "system"
},
{
"name": "api-key",
"value": "[parameters('api-key')]"
}
]
},
"template": {
"containers": [
{
"image": "myregistry/myQueueApp:v1",
"name": "myQueueApp",
"volumeMounts": [
{
"name": "mysecrets",
"mountPath": "/mnt/secrets"
}
]
}
],
"volumes": [
{
"name": "mysecrets",
"storageType": "Secret"
}
]
}
}
}]
}
Als u specifieke geheimen wilt laden en hun paden binnen het gekoppelde volume wilt opgeven, definieert u de geheimen in de secrets matrix van het volumeobject. In het volgende voorbeeld ziet u hoe u alleen het queue-connection-string geheim in de mysecrets volumekoppeling laadt met een bestandsnaam van connection-string.txt.
{
"properties": {
...
"configuration": {
...
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "[parameters('key_vault_secret_uri')",
"identity": "system"
},
{
"name": "api-key",
"value": "[parameters('api-key')]"
}
]
},
"template": {
"containers": [
{
"image": "myregistry/myQueueApp:v1",
"name": "myQueueApp",
"volumeMounts": [
{
"name": "mysecrets",
"mountPath": "/mnt/secrets"
}
]
}
],
"volumes": [
{
"name": "mysecrets",
"storageType": "Secret",
"secrets": [
{
"secretRef": "queue-connection-string",
"path": "connection-string.txt"
}
]
}
]
}
...
}
...
}
In uw app kunt u het geheim lezen uit een bestand in /mnt/secrets/connection-string.txt.
In dit voorbeeld worden twee geheimen gedeclareerd op toepassingsniveau. Deze geheime gegevens worden gekoppeld in een volume met de naam mysecrets van het type Secret. Het volume is gekoppeld aan het pad /mnt/secrets. Vervolgens kan de toepassing de geheimen lezen als bestanden in de volume mount.
az containerapp create \
--resource-group "my-resource-group" \
--name myQueueApp \
--environment "my-environment-name" \
--image demos/myQueueApp:v1 \
--user-assigned "<USER_ASSIGNED_IDENTITY_ID>" \
--secrets "queue-connection-string=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<USER_ASSIGNED_IDENTITY_ID>" "api-key=$API_KEY" \
--secret-volume-mount "/mnt/secrets"
Als u specifieke geheimen wilt laden en hun paden binnen het gekoppelde volume wilt opgeven, definieert u uw app met YAML.
Het koppelen van geheimen als een volume wordt niet ondersteund in PowerShell.
Volgende stappen