Share via


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 enabledForTemplateDeploymenttrue.

Titkos kulcsok hozzáadása kulcstartóhoz

A titkos kulcsok gyermekerőforrások , és a típussal Microsoft.KeyVault/vaults/secretshozható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 getSecretbiztonsá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 getSecretparamé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.