Mengirim email dari runbook Automation
Anda dapat mengirim email dari runbook dengan SendGrid menggunakan PowerShell.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Prasyarat
Verifikasi pengirim SendGrid. Pengirim Tunggal atau Domain
Kunci API SendGrid Anda.
Akun Azure Automation dengan setidaknya satu identitas terkelola yang ditetapkan pengguna. Untuk informasi selengkapnya, lihat Mengaktifkan identitas terkelola.
Modul Az:
Az.Accounts
danAz.KeyVault
diimpor ke akun Azure Automation. Untuk informasi selengkapnya, lihat Impor modul Az.Modul Azure Az PowerShell terinstal di mesin Anda. Jika Anda perlu menginstal atau melakukan peningkatan, lihat Cara menginstal modul Azure Az PowerShell.
Membuat Azure Key Vault
Buat Azure Key Vault dan kebijakan akses Key Vault yang memungkinkan kredensial untuk mendapatkan dan menyetel rahasia key vault di brankas kunci yang ditentukan.
Masuk ke Azure secara interaktif menggunakan cmdlet Connect-AzAccount dan ikuti instruksinya.
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
Berikan nilai yang sesuai untuk variabel di bawah ini dan kemudian jalankan skrip.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Buat Key Vault dan tetapkan izin
# Create the new key vault $newKeyVault = New-AzKeyVault ` -VaultName $VaultName ` -ResourceGroupName $resourceGroup ` -Location $region $resourceId = $newKeyVault.ResourceId # Convert the SendGrid API key into a SecureString $Secret = ConvertTo-SecureString -String $SendGridAPIKey ` -AsPlainText -Force Set-AzKeyVaultSecret -VaultName $VaultName ` -Name 'SendGridAPIKey' ` -SecretValue $Secret # Grant Key Vault access to the Automation account's system-assigned managed identity. $SA_PrincipalId = (Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity.PrincipalId Set-AzKeyVaultAccessPolicy ` -VaultName $vaultName ` -ObjectId $SA_PrincipalId ` -PermissionsToSecrets Set, Get # Grant Key Vault access to the user-assigned managed identity. $UAMI = Get-AzUserAssignedIdentity ` -ResourceGroupName $resourceGroup ` -Name $userAssignedManagedIdentity Set-AzKeyVaultAccessPolicy ` -VaultName $vaultName ` -ObjectId $UAMI.PrincipalId ` -PermissionsToSecrets Set, Get
Untuk cara lain untuk membuat Azure Key Vault dan menyimpan rahasia, lihat mulai cepat Key Vault.
Tetapkan izin untuk identitas terkelola
Tetapkan izin untuk identitas terkelola yang sesuai. Runbook dapat menggunakan identitas terkelola yang ditetapkan sistem akun Automation atau identitas terkelola yang ditetapkan pengguna. Langkah-langkah disediakan untuk menetapkan izin untuk setiap identitas. Langkah-langkah di bawah ini menggunakan PowerShell. Jika Anda lebih suka menggunakan Portal, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure.
Gunakan cmdlet PowerShell New-AzRoleAssignment untuk menetapkan peran ke identitas terkelola yang ditetapkan sistem.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Menetapkan peran ke identitas terkelola yang ditetapkan pengguna.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Untuk identitas terkelola yang ditetapkan sistem, tunjukkan
ClientId
dan catat nilai untuk penggunaan nanti.$UAMI.ClientId
Membuat runbook untuk mengirim email
Setelah Anda membuat Key Vault dan menyimpan key API SendGrid
, kini saatnya untuk membuat runbook yang mengambil key API dan mengirim email. Mari gunakan runbook yang menggunakan identitas terkelola yang ditetapkan sistem untuk mengautentikasi dengan Azure guna mengambil rahasia dari Azure Key Vault. Kita akan memanggil runbook Send-GridMailMessage. Anda dapat memodifikasi skrip PowerShell yang digunakan untuk skenario yang berbeda.
Masuk ke portal Microsoft Azure, lalu buka akun Automation Anda.
Dari halaman akun Azure Automation yang terbuka, di bawah Automasi Proses, pilih Runbook
Pilih Buat runbook.
- Beri nama runbook
Send-GridMailMessage
. - Dari daftar menurun Jenis Runbook, pilih PowerShell.
- Pilih Buat.
- Beri nama runbook
Runbook selesai dibuat dan halaman Edit PowerShell Runbook terbuka.
Salin contoh PowerShell berikut ini ke halaman Edit. Pastikan bahwa
VaultName
menentukan nama yang Anda pilih untuk Key Vault Anda.Param( [Parameter(Mandatory=$True)] [String] $destEmailAddress, [Parameter(Mandatory=$True)] [String] $fromEmailAddress, [Parameter(Mandatory=$True)] [String] $subject, [Parameter(Mandatory=$True)] [String] $content, [Parameter(Mandatory=$True)] [String] $ResourceGroupName ) # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity $AzureContext = (Connect-AzAccount -Identity).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext $VaultName = "<Enter your vault name>" $SENDGRID_API_KEY = Get-AzKeyVaultSecret ` -VaultName $VaultName ` -Name "SendGridAPIKey" ` -AsPlainText -DefaultProfile $AzureContext $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Authorization", "Bearer " + $SENDGRID_API_KEY) $headers.Add("Content-Type", "application/json") $body = @{ personalizations = @( @{ to = @( @{ email = $destEmailAddress } ) } ) from = @{ email = $fromEmailAddress } subject = $subject content = @( @{ type = "text/plain" value = $content } ) } $bodyJson = $body | ConvertTo-Json -Depth 4 $response = Invoke-RestMethod -Uri https://api.sendgrid.com/v3/mail/send -Method Post -Headers $headers -Body $bodyJson
Jika Anda ingin runbook dijalankan dengan identitas terkelola yang ditetapkan sistem, jangan ubah kodenya. Jika Anda lebih suka menggunakan identitas terkelola yang ditetapkan pengguna:
- Dari baris 18, hapus
$AzureContext = (Connect-AzAccount -Identity).context
, - Ganti dengan
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, dan - Masukkan ID Klien yang Anda peroleh sebelumnya.
- Dari baris 18, hapus
Pilih Simpan, Publikasikan, lalu Ya saat diminta.
Untuk memverifikasi bahwa runbook berhasil dijalankan, Anda dapat mengikuti langkah-langkah di Uji runbook atau Mulai runbook.
Jika Anda awalnya tidak melihat email pengujian, periksa folder Sampah dan Spam Anda.
Membersihkan sumber daya
Saat runbook tidak lagi diperlukan, pilih di daftar runbook dan pilih Hapus.
Hapus Key Vault menggunakan cmdlet Remove-AzKeyVault.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Langkah berikutnya
- Untuk mengirim data pekerjaan runbook ke ruang kerja Log Analytics Anda, lihat Meneruskan data pekerjaan Azure Automation ke log Azure Monitor.
- Untuk memantau metrik dan log tingkat dasar, lihat Menggunakan pemberitahuan untuk memicu runbook Azure Automation.