Az Azure Container Apps lehetővé teszi, hogy az alkalmazás biztonságosan tárolja a bizalmas konfigurációs értékeket. Miután a titkos kulcsokat az alkalmazás szintjén definiálta, biztonságos értékek érhetők el a tárolóalkalmazások korrektúrái számára. Emellett a skálázási szabályokon belül hivatkozhat a védett értékekre. A titkos kódok Daprvel való használatáról további információt a Dapr-integrációban talál.
- A titkos kódok az alkalmazás hatókörén belül érvényesek, az alkalmazás bármely meghatározott verzióján kívül.
- Az új változatok nem jönnek létre titkos kódok hozzáadásával, eltávolításával vagy módosításával.
- Az egyes alkalmazásváltozatok egy vagy több titkos kódra mutató hivatkozást tartalmazhatnak.
- Több változat is tartalmazhat ugyanarra/ugyanazokra a titkos kód(ok)ra mutató hivatkozást.
A frissített vagy törölt titkos kódok nem befolyásolják automatikusan az alkalmazás meglévő változatait. Egy titkos kód frissítésekor vagy törlésekor fellépő változásokra az alábbi két módszer egyikével reagálhat:
- Új változatot helyezhet üzembe.
- Újraindíthat egy meglévő változatot.
A titkos kód törlése előtt helyezzen üzembe egy új változatot, amely nem tartalmaz hivatkozást a régi kódra. Ezután inaktiválja a titkos kódra hivatkozó összes változatot.
Titkos kódok definiálása
A titkos kulcsok név-érték párok halmazaként vannak definiálva. Az egyes titkos kódok értéke közvetlenül vagy az Azure Key Vaultban tárolt titkos kódra való hivatkozásként van megadva.
Titkos kód értékének tárolása a Container Appsben
Ha titkos kulcsokat határoz meg a portálon vagy különböző parancssori beállításokon keresztül.
Nyissa meg a tárolóalkalmazást az Azure Portalon.
A Beállítások szakaszban válassza a Titkos kulcsok lehetőséget.
Válassza a Hozzáadás lehetőséget.
A Titkos kód hozzáadása panelen adja meg a következő információkat:
-
Név: A titkos kód neve.
-
Típus: Válassza ki a Container Apps titkos kulcsát.
-
Érték: A titkos kód értéke.
Válassza a Hozzáadás lehetőséget.
A titkos kulcsok a szakasz alkalmazásszintjén vannak definiálva resources.properties.configuration.secrets .
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"value": "<MY-CONNECTION-STRING-VALUE>"
}],
}
}
}
Itt a rendszer a tömbben secrets deklarálja az üzenetsor tárfiókjának kapcsolati sztring. Ebben a példában a kapcsolati sztring értékét kell lecserélni<MY-CONNECTION-STRING-VALUE>.
Tárolóalkalmazás létrehozásakor a titkos kulcsok a --secrets paraméterrel lesznek definiálva.
- A paraméter a név/érték párok szóközzel tagolt készletét fogadja el.
- Az egyenlőségjel (
=) elválasztja az egyes párokat.
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--secrets "queue-connection-string=<CONNECTION_STRING>"
Itt a rendszer deklarálja az üzenetsor tárfiókjának kapcsolati sztring a --secrets paraméterben. Cserélje le <CONNECTION_STRING> a kapcsolati sztring értékére.
Tárolóalkalmazás létrehozásakor a titkos kulcsok egy vagy több titkos objektumként vannak definiálva, amelyek a ConfigurationSecrets paraméteren áthaladnak.
$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
Itt deklaráljuk az üzenetsor tárfiókjának kapcsolati sztring. Az érték egy queue-connection-string környezeti változóból $QueueConnectionStringszármazik.
Titkos kulcs hivatkozása a Key Vaultból
Titkos kulcs definiálásakor egy, az Azure Key Vaultban tárolt titkos kódra mutató hivatkozást hoz létre. A Container Apps automatikusan lekéri a titkos kulcsot a Key Vaultból, és titkos kódként elérhetővé teszi a tárolóalkalmazásban.
A Key Vault titkos kulcsára való hivatkozáshoz először engedélyeznie kell a felügyelt identitást a tárolóalkalmazásban, és hozzáférést kell adnia az identitásnak a Key Vault titkos kulcsaihoz.
Ha engedélyezni szeretné a felügyelt identitást a tárolóalkalmazásban, olvassa el a Felügyelt identitások című témakört.
A Key Vault titkokhoz való hozzáférés biztosításához rendelje hozzá a felügyelt identitáshoz az Azure RBAC-szerepkör Key Vault Secret User-t.
Nyissa meg a tárolóalkalmazást az Azure Portalon.
A Beállítások szakaszban válassza az Identitás lehetőséget.
A Rendszer által hozzárendelt lapon állítsa be az állapotot Be értékre.
Feljegyzés
Használhat felhasználó által hozzárendelt felügyelt identitást is, amely több erőforráson is újra felhasználható, és az alkalmazás életciklusától függetlenül megmarad. A használatához válassza a Felhasználó által hozzárendelt lapot, és válasszon ki egy meglévő identitást.
Válassza a Mentés lehetőséget a rendszer által hozzárendelt felügyelt identitás engedélyezéséhez.
Megjelenik egy előugró ablak, amely megerősíti, hogy engedélyezni szeretné a rendszer által hozzárendelt felügyelt identitást, és regisztrálja a tárolóalkalmazást a Microsoft Entra-azonosítóval. Válassza az Igen lehetőséget.
A Beállítások szakaszban válassza a Titkos kulcsok lehetőséget.
Válassza a Hozzáadás lehetőséget.
A Titkos kód hozzáadása panelen adja meg a következő információkat:
-
Név: A titkos kód neve.
-
Típus: Válassza ki a Key Vault referenciát.
-
Key Vault titkos URL-címe: A titkos kulcs URI-ja a Key Vaultban. Ez az URI a következő űrlapot tartalmazza:
https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
-
Identitás: Válassza ki a hozzárendelt rendszert.
Válassza a Hozzáadás lehetőséget.
A titkos kulcsok a szakasz alkalmazásszintjén vannak definiálva resources.properties.configuration.secrets .
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "<KEY_VAULT_SECRET_URI>",
"identity": "system"
}],
}
}
}
Itt a rendszer a tömbben secrets deklarálja az üzenetsor tárfiókjának kapcsolati sztring. Az érték automatikusan lekéri a Key Vaultból a megadott identitás használatával. Felhasználó által felügyelt identitás használatához cserélje le system az identitás erőforrás-azonosítóját.
Cserélje le <KEY_VAULT_SECRET_URI> a titkos kulcs URI-jára a Key Vaultban.
Tárolóalkalmazás létrehozásakor a titkos kulcsok a --secrets paraméterrel lesznek definiálva.
- A paraméter a név/érték párok szóközzel tagolt készletét fogadja el.
- Az egyenlőségjel (
=) elválasztja az egyes párokat.
- Key Vault-referencia megadásához használja a formátumot
<SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Például: 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>"
Itt a rendszer deklarálja az üzenetsor tárfiókjának kapcsolati sztring a --secrets paraméterben. Cserélje le <KEY_VAULT_SECRET_URI> a titkos kulcs URI-jára a Key Vaultban. Cserélje le <USER_ASSIGNED_IDENTITY_ID> a felhasználó által hozzárendelt identitás erőforrás-azonosítójára.
Feljegyzés
A felhasználó által hozzárendelt identitásnak hozzáféréssel kell rendelkeznie ahhoz, hogy beolvassa a titkos kulcsot a Key Vaultban. A rendszer által hozzárendelt identitás nem használható a létrehozási paranccsal, mert csak a tárolóalkalmazás létrehozása után érhető el.
A Titkos kulcstartó hivatkozásai a PowerShellben nem támogatottak.
Feljegyzés
Ha az UDR-t az Azure Firewall használatával használja, hozzá kell adnia a szolgáltatáscímkét és a AzureKeyVault teljes tartománynevet a tűzfal engedélyezési listájához.
Az UDR és az Azure Firewall konfigurálásával eldöntheti, hogy mely további szolgáltatáscímkékre van szüksége.
Key Vault titkos URI és titkos kulcsok rotálása
A Key Vault titkos URI-jának az alábbi formátumok egyikében kell lennie:
-
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: Hivatkozás egy titkos kód egy adott verziójára.
-
https://myvault.vault.azure.net/secrets/mysecret: Hivatkozás egy titkos kód legújabb verziójára.
Ha nincs megadva verzió az URI-ban, akkor az alkalmazás a key vaultban található legújabb verziót használja. Az újabb verziók elérhetővé válása után az alkalmazás 30 percen belül automatikusan lekéri a legújabb verziót. A környezeti változó titkos kódjára hivatkozó aktív változatok automatikusan újraindulnak az új érték felvételéhez.
A titkos kódok melyik verziójának teljes vezérléséhez adja meg a verziót az URI-ban.
Titkos kódok hivatkozása környezeti változókban
Miután az alkalmazás szintjén deklarálta a titkos kulcsokat a definiáló titkos kódok szakaszban leírtak szerint, környezeti változókban hivatkozhat rájuk, amikor új változatot hoz létre a tárolóalkalmazásban. Amikor egy környezeti változó egy titkos kódra hivatkozik, annak értéke a titkos kódban meghatározott értékkel lesz feltöltve.
Példa
Az alábbi példa egy olyan alkalmazást mutat be, amely az alkalmazás szintjén deklarál egy kapcsolati sztring. Erre a kapcsolatra egy tárolókörnyezet változója és egy méretezési szabály hivatkozik.
Miután definiált egy titkos kulcsot a tárolóalkalmazásban, hivatkozhat rá egy környezeti változóban, amikor új változatot hoz létre.
Nyissa meg a tárolóalkalmazást az Azure Portalon.
Az Alkalmazás szakaszban válassza a Változatok és replikák lehetőséget.
A Változatok és replikák lapon válassza az Új változat létrehozása lehetőséget.
Az Új változat létrehozása és üzembe helyezése lapon, a Tároló lap Tároló lemezkép szakaszában válasszon ki egy tárolót.
Válassza a Szerkesztés lehetőséget.
A Tárolókörnyezet szerkesztése panelen válassza a Környezeti változók lapot.
Válassza a Hozzáadás lehetőséget.
Adja meg a következő adatokat:
-
Név: A környezeti változó neve.
-
Forrás: Válassza a Hivatkozás egy titkos kódra lehetőséget.
-
Érték: Válassza ki a korábban definiált titkos kódot.
Válassza a Mentés lehetőséget.
Az Új változat létrehozása és üzembe helyezése lapon válassza a Létrehozás lehetőséget az új változat létrehozásához.
Ebben a példában az alkalmazás kapcsolati sztring deklarálva queue-connection-string lesz, és a konfigurációs szakaszokban máshol is elérhetővé válik.
{
"$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" ⬅️
}
]
}
}
]
}
}
}
}]
}
Itt a névvel ellátott connection-string környezeti változó az alkalmazásszintű queue-connection-string titkos kódból kapja meg az értékét. Emellett az Azure Queue Storage skálázási szabály hitelesítési konfigurációja a titkos kulcsot használja a queue-connection-string kapcsolat meghatározásához.
Ha el szeretné kerülni, hogy titkos értékeket véglegesítsen a forráskövetéshez az ARM-sablonnal, adja át a titkos értékeket ARM-sablonparaméterekként.
Ebben a példában létrehoz egy tárolóalkalmazást az Azure CLI használatával egy környezeti változóban hivatkozott titkos kóddal. Ha egy környezeti változóban lévő titkos kódra szeretne hivatkozni secretref:az Azure CLI-ben, állítsa be annak értékét, majd a titkos kód nevét.
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"
Itt a névvel ellátott connection-string környezeti változó az alkalmazásszintű queue-connection-string titkos kódból kapja meg az értékét.
A Titkos kulcstartó hivatkozásai a PowerShellben nem támogatottak.
Ebben a példában létrehoz egy tárolót az Azure PowerShell használatával egy környezeti változóban hivatkozott titkos kóddal. Ha a PowerShellben egy környezeti változó titkos kódjára szeretne hivatkozni secretref:, állítsa az értékét , majd a titkos kód nevét.
$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
Itt a névvel ellátott ConnectionString környezeti változó az alkalmazásszintű $QueueConnectionString titkos kódból kapja meg az értékét.
Titkos kódok csatlakoztatása kötetben
Miután az alkalmazás szintjén deklarálta a titkos kulcsokat a definiáló titkos kódok szakaszban leírtak szerint, kötetcsatlakozásokban hivatkozhat rájuk, amikor új változatot hoz létre a tárolóalkalmazásban. Amikor titkos kulcsokat csatlakoztat egy kötethez, minden titkos kód fájlként van csatlakoztatva a kötethez. A fájlnév a titkos kód neve, a fájl tartalma pedig a titkos kód értéke. Betöltheti az összes titkos elemet egy kötetcsatlakoztatásban, vagy betölthet bizonyos titkos kulcsokat.
Példa
Miután definiált egy titkos kulcsot a tárolóalkalmazásban, egy kötetcsatlakozásban hivatkozhat rá egy új változat létrehozásakor.
Nyissa meg a tárolóalkalmazást az Azure Portalon.
Az Alkalmazás szakaszban válassza a Változatok és replikák lehetőséget.
A Változatok és replikák lapon válassza az Új változat létrehozása lehetőséget.
Az Új változat létrehozása és üzembe helyezése lapon, a Tároló lap Tároló lemezkép szakaszában válasszon ki egy tárolót.
Válassza a Szerkesztés lehetőséget.
A Tárolókörnyezet szerkesztése panelen válassza a Kötet csatlakoztatása lapot.
Válassza az Új kötet létrehozása lehetőséget.
A Kötet hozzáadása panelen adja meg a következő adatokat:
-
Kötet típusa: Válassza a lehetőséget
Secret.
-
Név:
mysecrets
-
Az összes titkos kód csatlakoztatása: engedélyezve
Feljegyzés
Ha konkrét titkos kulcsokat szeretne betölteni, tiltsa le az összes titkos kulcs csatlakoztatását, és válassza ki a betölteni kívánt titkos kulcsokat.
Válassza a Hozzáadás lehetőséget.
A Tárolókörnyezet szerkesztése panel Kötet neve területén válassza ki a mysecrets elemet.
A csatlakoztatási útvonal alatt adja meg a kívánt értéket/mnt/secrets.
Válassza a Mentés lehetőséget.
Az új változat létrehozása és üzembe helyezése lapon válassza a Létrehozás lehetőséget az új változat kötet csatlakoztatásával történő létrehozásához.
Ebben a példában két titkos kulcs van deklarálva az alkalmazás szintjén. Ezek a titkos kódok egy típusnak mysecretsnevezett Secret kötetbe vannak csatlakoztatva. A kötet az elérési úthoz /mnt/secretsvan csatlakoztatva. Az alkalmazás ezután hivatkozhat a kötet csatlakoztatásában lévő titkos kódokra.
{
"$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"
}
]
}
}
}]
}
Ha konkrét titkos kulcsokat szeretne betölteni, és meg szeretné adni az elérési útjukat a csatlakoztatott köteten belül, a kötetobjektum tömbjében definiálhatja a secrets titkos kulcsokat. Az alábbi példa bemutatja, hogyan tölthető be csak a titkos kód a queue-connection-string kötet csatlakoztatásában a mysecrets fájlnévvel 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"
}
]
}
]
}
...
}
...
}
Az alkalmazásban elolvashatja a titkos kódot a következő /mnt/secrets/connection-string.txthelyen található fájlból: .
Ebben a példában két titkos kulcs van deklarálva az alkalmazás szintjén. Ezek a titkos kódok egy típusnak mysecretsnevezett Secret kötetbe vannak csatlakoztatva. A kötet az elérési úthoz /mnt/secretsvan csatlakoztatva. Az alkalmazás ezután fájlként olvashatja be a titkos kulcsokat a kötet csatlakoztatásában.
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"
Ha konkrét titkos kulcsokat szeretne betölteni, és meg szeretné adni az elérési útjukat a csatlakoztatott köteten belül, adja meg az alkalmazást a YAML használatával.
A titkos kulcsok kötetként való csatlakoztatása a PowerShellben nem támogatott.
Következő lépések