Az Azure Key Vault használata biztonságos paraméterértékek üzembe helyezéskori átadására
Ahelyett, hogy közvetlenül a sablonba vagy paraméterfájlba helyezné a biztonságos értéket (például egy jelszót), lekérheti az értéket egy Azure-Key Vault az üzembe helyezés során. Az érték lekéréséhez hivatkozzon a kulcstartóra és a titkos kódra a paraméterfájlban. Az érték soha nem lesz közzétéve, mert csak a kulcstartó azonosítójára hivatkozik.
Fontos
Ez a cikk arra összpontosít, hogyan adhat át bizalmas értékeket sablonparaméterként. Ha a titkos kulcs paraméterként van átadva, a kulcstartó egy másik előfizetésben is létezhet, mint az erőforráscsoport, amelyen üzembe helyezi.
Ez a cikk nem ismerteti, hogyan állíthat be egy virtuálisgép-tulajdonságot egy tanúsítvány URL-címére egy kulcstartóban. A forgatókönyv rövid útmutató sablonját lásd: Tanúsítvány telepítése az Azure Key Vault-ból virtuális gépre.
Kulcstartók és titkos kódok üzembe helyezése
Ha a sablon üzembe helyezése során szeretne hozzáférni egy kulcstartóhoz, állítsa enabledForTemplateDeployment
a kulcstartót értékre true
.
Ha már rendelkezik kulcstartóval, győződjön meg arról, hogy engedélyezi a sablontelepítéseket.
az keyvault update --name ExampleVault --enabled-for-template-deployment true
Új kulcstartó létrehozásához és titkos kód hozzáadásához használja a következőt:
az group create --name ExampleGroup --location centralus
az keyvault create \
--name ExampleVault \
--resource-group ExampleGroup \
--location centralus \
--enabled-for-template-deployment true
az keyvault secret set --vault-name ExampleVault --name "ExamplePassword" --value "hVFkk965BuUv"
A kulcstartó tulajdonosaként automatikusan hozzáférhet a titkos kulcsok létrehozásához. Ha egy másik felhasználónak kell titkos kulcsokat létrehoznia, használja a következőt:
az keyvault set-policy \
--upn <user-principal-name> \
--name ExampleVault \
--secret-permissions set delete get list
A hozzáférési szabályzatokra nincs szükség, ha a felhasználó egy titkos kulcsot lekérő sablont helyez üzembe. Csak akkor adjon hozzá felhasználót a hozzáférési szabályzatokhoz, ha a felhasználónak közvetlenül kell dolgoznia a titkos kódokkal. Az üzembehelyezési engedélyeket a következő szakaszban definiáljuk.
A kulcstartók létrehozásával és a titkos kulcsok hozzáadásával kapcsolatos további információkért lásd:
- Titkos kód beállítása és lekérése a parancssori felület használatával
- Titkos kód beállítása és lekérése a PowerShell használatával
- Titkos kód beállítása és lekérése a portál használatával
- Titkos kód beállítása és lekérése a .NET használatával
- Titkos kód beállítása és lekérése Node.jshasználatával
Üzembe helyezési hozzáférés biztosítása a titkos kódokhoz
A sablont üzembe helyező felhasználónak rendelkeznie kell az Microsoft.KeyVault/vaults/deploy/action
erőforráscsoport és a kulcstartó hatókörére vonatkozó engedéllyel. A hozzáférés ellenőrzésével az Azure Resource Manager megakadályozza, hogy egy nem jóváhagyott felhasználó hozzáférjen a titkos kódhoz a kulcstartó erőforrás-azonosítójának megadásával. A titkos kulcsokhoz való írási hozzáférés megadása nélkül is biztosíthat üzembe helyezési hozzáférést a felhasználóknak.
Ezt a hozzáférést a Tulajdonos és a Közreműködő szerepkör is biztosítja. Ha létrehozta a kulcstartót, Ön a tulajdonos, és rendelkezik az engedéllyel.
Más felhasználók számára adja meg az Microsoft.KeyVault/vaults/deploy/action
engedélyt. Az alábbi eljárás bemutatja, hogyan hozhat létre egy szerepkört a minimális engedéllyel, és hogyan rendelheti hozzá egy felhasználóhoz.
Hozzon létre egy egyéni szerepkör-definíciós JSON-fájlt:
{ "Name": "Key Vault resource manager template deployment operator", "IsCustom": true, "Description": "Lets you deploy a resource manager template with the access to the secrets in the Key Vault.", "Actions": [ "Microsoft.KeyVault/vaults/deploy/action" ], "NotActions": [], "DataActions": [], "NotDataActions": [], "AssignableScopes": [ "/subscriptions/00000000-0000-0000-0000-000000000000" ] }
Cserélje le a "00000000-0000-0000-0000-000000000000" értéket az előfizetés-azonosítóra.
Hozza létre az új szerepkört a JSON-fájllal:
az role definition create --role-definition "<path-to-role-file>" az role assignment create \ --role "Key Vault resource manager template deployment operator" \ --scope /subscriptions/<Subscription-id>/resourceGroups/<resource-group-name> \ --assignee <user-principal-name> \ --resource-group ExampleGroup
A minták hozzárendelik az egyéni szerepkört a felhasználóhoz az erőforráscsoport szintjén.
Ha kulcstartót használ egy felügyelt alkalmazás sablonjával, hozzáférést kell adnia a berendezés erőforrás-szolgáltató szolgáltatásnevéhez . További információ: Hozzáférés Key Vault titkos kódhoz az Azure Managed Applications üzembe helyezésekor.
Statikus azonosítóval rendelkező titkos kulcsok hivatkozása
Ezzel a módszerrel a paraméterfájl kulcstartójára kell hivatkozni, nem a sablonra. Az alábbi képen látható, hogy a paraméterfájl hogyan hivatkozik a titkos kódra, és továbbítja ezt az értéket a sablonnak.
Oktatóanyag: Az Azure Key Vault integrálása Resource Manager sablon üzembe helyezésébe ezt a módszert használja.
Az alábbi sablon egy rendszergazdai jelszót tartalmazó SQL Servert helyez üzembe. A jelszó paramétere egy biztonságos sztringre van állítva. A sablon azonban nem határozza meg, hogy az érték honnan származik.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"sqlServerName": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"adminLogin": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
}
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2021-11-01",
"name": "[parameters('sqlServerName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('adminLogin')]",
"administratorLoginPassword": "[parameters('adminPassword')]",
"version": "12.0"
}
}
]
}
Most hozzon létre egy paraméterfájlt az előző sablonhoz. A paraméterfájlban adjon meg egy paramétert, amely megegyezik a paraméter nevével a sablonban. A paraméter értékeként hivatkozzon a kulcstartó titkos kódjára. A titkos kódra a kulcstartó erőforrás-azonosítójának és a titkos kód nevének megadásával hivatkozhat:
A következő paraméterfájlban a kulcstartó titkos kódjának már léteznie kell, és statikus értéket kell megadnia az erőforrás-azonosítóhoz.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"value": "exampleadmin"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>"
},
"secretName": "ExamplePassword"
}
},
"sqlServerName": {
"value": "<your-server-name>"
}
}
}
Ha a titkos kódnak az aktuális verziótól eltérő verzióját kell használnia, adja meg a tulajdonságot secretVersion
.
"secretName": "ExamplePassword",
"secretVersion": "cd91b2b7e10e492ebb870a6ee0591b68"
Helyezze üzembe a sablont, és adja meg a paraméterfájlt:
az group create --name SqlGroup --location westus2
az deployment group create \
--resource-group SqlGroup \
--template-uri <template-file-URI> \
--parameters <parameter-file>
Dinamikus azonosítóval rendelkező titkos kulcsok hivatkozása
Az előző szakasz bemutatta, hogyan adhatja át a key vault titkos kulcsának statikus erőforrás-azonosítóját a paraméterből. Bizonyos esetekben egy kulcstartó titkos kódjára kell hivatkoznia, amely az aktuális üzembe helyezéstől függően változik. Vagy érdemes lehet paraméterértékeket átadni a sablonnak ahelyett, hogy referenciaparamétert hozna létre a paraméterfájlban. A megoldás egy kulcstartó titkos kulcsának erőforrás-azonosítójának dinamikus létrehozása egy csatolt sablon használatával.
Nem lehet dinamikusan létrehozni az erőforrás-azonosítót a paraméterfájlban, mert a sablonkifejezések nem használhatók a paraméterfájlban.
A szülősablonban adja hozzá a beágyazott sablont, és adjon meg egy paramétert, amely tartalmazza a dinamikusan létrehozott erőforrás-azonosítót. Az alábbi képen látható, hogyan hivatkozik a titkos kódra a csatolt sablon egyik paramétere.
Az alábbi sablon dinamikusan létrehozza a kulcstartó azonosítóját, és paraméterként adja át.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location where the resources will be deployed."
}
},
"vaultName": {
"type": "string",
"metadata": {
"description": "The name of the keyvault that contains the secret."
}
},
"secretName": {
"type": "string",
"metadata": {
"description": "The name of the secret."
}
},
"vaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "The name of the resource group that contains the keyvault."
}
},
"vaultSubscription": {
"type": "string",
"defaultValue": "[subscription().subscriptionId]",
"metadata": {
"description": "The name of the subscription that contains the keyvault."
}
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "dynamicSecret",
"properties": {
"mode": "Incremental",
"expressionEvaluationOptions": {
"scope": "inner"
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
},
"location": {
"type": "string"
}
},
"variables": {
"sqlServerName": "[concat('sql-', uniqueString(resourceGroup().id, 'sql'))]"
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2021-11-01",
"name": "[variables('sqlServerName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('adminLogin')]",
"administratorLoginPassword": "[parameters('adminPassword')]"
}
}
],
"outputs": {
"sqlFQDN": {
"type": "string",
"value": "[reference(variables('sqlServerName')).fullyQualifiedDomainName]"
}
}
},
"parameters": {
"location": {
"value": "[parameters('location')]"
},
"adminLogin": {
"value": "ghuser"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "[resourceId(parameters('vaultSubscription'), parameters('vaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
},
"secretName": "[parameters('secretName')]"
}
}
}
}
}
]
}
Következő lépések
- A kulcstartókkal kapcsolatos általános információkért lásd: Mi az az Azure Key Vault?
- A kulcstitkokra való hivatkozás teljes példáiért tekintse meg a Key Vault-példákat a GitHubon.
- A kulcstartók biztonságos értékének átadását ismertető Learn-modulért lásd: Összetett felhőbeli üzemelő példányok kezelése speciális ARM-sablonfunkciók használatával.