Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Webhook umožňuje externí službě spustit konkrétní runbook v Azure Automation prostřednictvím jediného požadavku HTTP. Mezi externí služby patří Azure DevOps Services, GitHub, protokoly služby Azure Monitor a vlastní aplikace. Taková služba může pomocí webhooku spustit runbook bez implementace úplného rozhraní API služby Azure Automation. Webhooky můžete porovnat s jinými metodami spuštění runbooku v Spuštění runbooku ve službě Azure Automation.
Pokud chcete porozumět požadavkům klientů na protokol TLS 1.2 nebo vyšší s webhooky, přečtěte si téma TLS pro Azure Automation.
Vlastnosti webhooku
Následující tabulka popisuje vlastnosti, které musíte pro webhook nakonfigurovat.
| Vlastnost | Popis |
|---|---|
| Název | Název webhooku. Můžete zadat libovolný název, protože není vystavený klientovi. Slouží pouze k identifikaci runbooku v Azure Automation. Osvědčeným postupem je dát webhooku název související s klientem, který ho používá. |
| URL | Adresa URL webhooku. Jedná se o jedinečnou adresu, kterou klient volá pomocí protokolu HTTP POST, aby spustil runbook propojený s webhookem. Automaticky se vygeneruje při vytváření webhooku. Nemůžete zadat vlastní adresu URL. Adresa URL obsahuje token zabezpečení, který umožňuje systému třetí strany vyvolat runbook bez dalšího ověřování. Z tohoto důvodu byste s adresou URL měli zacházet jako s heslem. Z bezpečnostních důvodů můžete adresu URL zobrazit jenom na webu Azure Portal při vytváření webhooku. Poznamenejte si adresu URL v zabezpečeném umístění pro budoucí použití. |
| Datum vypršení platnosti | Datum vypršení platnosti webhooku, po jehož uplynutí už se nedá použít. Po vytvoření webhooku můžete datum vypršení platnosti upravit, pokud nevypršela platnost webhooku. |
| Povoleno | Nastavení označující, jestli je webhook ve výchozím nastavení povolený při jeho vytvoření. Pokud tuto vlastnost nastavíte na Zakázáno, nebude moct webhook používat žádný klient. Tuto vlastnost můžete nastavit při vytváření webhooku nebo kdykoli po jeho vytvoření. |
Parametry používané při spuštění runbooku webhookem
Webhook může definovat hodnoty pro parametry runbooku, které se použijí při spuštění runbooku. Webhook musí obsahovat hodnoty pro všechny povinné parametry runbooku a může obsahovat hodnoty volitelných parametrů. Hodnotu parametru nakonfigurovanou pro webhook lze upravit i po vytvoření webhooku. Několik webhooků propojených s jedním runbookem může používat různé hodnoty parametrů sady Runbook. Když klient spustí runbook pomocí webhooku, nemůže přepsat hodnoty parametrů definované v webhooku.
Pro příjem dat z klienta runbook podporuje jeden parametr volaný WebhookData. Tento parametr definuje objekt obsahující data, která klient zahrne do požadavku POST.
Parametr WebhookData má následující vlastnosti:
| Vlastnost | Popis |
|---|---|
| Název webhooku | Název webhooku. |
| RequestHeader | PSCustomObject obsahující hlavičky příchozího požadavku POST. |
| Tělo žádosti | Text příchozího požadavku POST. Toto tělo uchovává jakékoli formátování dat, jako jsou řetězce, JSON, XML nebo formulářově kódovaná data. Runbook musí být zapsán, aby fungoval s očekávaným formátem dat. |
Pro podporu parametru WebhookData není nutná žádná konfigurace webhooku a runbook není potřeba k jeho přijetí. Pokud runbook nedefinuje parametr, budou ignorovány veškeré podrobnosti požadavku odeslaného z klienta.
Poznámka:
Při volání webhooku by klient měl vždy ukládat všechny hodnoty parametrů v případě, že volání selže. Pokud dojde k výpadku sítě nebo problému s připojením, aplikace nemůže načíst neúspěšná volání webhooku.
Pokud zadáte hodnotu pro WebhookData při vytvoření webhooku, tato hodnota se přepíše, když webhook spustí runbook pomocí dat z požadavku POST klienta. K tomu dochází i v případě, že aplikace neobsahuje žádná data v textu požadavku.
Pokud spustíte runbook, který definuje WebhookData pomocí jiného mechanismu než webhooku, můžete zadat hodnotu WebhookData, kterou runbook rozpozná. Tato hodnota by měla být objekt se stejnými vlastnostmi jako WebhookData parametr, aby s ním runbook mohl pracovat stejně jako se skutečnými WebhookData objekty předanými webhookem.
Pokud například spouštíte následující runbook z webu Azure Portal a chcete pro účely testování předat ukázková data webhooku, musíte data předat ve formátu JSON v uživatelském rozhraní.
V dalším příkladu runbooku nadefinujme následující vlastnosti pro WebhookData:
- WebhookName: MyWebhook
-
RequestBody:
*[{'ResourceGroup': 'myResourceGroup','Name': 'vm01'},{'ResourceGroup': 'myResourceGroup','Name': 'vm02'}]*
Teď pro parametr předáme následující objekt JSON v uživatelském WebhookData rozhraní. Tento příklad s návratem na začátek řádku a znaky nového řádku odpovídá formátu předávaného z webhooku.
{"WebhookName":"mywebhook","RequestBody":"[\r\n {\r\n \"ResourceGroup\": \"vm01\",\r\n \"Name\": \"vm01\"\r\n },\r\n {\r\n \"ResourceGroup\": \"vm02\",\r\n \"Name\": \"vm02\"\r\n }\r\n]"}
Poznámka:
Azure Automation protokoluje hodnoty všech vstupních parametrů v rámci úlohy runbooku. Každý vstup poskytnutý klientem v požadavku webhooku je tedy protokolován a dostupný komukoli, kdo má přístup k úloze automatizace. Z tohoto důvodu byste měli být opatrní ohledně zahrnutí citlivých informací do volání webhooku.
Zabezpečení webhooku
Zabezpečení webhooku závisí na ochraně osobních údajů jeho adresy URL, která obsahuje token zabezpečení umožňující vyvolání webhooku. Azure Automation neprovádí u požadavku žádné ověřování, pokud se provede na správnou adresu URL. Z tohoto důvodu by vaši klienti neměli používat webhooky pro runbooky, které provádějí vysoce citlivé operace, aniž by se použil alternativní způsob ověření požadavku.
Zvažte následující strategie:
Do runbooku můžete zahrnout logiku, která určuje, jestli byla spuštěna webhookem. Nechte runbook zkontrolovat vlastnost
WebhookNameparametruWebhookData. Runbook může provést další ověření vyhledáním konkrétních informací ve vlastnostechRequestHeaderaRequestBody.Požádejte runbook, aby provedl ověření externí podmínky, když obdrží požadavek webhooku. Představte si například runbook, který je volána GitHubem, kdykoli existuje nové potvrzení do úložiště GitHub. Runbook se může připojit k GitHubu, aby ověřil, že došlo k novému potvrzení, než budete pokračovat.
Azure Automation podporuje značky služeb virtuální sítě Azure, konkrétně GuestAndHybridManagement. Značky služeb můžete použít k definování řízení přístupu k síti ve skupinách zabezpečení sítě nebo službě Azure Firewall a aktivaci webhooků z vaší virtuální sítě. Značky služeb se dají používat místo konkrétních IP adres při vytváření pravidel zabezpečení. Zadáním názvu značky služby GuestAndHybridManagement v příslušném zdrojovém nebo cílovém poli pravidla můžete povolit nebo odepřít provoz pro službu Automation. Tato značka služby nepodporuje možnost podrobnějšího řízení omezením rozsahů IP na konkrétní oblast.
Vytvoření webhooku
Poznámka:
- Když použijete webhook s runbookem PowerShellu 7, automaticky převede vstupní parametr webhooku na neplatný json. Další informace najdete v tématu Známé problémy – PowerShell 7.1 (Preview). Doporučujeme použít webhook s runbookem PowerShellu 5.
- Použití webhooku ke spuštění runbooku Pythonu se nepodporuje.
Pokud chcete vytvořit webhook, postupujte takto:
Vytvořte runbook PowerShellu s následujícím kódem:
param ( [Parameter(Mandatory=$false)] [object] $WebhookData ) write-output "start" write-output ("object type: {0}" -f $WebhookData.gettype()) write-output $WebhookData write-output "`n`n" write-output $WebhookData.WebhookName write-output $WebhookData.RequestBody write-output $WebhookData.RequestHeader write-output "end" if ($WebhookData.RequestBody) { $names = (ConvertFrom-Json -InputObject $WebhookData.RequestBody) foreach ($x in $names) { $name = $x.Name Write-Output "Hello $name" } } else { Write-Output "Hello World!" }Vytvořte webhook pomocí webu Azure Portal, PowerShellu nebo rozhraní REST API. Webhook vyžaduje publikovaný runbook. Tento návod používá upravenou verzi runbooku, který byl vytvořen na základě Vytvoření runbooku Azure Automation.
Pokud chcete vytvořit webhook pomocí webu Azure Portal, postupujte takto:
Přihlaste se k portálu Azure.
Na webu Azure Portal přejděte ke svému účtu Automation.
V části Automatizace procesů vyberte Runbooky a otevřete stránku Runbooků .
Výběrem runbooku ze seznamu otevřete stránku Runbook Přehled.
Výběrem možnosti Přidat webhook otevřete stránku Přidat webhook .
Na stránce Přidat webhook vyberte Vytvořit nový webhook.
Zadejte Název pro webhook. Datum vypršení platnosti pole Vyprší je ve výchozím nastavení nastavena na jeden rok od aktuálního data.
Vyberte ikonu kopírování nebo stiskněte Ctrl +C a zkopírujte adresu URL webhooku. Pak adresu URL uložte do zabezpečeného umístění.
Důležité
Po vytvoření webhooku nemůžete adresu URL znovu načíst. Ujistěte se, že ho zkopírujete a zaznamenáte jako výše.
Kliknutím na tlačítko OK se vrátíte na stránku Přidat webhook .
Na stránce Přidat webhook vyberte Konfigurovat parametry a spusťte nastavení a otevřete stránku Parametry.
Zkontrolujte stránku Parametry. V příkladu runbooku použitého v tomto článku nejsou potřeba žádné změny. Kliknutím na tlačítko OK se vrátíte na stránku Přidat webhook .
Na stránce Přidat webhook vyberte Vytvořit. Webhook je vytvořen a vrátíte se na stránku Přehled runbooku.
Použij webhook
Tento příklad používá rutinu PowerShellu Invoke-WebRequest k odeslání požadavku POST do nového webhooku.
Pokud chcete použít webhook, postupujte takto:
Připravte hodnoty, které se předají runbooku jako obsah volání webhooku. U relativně jednoduchých hodnot můžete hodnoty skriptovat následujícím způsobem:
$Names = @( @{ Name="Hawaii"}, @{ Name="Seattle"}, @{ Name="Florida"} ) $body = ConvertTo-Json -InputObject $NamesU větších sad můžete chtít použít soubor. Vytvořte soubor s názvem
names.jsona vložte následující kód:[ { "Name": "Hawaii" }, { "Name": "Florida" }, { "Name": "Seattle" } ]Před spuštěním následujících příkazů PowerShellu změňte hodnotu proměnné
$fileskutečnou cestou k souboru JSON.# Revise file path with actual path $file = "path\names.json" $bodyFile = Get-Content -Path $fileSpuštěním následujících příkazů PowerShellu volejte webhook pomocí rozhraní REST API.
$response = Invoke-WebRequest -Method Post -Uri $webhookURI -Body $body -UseBasicParsing $response $responseFile = Invoke-WebRequest -Method Post -Uri $webhookURI -Body $bodyFile -UseBasicParsing $responseFilePro ilustrativní účely byla provedena dvě volání pro dvě různé metody výroby těla. V produkčním prostředí použijte pouze jednu metodu. Výstup by měl vypadat nějak takto (zobrazí se jenom jeden výstup):
Klient obdrží z požadavku jeden z následujících návratových kódů
POST.Code Text Popis 202 Přijato Požadavek byl přijat a runbook byl úspěšně zařazen do fronty. 400 Nesprávná žádost Žádost nebyla přijata z jednoho z následujících důvodů: - Platnost webhooku vypršela.
- Webhook je zakázaný.
- Token v adrese URL je neplatný.
404 Nenalezeno Žádost nebyla přijata z jednoho z následujících důvodů: - Webhook nebyl nalezen.
- Runbook nebyl nalezen.
- Účet nebyl nalezen.
500 Vnitřní chyba serveru Adresa URL byla platná, ale došlo k chybě. Znovu odešlete požadavek. Za předpokladu, že požadavek proběhne úspěšně, obsahuje odpověď webhooku ID úlohy ve formátu JSON, jak je znázorněno níže. Obsahuje jedno ID úlohy, ale formát JSON umožňuje potenciální budoucí vylepšení.
{"JobIds":["<JobId>"]}K získání výstupu se použije cmdlet PowerShellu Get-AzAutomationJobOutput. Můžete také použít rozhraní API služby Azure Automation.
#isolate job ID $jobid = (ConvertFrom-Json ($response.Content)).jobids[0] # Get output Get-AzAutomationJobOutput ` -AutomationAccountName $automationAccount ` -Id $jobid ` -ResourceGroupName $resourceGroup ` -Stream OutputKdyž aktivujete runbook vytvořený v předchozím kroku, vytvoří se úloha a výstup by měl vypadat nějak takto:
Aktualizace webhooku
Když webhook vytvoříte, má dobu platnosti 10 let, po jejímž uplynutí jeho platnost automaticky vyprší. Jakmile vyprší platnost webhooku, nemůžete ho znovu aktivovat. Můžete ho odebrat a pak ho znovu vytvořit. Platnost webhooku, jehož platnost ještě nevypršela, můžete prodloužit. Pokud chcete rozšířit webhook, proveďte následující kroky:
- Přejděte na runbook, který obsahuje webhook.
- V části Prostředky vyberte Webhooky a potom webhook, který chcete rozšířit.
- Na stránce Webhooku zvolte nové datum a čas vypršení platnosti a pak vyberte Uložit.
Zkontrolujte volání Webhook – aktualizace rozhraní API a cmdlet Set-AzAutomationWebhook PowerShellu pro další možné úpravy.
Vyčištění zdrojů
Tady jsou příklady odebrání webhooku z runbooku Automation.
Pomocí PowerShellu je možné použít rutinu Remove-AzAutomationWebhook , jak je znázorněno níže. Není vrácen žádný výstup.
Remove-AzAutomationWebhook ` -ResourceGroup $resourceGroup ` -AutomationAccountName $automationAccount ` -Name $psWebhookPomocí rozhraní API REST Webhook - Delete lze postupovat, jak je znázorněno níže.
Invoke-WebRequest -Method Delete -Uri $restURI -Headers $authHeaderVýstup
StatusCode : 200znamená úspěšné odstranění.
Vytvoření runbooku a webhooku pomocí šablony ARM
Webhooky pro automatizaci je také možné vytvořit pomocí šablon Azure Resource Manager. Tato ukázková šablona vytvoří účet Automation, čtyři runbooky a webhook pro pojmenovaný runbook.
Pokud chcete vytvořit webhook pomocí šablony ARM, postupujte takto:
Vytvořte soubor s názvem
webhook_deploy.jsona vložte následující kód:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "automationAccountName": { "type": "String", "metadata": { "description": "Automation account name" } }, "webhookName": { "type": "String", "metadata": { "description": "Webhook Name" } }, "runbookName": { "type": "String", "metadata": { "description": "Runbook Name for which webhook will be created" } }, "WebhookExpiryTime": { "type": "String", "metadata": { "description": "Webhook Expiry time" } }, "_artifactsLocation": { "defaultValue": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.automation/101-automation/", "type": "String", "metadata": { "description": "URI to artifacts location" } } }, "resources": [ { "type": "Microsoft.Automation/automationAccounts", "apiVersion": "2020-01-13-preview", "name": "[parameters('automationAccountName')]", "location": "[resourceGroup().location]", "properties": { "sku": { "name": "Free" } }, "resources": [ { "type": "runbooks", "apiVersion": "2018-06-30", "name": "[parameters('runbookName')]", "location": "[resourceGroup().location]", "dependsOn": [ "[parameters('automationAccountName')]" ], "properties": { "runbookType": "Python2", "logProgress": "false", "logVerbose": "false", "description": "Sample Runbook", "publishContentLink": { "uri": "[uri(parameters('_artifactsLocation'), 'scripts/AzureAutomationTutorialPython2.py')]", "version": "1.0.0.0" } } }, { "type": "webhooks", "apiVersion": "2018-06-30", "name": "[parameters('webhookName')]", "dependsOn": [ "[parameters('automationAccountName')]", "[parameters('runbookName')]" ], "properties": { "isEnabled": true, "expiryTime": "[parameters('WebhookExpiryTime')]", "runbook": { "name": "[parameters('runbookName')]" } } } ] } ], "outputs": { "webhookUri": { "type": "String", "value": "[reference(parameters('webhookName')).uri]" } } }Následující ukázka kódu PowerShellu nasadí šablonu z vašeho počítače. Zadejte odpovídající hodnotu pro proměnné a pak spusťte skript.
$resourceGroup = "resourceGroup" $templateFile = "path\webhook_deploy.json" $armAutomationAccount = "automationAccount" $armRunbook = "ARMrunbookName" $armWebhook = "webhookName" $webhookExpiryTime = "12-31-2022" New-AzResourceGroupDeployment ` -Name "testDeployment" ` -ResourceGroupName $resourceGroup ` -TemplateFile $templateFile ` -automationAccountName $armAutomationAccount ` -runbookName $armRunbook ` -webhookName $armWebhook ` -WebhookExpiryTime $webhookExpiryTimePoznámka:
Z bezpečnostních důvodů se identifikátor URI vrátí pouze při prvním nasazení šablony.
Další kroky
- Pokud chcete spustit runbook z výstrahy, přečtěte si téma Použití upozornění k aktivaci runbooku Azure Automation.