Bicep kullanarak gizli dizileri yönetme
Dağıtımlar genellikle gizli dizilerin Azure ortamınızda güvenli bir şekilde depolanmasını ve yayılmasını gerektirir. Bicep ve Azure, dağıtımlarınızdaki gizli dizileri yönetmenize yardımcı olacak birçok özellik sağlar.
Kullanabileceğiniz gizli dizilerden kaçının
Birçok durumda gizli dizileri kullanmaktan kaçınmak mümkündür. Birçok Azure kaynağı, kimlik doğrulaması yapmalarını ve kimlik bilgilerini işlemenize veya yönetmenize gerek kalmadan Azure içindeki diğer kaynaklara erişme yetkisine sahip olmalarını sağlayan yönetilen kimlikleri destekler. Ayrıca, bazı Azure hizmetleri sizin için otomatik olarak HTTPS sertifikaları oluşturabilir ve sertifikaları ve özel anahtarları işlemenizi önler. Mümkün olduğunca yönetilen kimlikleri ve hizmet tarafından yönetilen sertifikaları kullanın.
Güvenli parametreleri kullanma
Bicep dağıtımlarınıza parametre olarak gizli diziler sağlamanız gerektiğinde dekoratör kullanın@secure()
. Bir parametreyi güvenli olarak işaretlediğinizde, Azure Resource Manager değeri günlüğe kaydetmeyi veya Azure portal, Azure CLI veya Azure PowerShell görüntülemeyi önler.
Gizli diziler için çıkışlardan kaçının
Güvenli veriler için Bicep çıkışlarını kullanmayın. Çıkışlar dağıtım geçmişine kaydedilir ve dağıtıma erişimi olan herkes dağıtım çıkışlarının değerlerini görüntüleyebilir.
Bicep dağıtımında bir gizli dizi oluşturmanız ve bunu çağıranın veya diğer kaynakların kullanımına açmanız gerekiyorsa, aşağıdaki yaklaşımlardan birini kullanmayı göz önünde bulundurun.
Gizli dizileri dinamik olarak arama
Bazen, başka bir kaynağı yapılandırmak için bir kaynaktan gizli diziye erişmeniz gerekir.
Örneğin, başka bir dağıtımda bir depolama hesabı oluşturmuş ve bir Azure İşlevleri uygulamasını yapılandırmak için birincil anahtarına erişmeniz gerekebilir. Önceden oluşturulmuş depolama hesabına kesin olarak belirlenmiş bir başvuru almak için anahtar sözcüğünü kullanabilir existing
ve ardından depolama hesabının listKeys()
yöntemini kullanarak birincil anahtarla bir bağlantı dizesi oluşturabilirsiniz:
Aşağıdaki örnek, daha büyük bir örneğin parçasıdır. Dağıtabileceğiniz bir Bicep dosyası için dosyanın tamamına bakın.
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
}
]
}
}
}
Bu yaklaşımı kullanarak, gizli dizileri Bicep dosyanıza geçirmekten veya dosyanızdan çıkarmaktan kaçınmış olursunuz.
Gizli dizileri bir anahtar kasasında depolamak için de bu yaklaşımı kullanabilirsiniz.
Key Vault kullanma
Azure Key Vault, güvenli verileri depolamak ve yönetmek için tasarlanmıştır. Gizli dizilerinizi, sertifikalarınızı, anahtarlarınızı ve korunması ve paylaşılması gereken diğer verileri yönetmek için bir anahtar kasası kullanın.
Bicep kullanarak kasalar ve gizli diziler oluşturabilir ve yönetebilirsiniz. türünde Microsoft.KeyVault/vaults
bir kaynak oluşturarak kasalarınızı tanımlayın.
Kasa oluştururken verilerine kimlerin ve nelerin erişebileceğini belirlemeniz gerekir. Kasanın gizli dizilerini bir Bicep dosyasından okumayı planlıyorsanız özelliğini olarak true
ayarlayınenabledForTemplateDeployment
.
Anahtar kasasına gizli dizi ekleme
Gizli diziler bir alt kaynaktır ve türü Microsoft.KeyVault/vaults/secrets
kullanılarak oluşturulabilir. Aşağıdaki örnekte kasa ve gizli dizi oluşturma adımları gösterilmektedir:
Aşağıdaki örnek, daha büyük bir örneğin parçasıdır. Dağıtabileceğiniz bir Bicep dosyası için dosyanın tamamına bakın.
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'
}
}
İpucu
Otomatik dağıtım işlem hatlarını kullandığınızda, dağıtımlarınız için anahtar kasası gizli dizilerinin nasıl önyükleneceğini belirlemek bazen zor olabilir. Örneğin, bir dış API ile iletişim kurarken kullanmanız için size bir API anahtarı sağlandıysa, gizli dizinin dağıtımlarınızda kullanılabilmesi için önce bir kasaya eklenmesi gerekir.
Üçüncü taraflardan gelen gizli dizilerle çalışırken bunları kasanıza el ile eklemeniz gerekebilir ve ardından sonraki tüm kullanımlar için gizli diziye başvurabilirsiniz.
Modüllerle anahtar kasası kullanma
Bicep modüllerini kullandığınızda, işlevini kullanarak getSecret
güvenli parametreler sağlayabilirsiniz.
Ve scope
anahtar sözcüklerini birlikte kullanarak başka bir kaynak grubunda tanımlanan bir anahtar kasasına existing
da başvurabilirsiniz. Aşağıdaki örnekte, Bicep dosyası Ağ adlı bir kaynak grubuna dağıtılır. Modülün mySecret parametresinin değeri, Gizli Diziler kaynak grubunda bulunan contosonetworkingsecrets adlı bir anahtar kasasında tanımlanır:
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')
}
}
.bicepparam dosyasında anahtar kasası kullanma
Dosya biçimini kullandığınızda .bicepparam
, işlevini kullanarak getSecret
parametrelere güvenli değerler sağlayabilirsiniz.
Abonelik kimliğini, kaynak grubu adını ve anahtar kasası adını sağlayarak KeyVault'a başvurun. Gizli dizi adını sağlayarak gizli dizinin değerini alabilirsiniz. İsteğe bağlı olarak gizli sürüm sağlayabilirsiniz. Gizli sürümü sağlamazsanız en son sürüm kullanılır.
using './main.bicep'
param secureUserName = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>', '<secretVersion>')
param securePassword = az.getSecret('<subscriptionId>', '<resourceGroupName>', '<keyVaultName>', '<secretName>')
İşlem hatlarında gizli dizilerle çalışma
Azure kaynaklarınızı bir işlem hattı kullanarak dağıtırken gizli dizilerinizi uygun şekilde işlemeye dikkat etmeniz gerekir.
- Gizli dizileri kod deponuzda depolamaktan kaçının. Örneğin, parametre dosyalarına veya işlem hattı tanımı YAML dosyalarınıza gizli dizi eklemeyin.
- GitHub Actions güvenli verileri depolamak için şifrelenmiş gizli dizileri kullanın. Gizli dizilerin yanlışlıkla işlenmesini algılamak için gizli dizi taramasını kullanın.
- Azure Pipelines'da güvenli verileri depolamak için gizli dizi değişkenlerini kullanın.
İlgili kaynaklar
- Kaynak belgeleri
- Azure özellikleri
- Bicep özellikleri
- Hızlı başlangıç şablonları
- Azure Pipelines
- GitHub Actions