Automation Runbook에서 이메일 보내기
PowerShell을 통해 SendGrid를 사용하여 Runbook에서 이메일을 보낼 수 있습니다.
Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
사전 요구 사항
SendGrid 보낸 사람 확인. 도메인 또는 단일 보낸 사람
사용자 할당 관리 ID가 하나 이상 있는 Azure Automation 계정. 자세한 내용은 관리 ID 사용을 참조하세요.
Automation 계정으로 가져온 Az 모듈
Az.Accounts
및Az.KeyVault
. 자세한 내용은 Az 모듈 가져오기를 참조하세요.로컬 컴퓨터에 설치된 Azure Az PowerShell 모듈입니다. 설치 또는 업그레이드하려면 Azure Az PowerShell 모듈을 설치하는 방법을 참조하세요.
Azure Key Vault 만들기
Azure Key Vault 및 Key Vault 액세스 정책을 만들어 자격 증명이 지정된 Key Vault의 비밀을 가져오고 설정할 수 있도록 합니다.
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>
아래 변수에 적절한 값을 제공한 다음, 스크립트를 실행합니다.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
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 역할 할당을 참조하세요.
PowerShell cmdlet New-AzRoleAssignment를 사용하여 시스템 할당 관리 ID에 역할을 할당합니다.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
사용자 할당 관리 ID에 역할을 할당합니다.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
시스템 할당 관리 ID의 경우
ClientId
를 표시하고 나중에 사용할 수 있도록 값을 기록합니다.$UAMI.ClientId
이메일을 보내는 Runbook 만들기
Key Vault를 만들고 SendGrid
API 키를 저장한 후에는 API 키를 검색하고 이메일을 보내는 Runbook을 만들 수 있습니다. 시스템 할당 관리 ID를 사용하여 Azure에 인증하여 Azure Key Vault에서 비밀을 검색하는 Runbook을 사용해 보겠습니다. Runbook Send-GridMailMessage를 호출합니다. 다양한 시나리오에 사용되는 PowerShell 스크립트를 수정할 수 있습니다.
Azure Portal에 로그인하고 Azure Automation 계정으로 이동합니다.
열려 있는 Automation 계정 페이지의 프로세스 자동화에서 Runbook을 선택합니다.
+ Runbook 만들기를 선택합니다.
- Runbook 이름을
Send-GridMailMessage
로 지정합니다. - Runbook 형식 드롭다운 목록에서 PowerShell을 선택합니다.
- 만들기를 실행합니다.
- Runbook 이름을
Runbook이 만들어지고 PowerShell Runbook 편집 페이지가 열립니다.
다음 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
시스템이 할당한 관리 ID를 사용하여 Runbook을 실행하려면 코드를 그대로 둡니다. 사용자가 할당한 관리 ID를 사용하려면 다음을 수행합니다.
- 18번째 줄에서
$AzureContext = (Connect-AzAccount -Identity).context
를 제거합니다. $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
로 바꿉니다.- 앞에서 얻은 클라이언트 ID를 입력합니다.
- 18번째 줄에서
저장, 게시를 선택한 다음 메시지가 표시되면 예를 선택합니다.
Runbook이 성공적으로 실행되는지 확인하려면 Runbook 테스트 또는 Runbook 시작 아래의 단계를 수행할 수 있습니다.
처음에 테스트 이메일이 보이지 않으면 정크 및 스팸 폴더를 확인하세요.
리소스 정리
Runbook이 더 이상 필요하지 않으면 Runbook 목록에서 선택하고 삭제를 선택합니다.
Remove-AzKeyVault cmdlet을 사용하여 Key Vault를 삭제합니다.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
다음 단계
- Runbook 작업 데이터를 Log Analytics 작업 영역에 보내려면 Azure Monitor 로그에 Azure Automation 작업 데이터 전달을 참조하세요.
- 기본 수준 메트릭과 로그를 모니터링하려면 경고를 사용하여 Azure Automation Runbook 트리거를 참조하세요.