Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Resource Manager şablonlarında (ARM şablonları) dağıtım betiklerini kullanmayı öğrenin. Dağıtım betikleri, ARM şablonları tarafından yapılamayan özel adımları gerçekleştirmek için kullanılabilir. Örneğin, kendi kendine imzalanmış bir sertifika oluşturma. Bu öğreticide, bir Azure anahtar kasası dağıtmak için bir şablon oluşturacak, ardından aynı şablonda bir Microsoft.Resources/deploymentScripts kaynağı kullanarak bir sertifika oluşturacak ve ardından sertifikayı anahtar kasasına ekleyeceksiniz. Dağıtım betiği hakkında daha fazla bilgi edinmek için bkz. ARM şablonlarında dağıtım betiklerini kullanma.
Önemli
Bir depolama hesabı ve kapsayıcı örneği olmak üzere iki dağıtım betiği kaynağı, betik yürütme ve sorun giderme için aynı kaynak grubunda oluşturulur. Bu kaynaklar genellikle betik yürütmesi terminal duruma geçtiğinde betik hizmeti tarafından silinir. Kaynaklar silinene kadar kaynaklar için faturalandırılırsınız. Daha fazla bilgi edinmek için bkz. Dağıtım betiği kaynaklarını temizleme.
Bu öğretici aşağıdaki görevleri kapsar:
- Hızlı başlangıç şablonu açma
- Şablonu düzenleme
- Şablonu dağıt
- Başarısız olmuş scriptin hata ayıklamasını yapma
- Kaynakları temizle
Dağıtım betiklerini kapsayan bir Learn modülü için bkz. Dağıtım betiklerini kullanarak ARM şablonlarını genişletme.
Önkoşullar
Bu makaleyi tamamlamak için şunlar gerekir:
Kullanıcı tarafından atanan yönetilen kimlik. Bu kimlik, betikte Azure'a özgü eylemleri gerçekleştirmek için kullanılır. Bir kimlik oluşturmak için bkz. Kullanıcı tarafından atanan yönetilen kimlik. Şablonu dağıtırken kimlik kimliğine ihtiyacınız vardır. Kimliğin biçimi:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<IdentityID>Kaynak grubu adını ve kimlik adını sağlayarak kimliği almak için aşağıdaki CLI betiğini kullanın.
echo "Enter the Resource Group name:" && read resourceGroupName && az identity list -g $resourceGroupName
Hızlı Başlangıç şablonu açma
Sıfırdan şablon oluşturmak yerine Azure Hızlı Başlangıç Şablonları'ndan bir şablon açarsınız. Azure Hızlı Başlangıç Şablonları, ARM şablonları için bir depodur.
Bu hızlı başlangıçta kullanılan şablona Azure Key Vault ve bir sır oluşturma adı verilir. Şablon bir anahtar kasası oluşturur ve ardından anahtar kasasına bir gizli ekler.
Visual Studio Code'da Dosya> seçin.
Dosya adı alanına aşağıdaki URL'yi yapıştırın:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.keyvault/key-vault-create/azuredeploy.jsonDosyayı açmak için Aç'ı seçin.
Dosyayı yerel bilgisayarınıza azuredeploy.json olarak kaydetmek için >Farklı Kaydet'i seçin.
Şablonu düzenleme
Şablonda aşağıdaki değişiklikleri yapın:
Şablonu temizleme (isteğe bağlı)
Özgün şablon, anahtar kasasına bir gizli ekler. Öğreticiyi basitleştirmek için aşağıdaki kaynağı kaldırın:
Microsoft.KeyVault/vaults/secrets
Aşağıdaki iki parametre tanımını kaldırın:
secretNamesecretValue
Bu tanımları kaldırmamayı seçerseniz, dağıtım sırasında parametre değerlerini belirtmeniz gerekir.
Anahtar kasası erişim ilkelerini yapılandırın
Dağıtım betiği anahtar kasasına bir sertifika ekler. Yönetilen kimliğe izin tanımak için anahtar kasası erişim ilkelerini yapılandırın.
Yönetilen kimlik kimliğini almak için bir parametre ekleyin:
"identityId": { "type": "string", "metadata": { "description": "Specifies the ID of the user-assigned managed identity." } },Yönetilen kimliğin anahtar kasasına sertifika ekleyebilmesi için anahtar kasası erişim ilkelerini yapılandırmak için bir parametre ekleyin:
"certificatesPermissions": { "type": "array", "defaultValue": [ "get", "list", "update", "create" ], "metadata": { "description": "Specifies the permissions to certificates in the vault. Valid values are: all, get, list, update, create, import, delete, recover, backup, restore, manage contacts, manage certificate authorities, get certificate authorities, list certificate authorities, set certificate authorities, delete certificate authorities." } }Kaynağın mevcut anahtar kasası erişim ilkelerini şu şekilde güncelleştirin:
Microsoft.KeyVault/vaults"accessPolicies": [ { "objectId": "[parameters('objectId')]", "tenantId": "[parameters('tenantId')]", "permissions": { "keys": "[parameters('keysPermissions')]", "secrets": "[parameters('secretsPermissions')]", "certificates": "[parameters('certificatesPermissions')]" } }, { "objectId": "[reference(parameters('identityId'), '2018-11-30').principalId]", "tenantId": "[parameters('tenantId')]", "permissions": { "keys": "[parameters('keysPermissions')]", "secrets": "[parameters('secretsPermissions')]", "certificates": "[parameters('certificatesPermissions')]" } } ],Biri oturum açmış kullanıcı, diğeri yönetilen kimlik için olan iki ilke tanımlanmıştır. Oturum açan kullanıcının yalnızca dağıtımı doğrulamak için liste iznine ihtiyacı vardır. Öğreticiyi basitleştirmek için hem yönetilen kimliğe hem de oturum açmış kullanıcılara aynı sertifika atanır.
Dağıtım betiğini ekleme
Dağıtım betiği tarafından kullanılan üç parametre ekleyin:
"certificateName": { "type": "string", "defaultValue": "DeploymentScripts2019" }, "subjectName": { "type": "string", "defaultValue": "CN=contoso.com" }, "utcValue": { "type": "string", "defaultValue": "[utcNow()]" }Bir
deploymentScriptskaynağı ekleyin:Uyarı
Satır içi dağıtım betikleri çift tırnak içine alındığından, dağıtım betiklerinin içindeki dizelerin bunun yerine tek tırnak içine alınması gerekir. PowerShell'deki kaçış karakteri, backtick (
`) karakteridir.{ "type": "Microsoft.Resources/deploymentScripts", "apiVersion": "2023-08-01", "name": "createAddCertificate", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]" ], "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('identityId')]": { } } }, "kind": "AzurePowerShell", "properties": { "forceUpdateTag": "[parameters('utcValue')]", "azPowerShellVersion": "3.0", "timeout": "PT30M", "arguments": "[format(' -vaultName {0} -certificateName {1} -subjectName {2}', parameters('keyVaultName'), parameters('certificateName'), parameters('subjectName'))]", // can pass an argument string, double quotes must be escaped "scriptContent": " param( [string] [Parameter(Mandatory=$true)] $vaultName, [string] [Parameter(Mandatory=$true)] $certificateName, [string] [Parameter(Mandatory=$true)] $subjectName ) $ErrorActionPreference = 'Stop' $DeploymentScriptOutputs = @{} $existingCert = Get-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName if ($existingCert -and $existingCert.Certificate.Subject -eq $subjectName) { Write-Host 'Certificate $certificateName in vault $vaultName is already present.' $DeploymentScriptOutputs['certThumbprint'] = $existingCert.Thumbprint $existingCert | Out-String } else { $policy = New-AzKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths 12 -Verbose # private key is added as a secret that can be retrieved in the Resource Manager template Add-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName -CertificatePolicy $policy -Verbose # it takes a few seconds for KeyVault to finish $tries = 0 do { Write-Host 'Waiting for certificate creation completion...' Start-Sleep -Seconds 10 $operation = Get-AzKeyVaultCertificateOperation -VaultName $vaultName -Name $certificateName $tries++ if ($operation.Status -eq 'failed') { throw 'Creating certificate $certificateName in vault $vaultName failed with error $($operation.ErrorMessage)' } if ($tries -gt 120) { throw 'Timed out waiting for creation of certificate $certificateName in vault $vaultName' } } while ($operation.Status -ne 'completed') $newCert = Get-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName $DeploymentScriptOutputs['certThumbprint'] = $newCert.Thumbprint $newCert | Out-String } ", "cleanupPreference": "OnSuccess", "retentionInterval": "P1D" } }deploymentScriptskaynağı, anahtar kasası kaynağına ve rol atama kaynağına bağlıdır. Şu özelliklere sahiptir:-
identity: Dağıtım betiği, betikteki işlemleri gerçekleştirmek için kullanıcı tarafından atanan yönetilen kimliği kullanır. -
kind: Betiğin türünü belirtin. Şu anda yalnızca PowerShell betikleri desteklenmektedir. -
forceUpdateTag: Betik kaynağı değişmemiş olsa bile dağıtım betiğinin yürütülip yürütülmeyeceğini belirleyin. Geçerli zaman damgası veya GUID olabilir. Daha fazla bilgi edinmek için bkz. Betiği birden çok kez çalıştırma. -
azPowerShellVersion: Kullanılacak Azure PowerShell modülü sürümünü belirtir. Dağıtım betiği şu anda 2.7.0, 2.8.0 ve 3.0.0 sürümlerini desteklemektedir. -
timeout: ISO 8601 biçiminde belirtilen izin verilen en fazla betik yürütme süresini belirtin. Varsayılan değer P1D'dir. -
arguments: Parametre değerlerini belirtin. Değerler boşluklarla ayrılır. -
scriptContent: Betik içeriğini belirtin. Dış betiği çalıştırmak içinprimaryScriptURIögesini kullanın. Daha fazla bilgi için bkz. Dış betiği kullanma. Yerel bir makinede betiği test ederken \$DeploymentScriptOutputsbildirimini yapmak sadece gereklidir. değişkeninin bildirilmesi, betiğin yerel makinede ve kaynaktadeploymentScriptdeğişiklik yapmak zorunda kalmadan çalıştırılmasını sağlar. Atanan$DeploymentScriptOutputsdeğeri, dağıtımlarda çıktı olarak kullanılabilir. Daha fazla bilgi için bkz . PowerShell dağıtım betiklerinden gelen çıkışlarla çalışma veya CLI dağıtım betiklerinden gelen çıkışlarla çalışma. -
cleanupPreference: Dağıtım betiği kaynaklarının ne zaman silineceğini belirten tercihi belirtin. Varsayılan değer Her zaman'dır; bu da dağıtım betiği kaynaklarının terminal durumuna (Başarılı, Başarısız, İptal Edildi) rağmen silindiği anlamına gelir. Bu öğreticide, betik yürütme sonuçlarını görme olanağını kazanmanız için OnSuccess kullanılır. -
retentionInterval: Hizmetin terminal duruma ulaştıktan sonra betik kaynaklarını hangi aralıkta tutacağını belirtin. Bu süre dolduğunda kaynaklar silinir. Süre ISO 8601 deseni temelindedir. Bu öğreticide, bir gün anlamına gelen P1D kullanılır. Bu özellikcleanupPreferenceOnExpiration olarak ayarlandığında kullanılır. Bu özellik şu anda etkin değil.
Dağıtım betiği üç parametre alır:
keyVaultName,certificateNamevesubjectName. Bir sertifika oluşturur, ardından sertifikayı anahtar deposuna ekler.$DeploymentScriptOutputsçıkış değerini depolamak için kullanılır. Daha fazla bilgi edinmek için bkz . PowerShell dağıtım betiklerinden gelen çıkışlarla çalışma veya CLI dağıtım betiklerinden gelen çıkışlarla çalışma.Tamamlanan şablona buradan ulaşabilirsiniz.
-
Hata ayıklama işlemini görmek için, dağıtım betiğine aşağıdaki satırı ekleyerek koda bir hata yerleştirin:
Write-Output1 $keyVaultNameyerine doğru komut kullanılır
Write-OutputWrite-Output1.Dosyayı kaydetmek için Dosya>Kaydet'i seçin.
Şablonu dağıt
Azure Cloud Shell'de oturum açma
Sol üst köşedeki PowerShell'i veya Bash'i (CLI için) seçerek tercih ettiğiniz ortamı seçin. Geçiş yaptığınızda kabuğun yeniden başlatılması gerekir.
Dosyaları karşıya yükle/indir'i ve ardından Karşıya Yükle'yi seçin. Önceki ekran görüntüsüne bakın. Önceki bölümde kaydettiğiniz dosyayı seçin. Dosyayı karşıya yükledikten sonra, dosyanın başarıyla yüklenip yüklenmediğini doğrulamak için
lskomutunu vecatkomutunu kullanabilirsiniz.Şablonu dağıtmak için aşağıdaki Azure CLI veya Azure PowerShell betiğini çalıştırın.
echo "Enter a project name that is used to generate resource names:" && read projectName && echo "Enter the location (i.e. centralus):" && read location && echo "Enter your email address used to sign in to Azure:" && read upn && echo "Enter the user-assigned managed identity ID:" && read identityId && adUserId=$((az ad user show --id ${upn}) | jq -r '.id') && resourceGroupName="${projectName}rg" && keyVaultName="${projectName}kv" && az group create --name $resourceGroupName --location $location && az deployment group create --resource-group $resourceGroupName --template-file "$HOME/azuredeploy.json" --parameters identityId=$identityId keyVaultName=$keyVaultName objectId=$adUserIdDağıtım betiği hizmetinin betik yürütme için ek dağıtım betiği kaynakları oluşturması gerekir. Hazırlığı ve temizleme işleminin tamamlanması, gerçek betik yürütme süresine ek olarak bir dakika kadar sürebilir.
Geçersiz komut
Write-Output1betikte kullanıldığından dağıtım başarısız oldu. Şunu belirten bir hata alırsınız:The term 'Write-Output1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.Dağıtım betiği yürütme sonucu, sorun giderme amacıyla dağıtım betiği kaynaklarında depolanır.
Başarısız olmuş scriptin hata ayıklamasını yapma
Azure portalınaoturum açın.
Kaynak grubunu açın. Rg'nin eklendiği proje adıdır. Kaynak grubunda iki ek kaynak görürsünüz. Bu kaynaklar dağıtım betiği kaynakları olarak adlandırılır.
Her iki dosya da azscripts son ekine sahiptir. Biri depolama hesabı, diğeri de kapsayıcı örneğidir.
Kaynağı listelemek için Gizli türleri göster'i
deploymentScriptsseçin.Azscripts soneki ile depolama hesabını seçin.
Dosya paylaşımları kutucuğunu seçin. Dağıtım betiği yürütme dosyalarını içeren bir azscripts klasörü görürsünüz.
Azscripts'i seçin. azscriptinput ve azscriptoutput adlı iki klasör görürsünüz. Giriş klasörü bir sistem PowerShell betik dosyası ve kullanıcı dağıtım betik dosyalarını içerir. Çıkış klasörü bir executionresult.json ve betik çıkış dosyasını içerir. hata iletisini executionresult.jsongörebilirsiniz. Yürütme başarısız olduğundan çıkış dosyası orada değil.
Write-Output1 Satırı kaldırın ve şablonu yeniden dağıtın.
İkinci dağıtım başarıyla çalıştırıldığında, özellik cleanupPreference olarak ayarlandığından, dağıtım betik kaynakları betik hizmeti tarafından kaldırılır.
Kaynakları temizle
Azure kaynaklarına artık gerek kalmadığında, kaynak grubunu silerek dağıttığınız kaynakları temizleyin.
- Azure portalından soldaki menüden Kaynak grubu'na tıklayın.
- Adına göre filtrele alanına kaynak grubu adını girin.
- Kaynak grubu adını seçin.
- Üstteki menüden Kaynak grubunu sil'i seçin.
Sonraki Adımlar
Bu öğreticide, ARM şablonlarında dağıtım betiğini kullanmayı öğrendiniz. Azure kaynaklarını koşullara göre dağıtmayı öğrenmek için bkz: