Automation Runbook에서 이메일 보내기

PowerShell을 통해 SendGrid를 사용하여 Runbook에서 이메일을 보낼 수 있습니다.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

사전 요구 사항

Azure Key Vault 만들기

Azure Key Vault 및 Key Vault 액세스 정책을 만들어 자격 증명이 지정된 Key Vault의 비밀을 가져오고 설정할 수 있도록 합니다.

  1. Connect-AzAccount cmdlet을 사용하여 대화형으로 Azure에 로그인하고 지침을 따릅니다.

    # 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. 아래 변수에 적절한 값을 제공한 다음, 스크립트를 실행합니다.

    $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 만들기 및 권한 할당

    # 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를 만들고 비밀을 저장하는 다른 방법은 Key Vault 빠른 시작을 참조하세요.

관리 ID에 사용 권한 할당

적절한 관리 ID에 권한을 할당합니다. Runbook은 Automation 계정의 시스템이 할당한 관리 ID 또는 사용자가 할당한 관리 ID를 사용할 수 있습니다. 각 ID에 권한을 할당하는 단계가 제공됩니다. 아래 단계에서는 PowerShell을 사용합니다. 포털 사용을 선호하는 경우 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

  1. PowerShell cmdlet New-AzRoleAssignment를 사용하여 시스템 할당 관리 ID에 역할을 할당합니다.

    New-AzRoleAssignment `
        -ObjectId $SA_PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  2. 사용자 할당 관리 ID에 역할을 할당합니다.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. 시스템 할당 관리 ID의 경우 ClientId를 표시하고 나중에 사용할 수 있도록 값을 기록합니다.

    $UAMI.ClientId
    

이메일을 보내는 Runbook 만들기

Key Vault를 만들고 SendGrid API 키를 저장한 후에는 API 키를 검색하고 이메일을 보내는 Runbook을 만들 수 있습니다. 시스템 할당 관리 ID를 사용하여 Azure에 인증하여 Azure Key Vault에서 비밀을 검색하는 Runbook을 사용해 보겠습니다. Runbook Send-GridMailMessage를 호출합니다. 다양한 시나리오에 사용되는 PowerShell 스크립트를 수정할 수 있습니다.

  1. Azure Portal에 로그인하고 Azure Automation 계정으로 이동합니다.

  2. 열려 있는 Automation 계정 페이지의 프로세스 자동화에서 Runbook을 선택합니다.

  3. + Runbook 만들기를 선택합니다.

    1. Runbook 이름을 Send-GridMailMessage로 지정합니다.
    2. Runbook 형식 드롭다운 목록에서 PowerShell을 선택합니다.
    3. 만들기를 실행합니다.

    Create Runbook

  4. Runbook이 만들어지고 PowerShell Runbook 편집 페이지가 열립니다. Edit the Runbook

  5. 다음 PowerShell 예제를 편집 페이지에 복사합니다. VaultName에서 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. 시스템이 할당한 관리 ID를 사용하여 Runbook을 실행하려면 코드를 그대로 둡니다. 사용자가 할당한 관리 ID를 사용하려면 다음을 수행합니다.

    1. 18번째 줄에서 $AzureContext = (Connect-AzAccount -Identity).context를 제거합니다.
    2. $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context로 바꿉니다.
    3. 앞에서 얻은 클라이언트 ID를 입력합니다.
  7. 저장, 게시를 선택한 다음 메시지가 표시되면 를 선택합니다.

Runbook이 성공적으로 실행되는지 확인하려면 Runbook 테스트 또는 Runbook 시작 아래의 단계를 수행할 수 있습니다.

처음에 테스트 이메일이 보이지 않으면 정크스팸 폴더를 확인하세요.

리소스 정리

  1. Runbook이 더 이상 필요하지 않으면 Runbook 목록에서 선택하고 삭제를 선택합니다.

  2. Remove-AzKeyVault cmdlet을 사용하여 Key Vault를 삭제합니다.

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

다음 단계