Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara menggunakan skrip penyebaran di templat Azure Resource Manager (templat ARM). Skrip penyebaran dapat digunakan untuk melakukan langkah-langkah kustom yang tidak dapat dilakukan oleh templat ARM. Misalnya, membuat sertifikat yang ditandatangani sendiri. Dalam tutorial ini, Anda membuat templat untuk menyebarkan brankas kunci Azure, lalu menggunakan Microsoft.Resources/deploymentScripts sumber daya dalam templat yang sama untuk membuat sertifikat lalu menambahkan sertifikat ke brankas kunci. Untuk mempelajari selengkapnya tentang skrip penyebaran, lihat Menggunakan skrip penyebaran di templat ARM.
Penting
Dua sumber daya skrip penyebaran, akun penyimpanan dan instans kontainer, dibuat dalam grup sumber daya yang sama untuk eksekusi dan pemecahan masalah skrip. Sumber daya ini biasanya dihapus oleh layanan skrip ketika eksekusi skrip masuk dalam status terminal. Penagihan untuk sumber daya berlangsung hingga sumber daya dihapus. Untuk mempelajari selengkapnya, lihat Membersihkan sumber daya skrip penyebaran.
Tutorial ini mencakup tugas-tugas berikut:
- Membuka templat mulai cepat
- Mengedit templat
- Menyebarkan templat
- Men-debug skrip yang gagal
- Membersihkan sumber daya
Untuk modul Pelajari yang mencakup skrip penyebaran, lihat Memperluas templat ARM dengan menggunakan skrip penyebaran.
Prasyarat
Untuk menyelesaikan artikel ini, Anda memerlukan:
Identitas terkelola yang ditetapkan pengguna. Identitas ini digunakan untuk melakukan tindakan khusus Azure dalam skrip. Untuk membuatnya, lihat Identitas terkelola yang ditetapkan pengguna. Anda memerlukan ID identitas saat menyebarkan templat. Format identitas adalah:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<IdentityID>Gunakan skrip CLI berikut untuk mendapatkan ID dengan memberikan nama grup sumber daya dan nama identitas.
echo "Enter the Resource Group name:" && read resourceGroupName && az identity list -g $resourceGroupName
Membuka templat Cepat Mulai
Alih-alih membuat templat dari awal, Anda membuka templat dari Templat Mulai Cepat Azure. Templat Mulai Cepat Azure adalah repositori untuk templat ARM.
Template yang digunakan dalam panduan cepat ini disebut Create an Azure Key Vault and a secret. Templat membuat brankas kunci, lalu menambahkan rahasia ke brankas kunci.
Dari Visual Studio Code, pilih File>Buka File.
Di Nama file, tempelkan URL berikut:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.keyvault/key-vault-create/azuredeploy.jsonPilih Buka untuk membuka file.
Pilih Simpan File>Sebagai untuk menyimpan file sebagai azuredeploy.json ke komputer lokal Anda.
Mengedit templat
Buat perubahan berikut pada templat:
Membersihkan templat (opsional)
Templat asli menambahkan rahasia ke brankas kunci. Untuk menyederhanakan tutorial, hapus sumber daya berikut:
Microsoft.KeyVault/vaults/secrets
Hapus dua definisi parameter berikut:
secretNamesecretValue
Jika Anda memilih untuk tidak menghapus definisi ini, Anda perlu menentukan nilai parameter selama penyebaran.
Mengonfigurasi kebijakan akses brankas kunci
Skrip penempatan menambahkan sertifikat ke Key Vault. Konfigurasikan kebijakan akses brankas kunci untuk memberikan izin ke identitas terkelola:
Tambahkan parameter untuk mendapatkan ID identitas terkelola:
"identityId": { "type": "string", "metadata": { "description": "Specifies the ID of the user-assigned managed identity." } },Tambahkan parameter untuk mengonfigurasi kebijakan akses brankas kunci sehingga identitas terkelola dapat menambahkan sertifikat ke brankas kunci:
"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." } }Perbarui kebijakan akses untuk brankas kunci dari sumber daya
Microsoft.KeyVault/vaultsyang ada menjadi:"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')]" } } ],Ada dua kebijakan yang ditentukan, satu untuk pengguna yang masuk, dan yang lainnya adalah untuk identitas terkelola. Pengguna yang masuk hanya memerlukan izin list untuk memverifikasi penerapan. Untuk menyederhanakan tutorial, sertifikat yang sama ditetapkan ke identitas terkelola dan pengguna yang masuk.
Tambahkan skrip penyebaran
Tambahkan tiga parameter yang digunakan oleh skrip penyebaran:
"certificateName": { "type": "string", "defaultValue": "DeploymentScripts2019" }, "subjectName": { "type": "string", "defaultValue": "CN=contoso.com" }, "utcValue": { "type": "string", "defaultValue": "[utcNow()]" }deploymentScriptsTambahkan sumber daya:Nota
Karena skrip penyebaran sebaris diapit oleh tanda kutip ganda, string di dalam skrip penyebaran perlu diapit oleh tanda kutip tunggal sebagai gantinya. Karakter escape PowerShell adalah backtick (
`).{ "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" } }Sumber daya
deploymentScriptstergantung pada sumber daya brankas kunci dan penetapan peran. Ini memiliki properti ini:-
identity: Skrip penyebaran menggunakan identitas terkelola yang ditetapkan pengguna untuk melakukan operasi dalam skrip. -
kind: Tentukan jenis skrip. Saat ini, hanya skrip PowerShell yang didukung. -
forceUpdateTag: Tentukan apakah skrip penyebaran harus dijalankan meskipun sumber skrip belum berubah. Dapat berupa stempel waktu saat ini atau GUID. Untuk mempelajari selengkapnya, lihat Menjalankan skrip lebih dari sekali. -
azPowerShellVersion: Menentukan versi modul Azure PowerShell yang akan digunakan. Saat ini, skrip penyebaran mendukung versi 2.7.0, 2.8.0, dan 3.0.0. -
timeout: Tentukan waktu eksekusi skrip maksimum yang diizinkan yang ditentukan dalam format ISO 8601. Nilai defaultnya adalah P1D. -
arguments: Tentukan nilai parameter. Nilai dipisahkan oleh spasi. -
scriptContent: Tentukan konten skrip. Untuk menjalankan skrip eksternal, gunakanprimaryScriptURIsebagai gantinya. Untuk informasi selengkapnya, lihat Menggunakan skrip eksternal. Mendeklarasikan$DeploymentScriptOutputshanya diperlukan saat menguji skrip pada komputer lokal. Mendeklarasikan variabel memungkinkan skrip dijalankan pada komputer lokal dan dalamdeploymentScriptsumber daya tanpa harus membuat perubahan. Nilai yang ditetapkan untuk$DeploymentScriptOutputstersedia sebagai keluaran dalam penerapan. Untuk informasi selengkapnya, lihat Bekerja dengan output dari skrip penyebaran PowerShell atau Bekerja dengan output dari skrip penyebaran CLI. -
cleanupPreference: Tentukan preferensi tentang kapan harus menghapus sumber daya skrip penyebaran. Nilai defaultnya adalah Always, yang berarti sumber daya skrip penyebaran dihapus meskipun status terminal (Berhasil, Gagal, Dibatalkan). Dalam tutorial ini, OnSuccess digunakan sehingga Anda mendapatkan kesempatan untuk melihat hasil eksekusi skrip. -
retentionInterval: Tentukan interval di mana layanan mempertahankan sumber daya skrip setelah mencapai status terminal. Sumber daya akan dihapus ketika durasi ini kedaluwarsa. Durasi didasarkan pada pola ISO 8601. Tutorial ini menggunakan P1D, yang berarti satu hari. Properti ini digunakan ketikacleanupPreferencediatur ke OnExpiration. Properti ini saat ini tidak diaktifkan.
Skrip penyebaran mengambil tiga parameter:
keyVaultName, ,certificateNamedansubjectName. Ini membuat sertifikat, lalu menambahkan sertifikat ke brankas kunci.$DeploymentScriptOutputsdigunakan untuk menyimpan nilai output. Untuk mempelajari selengkapnya, lihat Bekerja dengan output dari skrip penyebaran PowerShell atau Bekerja dengan output dari skrip penyebaran CLI.Templat yang telah selesai dapat ditemukan di sini.
-
Untuk melihat proses debugging, masukkan kesalahan ke dalam kode dengan menambahkan baris berikut ke dalam skrip deployment:
Write-Output1 $keyVaultNamePerintah yang benar adalah
Write-OutputbukanWrite-Output1.PilihSimpan> untuk menyimpan file.
Menyebarkan templat
Masuk ke Azure Cloud Shell
Pilih lingkungan pilihan Anda dengan memilih PowerShell atau Bash (untuk CLI) di sudut kiri atas. Menghidupkan ulang shell diperlukan saat Anda beralih.
Pilih Unggah/unduh file, lalu pilih Unggah. Lihat cuplikan layar sebelumnya. Pilih file yang Anda simpan di bagian sebelumnya. Setelah mengunggah file, Anda dapat menggunakan
lsperintah dancatperintah untuk memverifikasi bahwa file berhasil diunggah.Jalankan skrip Azure CLI atau Azure PowerShell berikut ini untuk menyebarkan templat.
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=$adUserIdLayanan skrip penyebaran perlu membuat sumber daya skrip penyebaran tambahan untuk eksekusi skrip. Persiapan dan proses pembersihan dapat memakan waktu hingga satu menit untuk diselesaikan selain waktu eksekusi skrip yang sebenarnya.
Penyebaran gagal karena perintah tidak valid,
Write-Output1digunakan dalam skrip. Anda akan mendapatkan kesalahan yang menyatakan: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.Hasil eksekusi skrip penyebaran disimpan dalam sumber daya skrip penyebaran untuk tujuan pemecahan masalah.
Men-debug skrip yang gagal
Masuk ke portal Azure.
Buka grup sumber daya. Ini adalah nama proyek dengan rg ditambahkan. Anda akan melihat dua sumber daya tambahan dalam grup sumber daya. Sumber daya ini disebut sebagai sumber daya skrip penyebaran.
Kedua file memiliki akhiran azscripts. Salah satunya adalah akun penyimpanan dan yang lainnya adalah instans kontainer.
Pilih Perlihatkan jenis tersembunyi untuk mencantumkan
deploymentScriptssumber daya.Pilih akun penyimpanan yang memiliki akhiran azscripts.
Pilih ubin Berbagi File. Anda akan melihat folder azscripts yang berisi file eksekusi skrip penyebaran.
Pilih azscripts. Anda akan melihat dua folder azscriptinput dan azscriptoutput. Folder masukan berisi file skrip sistem PowerShell dan file skrip penyebaran pengguna. Folder output berisi executionresult.json dan file output skrip. Anda dapat melihat pesan kesalahan di executionresult.json. File output tidak ada karena eksekusi gagal.
Hapus baris Write-Output1 dan terapkan ulang templat.
Ketika penyebaran kedua dilaksanakan dengan sukses, sumber daya skrip penyebaran akan dihapus oleh layanan skrip, karena properti cleanupPreference diatur ke OnSuccess.
Membersihkan sumber daya
Saat sumber daya Azure tidak lagi diperlukan, bersihkan sumber daya yang Anda sebarkan dengan menghapus grup sumber daya.
- Dari portal Microsoft Azure, pilih Grup sumber daya dari menu sebelah kiri.
- Masukkan nama grup sumber daya di bidang Filter menurut nama .
- Pilih nama grup sumber daya.
- Pilih Hapus grup sumber daya dari menu atas.
Langkah selanjutnya
Dalam tutorial ini, Anda mempelajari cara menggunakan skrip penyebaran dalam templat ARM. Untuk mempelajari cara menyebarkan sumber daya Azure berdasarkan kondisi, lihat: