下邊回到我們的原始需求,來看下郵件開關機應該如何解決安全問題
分析這個需求,其實可以通過Microsoft Flow + Azure Automation的方式實現,首先O365郵箱接收郵件,然後通過Flow觸發Azure Automation的runbook,在runbook裏定義好我們需要執行的的任務,這樣就可以實現我們需要的功能了
而身份驗證實際上這裏用的是我們之前講的第二種,也就是service principal的方式,automation本身實際就是使用的service principal的方式,在Azure AD中實際上是可以看到automation註冊的application的
而Flow觸發runbook,其實可以通過Flow來觸發webhook,而automation其實是可以直接創建webhook的,這樣其實就可以直接通過Flow觸發Azure automation的webhook,我們的需求就可以實現了
關於Microsoft Flow,如果說有人瞭解的不是很多的話,可以這裏先做一個簡單的介紹
Microsoft Flow實際上是一個在線的workflow的service,可以在多個app之間執行一些自動化的任務,Flow對接的系統非常的多,比如Facebook,Twitter,Dynamic CRM,O365
目前來說,可以通過Flow對接超過200個服務,以下是其中的一部分
通過Flow,我們可以制定一些自動化的流程,舉例來說,想實現在Yammer中有負面消息的時候就通知某個人呢,這種需求就可以通過Flow結合其他服務實現
首先通過Flow連接到Yammer->調用認知服務文本分析 API 檢查情緒是否是負面的->如果是負面的,還可以調用Microsoft Translator將此文本翻譯爲別的語言->最後調用郵件發送消息通知
這就是一個標準的Flow了
對應到我們的需求,則比上邊講的還要簡單一些
首先通過調用郵件,識別關鍵字,如果識別到關鍵字->觸發webhook,在Automation中執行對應的runbook即可,想要複雜一點還可以加一些判斷的邏輯,不同的關鍵字可以調用不同的webhook,實現不同的功能
我們這裏準備實現一個簡單的邏輯,在email的主題中註明是開機還是關機,然後根據關鍵字判斷調用不同的webhook,想要調用webhook,當然首先這個webhook得存在才行,這裏先在Azure automation中把webhook創建好
登陸Azure Portal後,找到automation,創建一個新的開機runbook
Runbook 的類型選擇普通的PowerShell即可
之後再依此創建一個關機的runbook,當然創建一個單一的runbook,然後根據參數控制開關機也是可以的
創建好之後,點擊編輯
編寫好對應的代碼,點擊publish
$connectionName = "AzureRunAsConnection" $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName $logonAttempt = 0 $logonResult = $False write-output "Login to Azure" while(!($connectionResult) -And ($logonAttempt -le 10)) { $LogonAttempt++ # Logging in to Azure... $connectionResult = Connect-AzureRmAccount ` -ServicePrincipal ` -TenantId $servicePrincipalConnection.TenantId ` -ApplicationId $servicePrincipalConnection.ApplicationId ` -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint Start-Sleep -Seconds 1 } write-output "Start auto VM" import-module Azurerm Start-AzureRmVM -ResourceGroupName mxyjpwest -Name automationvm
之後,給這個runbook添加一個webhook
注意,這裏一定要保存好webhook的URL,因爲這個URL創建好之後就不可見了,保存好之後創建webhook
在webhook裏已經可以看到了
之後按照這個方法,創建好關機的webhook,到此Azure方面的準備工作就完成了
之後開始準備Flow,Flow其實在Global Office 365的訂閱裏是包含的,所以直接登錄到Global O365,然後選擇Flow
選擇從空白模板創建
這裏選擇收到新電子郵件時
選擇好收件人,之後添加新步驟
然後選擇控制項->條件
按照以下條件設置
之後對如果是添加操作
搜索webhook
輸入之前保存下來的webhook URL,注意一點要保證URL的安全,因爲這個URL是包含token的,相當於直接就有執行操作的權限
之後設置一個並行的條件,判斷郵件主題是否包含stop,然後添加對應stop的webhook
完成後整體是這樣的
之後發送一個郵件來進行一波測試
稍等片刻後,可以看到Flow已經被觸發了!
在automation中可以看到,runbook也在running了!
片刻後,VM已經是stopped狀態
在log裏可以很清晰地看到有一條由automation賬戶觸發的shutdown操作
同理,再發一封start的郵件
之後可以看到VM已經自動start了,測試完成!
當然,這個應用場景是非常簡單得了,但是拋磚引玉,Flow和automation真的能創造出很多的場景!希望以後能有時間多研究研究