Odeslání e-mailu z runbooku Automation

E-mail z runbooku s SendGridem můžete odeslat pomocí PowerShellu.

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Předpoklady

Vytvoření služby Azure Key Vault

Vytvořte zásadu přístupu ke službě Azure Key Vault a Key Vault, která umožňuje přihlašovacím údajům získat a nastavit tajné kódy trezoru klíčů v zadaném trezoru klíčů.

  1. Přihlaste se k Azure interaktivně pomocí rutiny Připojení-AzAccount a postupujte podle pokynů.

    # 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. Zadejte odpovídající hodnotu pro níže uvedené proměnné a spusťte skript.

    $resourceGroup = "<Resource group>"
    $automationAccount = "<Automation account>"
    $region = "<Region>"
    $SendGridAPIKey = "<SendGrid API key>"
    $VaultName = "<A universally unique vault name>"
    
    $userAssignedManagedIdentity = "<User-assigned managed identity>"
    
  3. Vytvoření služby Key Vault a přiřazení oprávnění

    # 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
    

    Další způsoby vytvoření služby Azure Key Vault a uložení tajného kódu najdete v rychlých startech ke službě Key Vault.

Přiřazení oprávnění spravovaným identitám

Přiřaďte oprávnění příslušné spravované identitě. Runbook může používat spravovanou identitu přiřazenou systémem účtu Automation nebo spravovanou identitu přiřazenou uživatelem. Kroky jsou k dispozici pro přiřazení oprávnění ke každé identitě. Následující postup použijte PowerShell. Pokud dáváte přednost používání portálu, přečtěte si téma Přiřazení rolí Azure pomocí webu Azure Portal.

  1. Pomocí rutiny PowerShellu New-AzRoleAssignment přiřaďte roli spravované identitě přiřazené systémem.

    New-AzRoleAssignment `
        -ObjectId $SA_PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  2. Přiřaďte roli spravované identitě přiřazené uživatelem.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. U spravované identity přiřazené systémem zobrazte ClientId a poznamenejte si hodnotu pro pozdější použití.

    $UAMI.ClientId
    

Vytvoření runbooku pro odeslání e-mailu

Po vytvoření služby Key Vault a uložení SendGrid klíče rozhraní API je čas vytvořit runbook, který načte klíč rozhraní API a odešle e-mail. Pojďme použít runbook, který používá spravovanou identitu přiřazenou systémem k ověření v Azure k načtení tajného kódu ze služby Azure Key Vault. Zavoláme runbook Send-GridMailMessage. Skript PowerShellu, který se používá pro různé scénáře, můžete upravit.

  1. Přihlaste se k webu Azure Portal a přejděte ke svému účtu Automation.

  2. Na otevřené stránce účtu Automation v části Automatizace procesů vyberte Runbooky.

  3. Vyberte + Vytvořit runbook.

    1. Pojmenujte runbook Send-GridMailMessage.
    2. V rozevíracím seznamu typu runbooku vyberte PowerShell.
    3. Vyberte Vytvořit.

    Create Runbook

  4. Runbook se vytvoří a otevře se stránka Upravit powershellový runbook. Edit the Runbook

  5. Zkopírujte následující příklad PowerShellu na stránku Upravit. Ujistěte se, že VaultName určuje název, který jste zvolili pro službu Key Vault.

    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. Pokud chcete, aby runbook běžel se spravovanou identitou přiřazenou systémem, nechejte kód tak, jak je. Pokud chcete použít spravovanou identitu přiřazenou uživatelem, pak:

    1. Z řádku 18 odeberte $AzureContext = (Connect-AzAccount -Identity).context,
    2. Nahraďte ho a $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
    3. Zadejte ID klienta, které jste získali dříve.
  7. Po zobrazení výzvy vyberte Uložit, Publikovat a pak Ano .

Pokud chcete ověřit, že se runbook úspěšně spustí, můžete postupovat podle kroků v části Testování runbooku nebo Spuštění runbooku.

Pokud se váš testovací e-mail zpočátku nezobrazuje, zkontrolujte složky Nevyžádaná pošta a Nevyžádaná pošta.

Vyčištění prostředků

  1. Pokud už runbook nepotřebujete, vyberte ho v seznamu runbooků a vyberte Odstranit.

  2. Odstraňte službu Key Vault pomocí rutiny Remove-AzKeyVault .

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

Další kroky