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

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.

  1. 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>
    
  2. 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>"
    
  3. 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.

  1. Gunakan cmdlet PowerShell New-AzRoleAssignment untuk menetapkan peran ke identitas terkelola yang ditetapkan sistem.

    New-AzRoleAssignment `
        -ObjectId $SA_PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  2. Menetapkan peran ke identitas terkelola yang ditetapkan pengguna.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. 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.

  1. Masuk ke portal Microsoft Azure, lalu buka akun Automation Anda.

  2. Dari halaman akun Azure Automation yang terbuka, di bawah Automasi Proses, pilih Runbook

  3. Pilih Buat runbook.

    1. Beri nama runbook Send-GridMailMessage.
    2. Dari daftar menurun Jenis Runbook, pilih PowerShell.
    3. Pilih Buat.

    Create Runbook

  4. Runbook selesai dibuat dan halaman Edit PowerShell Runbook terbuka. Edit the Runbook

  5. 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
    
  6. Jika Anda ingin runbook dijalankan dengan identitas terkelola yang ditetapkan sistem, jangan ubah kodenya. Jika Anda lebih suka menggunakan identitas terkelola yang ditetapkan pengguna:

    1. Dari baris 18, hapus $AzureContext = (Connect-AzAccount -Identity).context,
    2. Ganti dengan $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, dan
    3. Masukkan ID Klien yang Anda peroleh sebelumnya.
  7. 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

  1. Saat runbook tidak lagi diperlukan, pilih di daftar runbook dan pilih Hapus.

  2. Hapus Key Vault menggunakan cmdlet Remove-AzKeyVault.

    $VaultName = "<your KeyVault name>"
    $resourceGroup = "<your ResourceGroup name>"
    Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
    

Langkah berikutnya