Správa tajných kódů pomocí nástroje Bicep

Nasazení často vyžadují, aby se tajné kódy bezpečně ukládaly a šířily v celém prostředí Azure. Bicep a Azure poskytují řadu funkcí, které vám pomůžou se správou tajných kódů ve vašich nasazeních.

Vyhněte se tajným kódům, kde můžete

V mnoha situacích je možné se použití tajných kódů vyhnout. Mnoho prostředků Azure podporuje spravované identity, které jim umožňují ověřování a autorizaci pro přístup k dalším prostředkům v rámci Azure, aniž byste museli zpracovávat nebo spravovat přihlašovací údaje. Některé služby Azure navíc můžou automaticky generovat certifikáty HTTPS, takže se vyhnete zpracování certifikátů a privátních klíčů. Všude, kde je to možné, používejte spravované identity a certifikáty spravované službou.

Použití zabezpečených parametrů

Pokud potřebujete poskytnout tajné kódy nasazením Bicep jako parametry, použijte @secure() dekorátor. Když parametr označíte jako zabezpečený, Azure Resource Manager se vyhne protokolování hodnoty nebo jejímu zobrazení v Azure Portal, Azure CLI nebo Azure PowerShell.

Vyhněte se výstupům tajných kódů

Nepoužívejte výstupy Bicep pro zabezpečená data. Výstupy se protokolují do historie nasazení a každý, kdo má přístup k nasazení, může zobrazit hodnoty výstupů nasazení.

Pokud potřebujete vygenerovat tajný kód v rámci nasazení Bicep a zpřístupnit ho volajícímu nebo jiným prostředkům, zvažte použití některého z následujících přístupů.

Dynamické vyhledávání tajných kódů

Někdy potřebujete přístup k tajnému klíči z jednoho prostředku, abyste mohli nakonfigurovat jiný prostředek.

Mohli jste například vytvořit účet úložiště v jiném nasazení a potřebujete přístup k jeho primárnímu klíči, abyste mohli nakonfigurovat Azure Functions aplikaci. Pomocí klíčového existing slova můžete získat odkaz na předem vytvořený účet úložiště se silnými typy a pak pomocí metody účtu listKeys() úložiště vytvořit připojovací řetězec s primárním klíčem:

Následující příklad je součástí většího příkladu. Soubor Bicep, který můžete nasadit, najdete v kompletním souboru.

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
        }
      ]
    }
  }
}

Tímto přístupem se vyhnete předávání tajných kódů do nebo z vašeho souboru Bicep.

Tento přístup můžete použít také k ukládání tajných kódů do trezoru klíčů.

Použití Key Vault

Azure Key Vault slouží k ukládání a správě zabezpečených dat. Pomocí trezoru klíčů můžete spravovat tajné kódy, certifikáty, klíče a další data, která je potřeba chránit a sdílet.

Trezory a tajné kódy můžete vytvářet a spravovat pomocí nástroje Bicep. Definujte trezory vytvořením prostředku s typem Microsoft.KeyVault/vaults.

Při vytváření trezoru je potřeba určit, kdo a co má přístup k jeho datům. Pokud plánujete číst tajné kódy trezoru ze souboru Bicep, nastavte vlastnost na enabledForTemplateDeploymenttrue.

Přidání tajných kódů do trezoru klíčů

Tajné kódy jsou podřízeným prostředkem a je možné je vytvořit pomocí typu Microsoft.KeyVault/vaults/secrets. Následující příklad ukazuje, jak vytvořit trezor a tajný klíč:

Následující příklad je součástí většího příkladu. Soubor Bicep, který můžete nasadit, najdete v kompletním souboru.

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'
  }
}

Tip

Když používáte automatizované kanály nasazení, může být někdy obtížné určit, jak spustit tajné kódy trezoru klíčů pro vaše nasazení. Pokud jste například dostali klíč rozhraní API, který se má použít při komunikaci s externím rozhraním API, je potřeba tajný kód přidat do trezoru, aby ho bylo možné použít ve vašich nasazeních.

Když pracujete s tajnými klíči, které pocházejí od třetí strany, možná je budete muset ručně přidat do trezoru a pak na tajný kód odkazovat pro všechna další použití.

Použití trezoru klíčů s moduly

Když používáte moduly Bicep, můžete zadat zabezpečené parametry pomocí getSecret funkce .

Můžete také odkazovat na trezor klíčů definovaný v jiné skupině prostředků pomocí existing klíčových slov a scope společně. V následujícím příkladu se soubor Bicep nasadí do skupiny prostředků s názvem Sítě. Hodnota parametru modulu mySecret je definovaná v trezoru klíčů s názvem contosonetworkingsecrets umístěném ve skupině prostředků Tajné kódy :

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')
  }
}

Použití trezoru klíčů v souboru .bicepparam

Když používáte .bicepparam formát souboru, můžete pomocí funkce zadat bezpečné hodnoty parametrůmgetSecret.

Na službu KeyVault můžete odkazovat zadáním ID předplatného, názvu skupiny prostředků a názvu trezoru klíčů. Hodnotu tajného kódu můžete získat zadáním názvu tajného kódu. Volitelně můžete zadat verzi tajného kódu. Pokud nezadáte verzi tajného kódu, použije se nejnovější verze.

using './main.bicep'

param secureUserName = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>', '<secretVersion>')
param securePassword = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>')

Práce s tajnými kódy v kanálech

Když nasazujete prostředky Azure pomocí kanálu, musíte se postarat o správné zpracování tajných kódů.