Otomasyon runbook’undan e-posta gönderme

PowerShell kullanarak SendGrid ile runbook'tan e-posta gönderebilirsiniz.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Azure Key Vault oluşturma

Kimlik bilgilerinin belirtilen anahtar kasasında anahtar kasası gizli dizilerini almasına ve ayarlamasına olanak tanıyan bir Azure Key Vault ve Key Vault erişim ilkesi oluşturun.

  1. Connect-AzAccount cmdlet'ini kullanarak Azure'da etkileşimli olarak oturum açın ve yönergeleri izleyin.

    # 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. Aşağıdaki değişkenler için uygun bir değer sağlayın ve betiği yürütür.

    $resourceGroup = "<Resource group>"
    $automationAccount = "<Automation account>"
    $region = "<Region>"
    $SendGridAPIKey = "<SendGrid API key>"
    $VaultName = "<A universally unique vault name>"
    
    $userAssignedManagedIdentity = "<User-assigned managed identity>"
    
  3. Key Vault oluşturma ve izinleri atama

    # 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
    

    Azure Key Vault oluşturmanın ve gizli dizi depolamanın diğer yolları için bkz . Key Vault hızlı başlangıçları.

Yönetilen kimliklere izinler atama

uygun yönetilen kimliğe izinler atayın. Runbook, Otomasyon hesabı sistem tarafından atanan yönetilen kimliği veya kullanıcı tarafından atanan yönetilen kimliği kullanabilir. Her kimliğe izin atamak için adımlar sağlanır. Aşağıdaki adımlarda PowerShell kullanılır. Portalı kullanmayı tercih ediyorsanız bkz . Azure portalını kullanarak Azure rolleri atama.

  1. Sistem tarafından atanan yönetilen kimliğe rol atamak için New-AzRoleAssignment PowerShell cmdlet'ini kullanın.

    New-AzRoleAssignment `
        -ObjectId $SA_PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  2. Kullanıcı tarafından atanan yönetilen kimliğe rol atayın.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. Sistem tarafından atanan yönetilen kimlik için değeri daha sonra kullanmak üzere gösterin ClientId ve kaydedin.

    $UAMI.ClientId
    

E-posta göndermek için runbook oluşturma

Bir Key Vault oluşturup API anahtarınızı SendGrid depoladıktan sonra, API anahtarını alan ve e-posta gönderen runbook'u oluşturmanın zamanı geldi. Azure Key Vault'tan gizli diziyi almak üzere Azure'da kimlik doğrulaması yapmak için sistem tarafından atanan yönetilen kimliği kullanan bir runbook kullanalım. Runbook Send-GridMailMessage'ı çağıracağız. Farklı senaryolar için kullanılan PowerShell betiğini değiştirebilirsiniz.

  1. Azure portalında oturum açın ve Otomasyon hesabınıza gidin.

  2. Açık Otomasyon hesabı sayfanızdaki İşlem Otomasyonu altında Runbook'lar'ı seçin

  3. + Runbook oluştur'u seçin.

    1. Runbook'u Send-GridMailMessageolarak adlandırın.
    2. Runbook türü açılan listesinden PowerShell'i seçin.
    3. Oluştur'u belirleyin.

    Runbook oluşturma

  4. Runbook oluşturulur ve PowerShell Runbook'unu Düzenle sayfası açılır. Runbook'u düzenleme

  5. Aşağıdaki PowerShell örneğini Düzenle sayfasına kopyalayın. anahtarının VaultName Key Vault'unuz için seçtiğiniz adı belirttiğinden emin olun.

    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. Runbook'un sistem tarafından atanan yönetilen kimlikle yürütülmesini istiyorsanız, kodu olduğu gibi bırakın. Kullanıcı tarafından atanan bir yönetilen kimlik kullanmayı tercih ediyorsanız:

    1. 18. satırdan öğesini kaldırın $AzureContext = (Connect-AzAccount -Identity).context.
    2. değerini ve ile $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextdeğiştirin
    3. Daha önce edindiğiniz İstemci Kimliğini girin.
  7. İstendiğinde Kaydet, Yayımla ve ardından Evet'i seçin.

Runbook'un başarıyla yürütüldüğünü doğrulamak için Runbook'u test etme veya Runbook başlatma altındaki adımları izleyebilirsiniz.

Başlangıçta test e-postanızı görmüyorsanız Gereksiz ve İstenmeyen Posta klasörlerinizi denetleyin.

Kaynakları temizleme

  1. Runbook artık gerekli olmadığında runbook listesinden bunu seçin ve Sil'i seçin.

  2. Remove-AzKeyVault cmdlet'ini kullanarak Key Vault'ı silin.

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

Sonraki adımlar