Um Otomasyonu runbook 'tan e-posta gönder

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

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

Önkoşullar

Azure Key Vault oluşturma

Kimlik bilgisinin belirtilen anahtar kasasında Anahtar Kasası gizli dizilerini almasına ve ayarlamasına izin veren bir Azure Key Vault ve Key Vault erişim ilkesi oluşturun.

  1. Bağlan-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ün.

    $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şturup gizli dizi depolamanın diğer yolları için bkz. Key Vault hızlıbaşlangıçlar.

Yönetilen kimliklere izin atama

Uygun yönetilen kimliğeizinler 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 verilmiştir. Aşağıdaki adımlar PowerShell kullanır. Portalın kullanımını tercih ediyorsanız, bkz. Azure Portal kullanarak Azure rolleri atama.

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

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

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

    $UAMI.ClientId
    

E-posta göndermek için Runbook 'u oluşturma

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

  1. Azure Portal oturum açın ve otomasyon hesabınıza gidin.

  2. Açık Otomasyon hesabı sayfasından, Işlem Otomasyonu altında runbook 'lar ' ı seçin.

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

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

    Runbook oluştur

  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üzenleme sayfasına kopyalayın. VaultNameKey Vault 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ütmesini istiyorsanız, kodu olduğu gibi bırakın. Kullanıcı tarafından atanan yönetilen kimlik kullanmayı tercih ediyorsanız:

      1. satır $AzureContext = (Connect-AzAccount -Identity).context , kaldır
    1. İle değiştirin $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context ve
    2. Daha önce edindiğiniz Istemci KIMLIĞINI girin.
  7. İstendiğinde Kaydet, Yayımla ve Evet ' i seçin.

Runbook 'un başarıyla yürütüldüğünü doğrulamak için, runbook 'U test etme veya runbook 'u başlatmabölümündeki adımları izleyebilirsiniz.

Test e-postanızı başlangıçta görmüyorsanız, istenmeyen ve Istenmeyen posta klasörlerinizi denetleyin .

Kaynakları temizleme

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

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

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

Sonraki adımlar