Odeslání e-mailu z runbooku am Automation

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

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

Požadavky

Vytvoření služby Azure Key Vault

Vytvořte zásadu Azure Key Vault a Key Vault přístupu, která umožní 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ásledující proměnné a pak 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í 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, jak vytvořit Azure Key Vault a uložit tajný kód, najdete v Key Vault rychlých startů.

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. K dispozici jsou kroky pro přiřazení oprávnění ke každé identitě. Následující postup používá PowerShell. Pokud dáváte přednost používání portálu, podívejte se na stránku Přiřazení rolí Azure pomocí Azure Portal.

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

    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. Pro spravovanou identitu přiřazenou systémem zobrazte a ClientId zaznamenate hodnotu pro pozdější použití.

    $UAMI.ClientId
    

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

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

  1. Přihlaste se k 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. Pojmete runbook Send-GridMailMessage .
    2. V rozevíracím seznamu Typ runbooku vyberte PowerShell.
    3. Vyberte Vytvořit.

    Vytvoření runbooku

  4. Runbook se vytvoří a otevře se stránka Upravit powershellový runbook. Úprava runbooku

  5. Zkopírujte následující příklad PowerShellu na stránku Upravit. Ujistěte VaultName se, že parametr určuje název, který jste zvolili pro 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 se runbook spouštěl se spravovanou identitou přiřazenou systémem, ponechte kód tak, jak je. Pokud dáváte přednost použití spravované identity přiřazené uživatelem, pak:

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

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

Pokud testovací e-mail zpočátku nevidíte, zkontrolujte složky nevyžádané pošty a spamu.

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

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

  2. Odstraňte Key Vault rutinou Remove-AzKeyVault.

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

Další kroky