您好,登錄后才能下訂單哦!
下邊回到我們的原始需求,來看下郵件開關(guān)機(jī)應(yīng)該如何解決安全問題
分析這個(gè)需求,其實(shí)可以通過Microsoft Flow + Azure Automation的方式實(shí)現(xiàn),首先O365郵箱接收郵件,然后通過Flow觸發(fā)Azure Automation的runbook,在runbook里定義好我們需要執(zhí)行的的任務(wù),這樣就可以實(shí)現(xiàn)我們需要的功能了
而身份驗(yàn)證實(shí)際上這里用的是我們之前講的第二種,也就是service principal的方式,automation本身實(shí)際就是使用的service principal的方式,在Azure AD中實(shí)際上是可以看到automation注冊(cè)的application的
而Flow觸發(fā)runbook,其實(shí)可以通過Flow來觸發(fā)webhook,而automation其實(shí)是可以直接創(chuàng)建webhook的,這樣其實(shí)就可以直接通過Flow觸發(fā)Azure automation的webhook,我們的需求就可以實(shí)現(xiàn)了
關(guān)于Microsoft Flow,如果說有人了解的不是很多的話,可以這里先做一個(gè)簡(jiǎn)單的介紹
Microsoft Flow實(shí)際上是一個(gè)在線的workflow的service,可以在多個(gè)app之間執(zhí)行一些自動(dòng)化的任務(wù),F(xiàn)low對(duì)接的系統(tǒng)非常的多,比如Facebook,Twitter,Dynamic CRM,O365
目前來說,可以通過Flow對(duì)接超過200個(gè)服務(wù),以下是其中的一部分
通過Flow,我們可以制定一些自動(dòng)化的流程,舉例來說,想實(shí)現(xiàn)在Yammer中有負(fù)面消息的時(shí)候就通知某個(gè)人呢,這種需求就可以通過Flow結(jié)合其他服務(wù)實(shí)現(xiàn)
首先通過Flow連接到Y(jié)ammer->調(diào)用認(rèn)知服務(wù)文本分析 API 檢查情緒是否是負(fù)面的->如果是負(fù)面的,還可以調(diào)用Microsoft Translator將此文本翻譯為別的語言->最后調(diào)用郵件發(fā)送消息通知
這就是一個(gè)標(biāo)準(zhǔn)的Flow了
對(duì)應(yīng)到我們的需求,則比上邊講的還要簡(jiǎn)單一些
首先通過調(diào)用郵件,識(shí)別關(guān)鍵字,如果識(shí)別到關(guān)鍵字->觸發(fā)webhook,在Automation中執(zhí)行對(duì)應(yīng)的runbook即可,想要復(fù)雜一點(diǎn)還可以加一些判斷的邏輯,不同的關(guān)鍵字可以調(diào)用不同的webhook,實(shí)現(xiàn)不同的功能
我們這里準(zhǔn)備實(shí)現(xiàn)一個(gè)簡(jiǎn)單的邏輯,在email的主題中注明是開機(jī)還是關(guān)機(jī),然后根據(jù)關(guān)鍵字判斷調(diào)用不同的webhook,想要調(diào)用webhook,當(dāng)然首先這個(gè)webhook得存在才行,這里先在Azure automation中把webhook創(chuàng)建好
登陸Azure Portal后,找到automation,創(chuàng)建一個(gè)新的開機(jī)runbook
Runbook 的類型選擇普通的PowerShell即可
之后再依此創(chuàng)建一個(gè)關(guān)機(jī)的runbook,當(dāng)然創(chuàng)建一個(gè)單一的runbook,然后根據(jù)參數(shù)控制開關(guān)機(jī)也是可以的
創(chuàng)建好之后,點(diǎn)擊編輯
編寫好對(duì)應(yīng)的代碼,點(diǎn)擊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
之后,給這個(gè)runbook添加一個(gè)webhook
注意,這里一定要保存好webhook的URL,因?yàn)檫@個(gè)URL創(chuàng)建好之后就不可見了,保存好之后創(chuàng)建webhook
在webhook里已經(jīng)可以看到了
之后按照這個(gè)方法,創(chuàng)建好關(guān)機(jī)的webhook,到此Azure方面的準(zhǔn)備工作就完成了
之后開始準(zhǔn)備Flow,F(xiàn)low其實(shí)在Global Office 365的訂閱里是包含的,所以直接登錄到Global O365,然后選擇Flow
選擇從空白模板創(chuàng)建
這里選擇收到新電子郵件時(shí)
選擇好收件人,之后添加新步驟
然后選擇控制項(xiàng)->條件
按照以下條件設(shè)置
之后對(duì)如果是添加操作
搜索webhook
輸入之前保存下來的webhook URL,注意一點(diǎn)要保證URL的安全,因?yàn)檫@個(gè)URL是包含token的,相當(dāng)于直接就有執(zhí)行操作的權(quán)限
之后設(shè)置一個(gè)并行的條件,判斷郵件主題是否包含stop,然后添加對(duì)應(yīng)stop的webhook
完成后整體是這樣的
之后發(fā)送一個(gè)郵件來進(jìn)行一波測(cè)試
稍等片刻后,可以看到Flow已經(jīng)被觸發(fā)了!
在automation中可以看到,runbook也在running了!
片刻后,VM已經(jīng)是stopped狀態(tài)
在log里可以很清晰地看到有一條由automation賬戶觸發(fā)的shutdown操作
同理,再發(fā)一封start的郵件
之后可以看到VM已經(jīng)自動(dòng)start了,測(cè)試完成!
當(dāng)然,這個(gè)應(yīng)用場(chǎng)景是非常簡(jiǎn)單得了,但是拋磚引玉,F(xiàn)low和automation真的能創(chuàng)造出很多的場(chǎng)景!希望以后能有時(shí)間多研究研究
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。