Titkos kódok kezelése a Bicep használatával
Az üzemelő példányok gyakran megkövetelik a titkos kulcsok biztonságos tárolását és terjesztését az Azure-környezetben. A Bicep és az Azure számos funkciót kínál, amelyekkel titkos kulcsokat kezelhet az üzemelő példányokban.
Kerülje a titkos kulcsokat, ahol csak lehet
Sok esetben előfordulhat, hogy egyáltalán nem használ titkos kulcsokat. Számos Azure-erőforrás támogatja a felügyelt identitásokat, amelyek lehetővé teszik számukra a hitelesítést és a hozzáférésüket az Azure-on belüli egyéb erőforrásokhoz anélkül, hogy hitelesítő adatokat kellene kezelniük vagy kezelniük. Emellett egyes Azure-szolgáltatások automatikusan létrehozhatnak HTTPS-tanúsítványokat, így elkerülheti a tanúsítványok és a titkos kulcsok kezelését. Ahol csak lehetséges, használjon felügyelt identitásokat és szolgáltatás által felügyelt tanúsítványokat.
Biztonságos paraméterek használata
Ha titkos kulcsokat kell megadnia a Bicep-üzemelő példányokhoz paraméterekként, használja a @secure()
dekorátort. Ha biztonságosként jelöl meg egy paramétert, az Azure Resource Manager elkerüli az érték naplózását vagy megjelenítését a Azure Portal, az Azure CLI-ben vagy a Azure PowerShell.
Titkos kódok kimeneteinek elkerülése
Ne használjon Bicep-kimeneteket biztonságos adatokhoz. A rendszer naplózza a kimeneteket az üzembe helyezési előzményekbe, és bárki, aki hozzáfér az üzemelő példányhoz, megtekintheti az üzemelő példány kimenetének értékeit.
Ha titkos kódot kell létrehoznia egy Bicep-üzemelő példányban, és elérhetővé kell tennie a hívó vagy más erőforrások számára, fontolja meg az alábbi módszerek egyikét.
Titkos kódok dinamikus keresése
Néha hozzá kell férnie egy titkos kódhoz az egyik erőforrásból egy másik erőforrás konfigurálásához.
Előfordulhat például, hogy létrehozott egy tárfiókot egy másik üzemelő példányban, és hozzá kell férnie az elsődleges kulcsához egy Azure Functions alkalmazás konfigurálásához. A kulcsszóval existing
beszerezhet egy erősen beírt hivatkozást az előre létrehozott tárfiókra, majd a tárfiók metódusával listKeys()
létrehozhat egy kapcsolati sztring az elsődleges kulccsal:
Az alábbi példa egy nagyobb példa része. Az üzembe helyezhető Bicep-fájlokat a teljes fájlban találja.
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' existing = {
name: storageAccountName
}
var storageAccountConnectionString = 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${listKeys(storageAccount.id, storageAccount.apiVersion).keys[0].value}'
resource functionApp 'Microsoft.Web/sites@2021-02-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
httpsOnly: true
serverFarmId: appServicePlan.id
siteConfig: {
appSettings: [
{
name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
value: applicationInsights.properties.InstrumentationKey
}
{
name: 'AzureWebJobsStorage'
value: storageAccountConnectionString
}
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~3'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: 'dotnet'
}
{
name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
value: storageAccountConnectionString
}
]
}
}
}
Ezzel a módszerrel elkerülheti, hogy titkos kulcsokat adjon át a Bicep-fájlba vagy onnan ki.
Ezzel a módszerrel titkos kulcsokat is tárolhat egy kulcstartóban.
A Key Vault használata
Az Azure Key Vault biztonságos adatok tárolására és kezelésére lett tervezve. Kulcstartó használatával kezelheti a titkos kulcsokat, tanúsítványokat, kulcsokat és más, védeni és megosztani kívánt adatokat.
Tárolókat és titkos kulcsokat a Bicep használatával hozhat létre és kezelhet. A tárolók definiálásához hozzon létre egy erőforrást a következő típussal Microsoft.KeyVault/vaults
: .
Tároló létrehozásakor meg kell határoznia, hogy ki és mi férhet hozzá az adataihoz. Ha egy Bicep-fájlból szeretné beolvasni a tároló titkos kulcsát, állítsa a tulajdonságot értékre enabledForTemplateDeployment
true
.
Titkos kulcsok hozzáadása kulcstartóhoz
A titkos kulcsok gyermekerőforrások , és a típussal Microsoft.KeyVault/vaults/secrets
hozhatók létre. Az alábbi példa bemutatja, hogyan hozhat létre tárolót és titkos kódot:
Az alábbi példa egy nagyobb példa része. Az üzembe helyezhető Bicep-fájlokat a teljes fájlban találja.
resource keyVault 'Microsoft.KeyVault/vaults@2019-09-01' = {
name: keyVaultName
location: location
properties: {
enabledForTemplateDeployment: true
tenantId: tenant().tenantId
accessPolicies: [
]
sku: {
name: 'standard'
family: 'A'
}
}
}
resource keyVaultSecret 'Microsoft.KeyVault/vaults/secrets@2019-09-01' = {
parent: keyVault
name: 'MySecretName'
properties: {
value: 'MyVerySecretValue'
}
}
Tipp
Ha automatizált üzembehelyezési folyamatokat használ, néha nehéz lehet meghatározni, hogyan kell a Key Vault titkos kulcsait rendszerindítással kezelni az üzemelő példányok számára. Ha például egy külső API-val való kommunikációhoz használt API-kulcsot kapott, akkor a titkos kulcsot hozzá kell adni egy tárolóhoz, mielőtt az üzembe helyezések során használni lehetne.
Ha harmadik féltől származó titkos kódokkal dolgozik, előfordulhat, hogy manuálisan kell hozzáadnia őket a tárolóhoz, majd a titkos kódra hivatkozhat az összes további felhasználáshoz.
Kulcstartó használata modulokkal
A Bicep-modulok használatakor a függvény használatával getSecret
biztonságos paramétereket adhat meg.
Egy másik erőforráscsoportban definiált kulcstartóra is hivatkozhat a és scope
a existing
kulcsszavak együttes használatával. Az alábbi példában a Bicep-fájl egy Hálózat nevű erőforráscsoportban lesz üzembe helyezve. A modul mySecret paraméterének értéke egy contosonetworkingsecrets nevű kulcstartóban van definiálva, amely a Secrets erőforráscsoportban található:
resource networkingSecretsKeyVault 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
scope: resourceGroup('Secrets')
name: 'contosonetworkingsecrets'
}
module exampleModule 'module.bicep' = {
name: 'exampleModule'
params: {
mySecret: networkingSecretsKeyVault.getSecret('mySecret')
}
}
Kulcstartó használata .bicepparam fájlban
Fájlformátum használata esetén .bicepparam
a függvény használatával biztonságos értékeket adhat meg a getSecret
paramétereknek.
Az előfizetés azonosítójának, az erőforráscsoport nevének és a kulcstartó nevének megadásával hivatkozzon a KeyVaultra. A titkos kód értékét a titkos kód nevének megadásával szerezheti be. Igény szerint megadhatja a titkos verziót. Ha nem adja meg a titkos verziót, a rendszer a legújabb verziót használja.
using './main.bicep'
param secureUserName = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>', '<secretVersion>')
param securePassword = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>')
Titkos kulcsok használata folyamatokban
Amikor azure-erőforrásokat helyez üzembe egy folyamattal, ügyelnie kell a titkos kódok megfelelő kezelésére.
- Kerülje a titkos kódok tárolását a kódtárban. Például ne adjon hozzá titkos kódokat a paraméterfájlokhoz vagy a folyamatdefiníciós YAML-fájlokhoz.
- A GitHub Actions használjon titkosított titkos kódokat a biztonságos adatok tárolásához. Titkos kulcsok véletlen véglegesítésének észleléséhez használjon titkos kulcsvizsgálatot .
- Az Azure Pipelinesban használjon titkos változókat a biztonságos adatok tárolásához.
Kapcsolódó források (lehet, hogy a cikkek angol nyelvűek)
- Erőforrás dokumentációja
- Azure-szolgáltatások
- Bicep-funkciók
- Gyorssablonok
- Azure Pipelines
- GitHub Actions