Az Azure Automation használata – [Teljes útmutató]
Az Azure Automation az egyik legnépszerűbb eszköz a PowerShell-szkriptek felhőben történő futtatásához. Nem csak az Azure-környezetet kezelheti a runbookokkal, hanem például a Microsoft Office 365 bérlőjét is.
Az automatizálás az IT kulcsfontosságú része, és SysAdminként Önnek törekednie kell a napi/kézi feladatai többségének automatizálására. A forgatókönyv megírása kezdetben eltarthat egy ideig, de hosszú távon sok időt takarít meg.
Ebben a cikkben elmagyarázom, hogyan állíthatja be Azure Automation-fiókját, és hogyan hozhatja létre az első PowerShell-runbookot az Azure-ban.
Azure automatizálási követelmények
Csak néhány követelmény van a PowerShell-szkript Azure-beli futtatásának megkezdéséhez:
- Azure-előfizetés (kirovó fizetés)
- Azure Automation-fiók
Kezdheti az Azure-előfizetés ingyenes próbaverziójával, de a felosztható előfizetés sem igazán drága.
Tanács
2023 szeptemberétől már nem tudjuk használni a RunAs-fiókokat. Győződjön meg arról, hogy a runbookokat áttelepítette a felügyelt identitások használatára a hitelesítéshez az említett dátum előtt. Olvasson el mindent a felügyelt identitásokról ebben a cikkben.
Azure Automation díjszabása
Az Azure Automation árképzése a feladat futásának perceinek számán alapul. Minden előfizetéssel havonta 500 perc munkaidőt és 744 órát kap a figyelők ingyen.
- Job run time
500 perc
- Watchers
744 óra
Hogy ötletet adjunk, egy egyszerű szkript, amely ellenőrzi a bérlőm összes felhasználójának MFA állapotát, mindössze 1 percet vesz igénybe. A SharePoint csapatwebhely létrehozása és egy sablon alkalmazása összesen 30 másodpercet vesz igénybe.
Tehát az 500 ingyenes perccel a legtöbb napi feladatot automatizálhatod ? És minden további óra csak 0,12 dollárba kerül.
Az Azure Automation használatának első lépései
Az Azure Automation használatának megkezdéséhez létre kell hoznunk egy Azure Automation-fiókot, és telepítenünk kell a megfelelő PowerShell-modulokat.
Jelentkezzen be az Azure Portalra
Nyissa meg a https://portal.azure.com/ webhelyet, és jelentkezzen be az Office 365 hitelesítő adataival.
Lépjen az Automatizálási fiókszolgáltatások oldalra
Használja a keresősávot az automatizálási fiókszolgáltatások megtalálásához
Hozzon létre egy új automatizálási fiókot
Új automatizálási fiók létrehozásához kattintson a Létrehozás gombra.
- Adjon nevet automatizálási fiókjának
- Válassza ki előfizetését (ingyenes próbaidőszak vagy felosztó-kirovó)
- Erőforráscsoport létrehozása vagy kiválasztása
Eltarthat néhány percig, amíg létrejön az erőforráscsoport.Nyissa meg Azure Automation-fiókját
Válassza ki az új automatizálási fiókját a létrehozása után.
Telepítse a PowerShell-modulokat
Mielőtt elkezdhetnénk létrehozni első runbookunkat, először telepítenünk kell a szükséges PowerShell-modulokat.
Válassza ki a modulokat, majd kattintson a Tallózás a galériában
lehetőségre. />
Telepítse a következő modulokat:
- PnP.PowerShell
- AzureAD
- ExchangeOnlineManagement
Létrehoztuk Azure Automation-fiókunkat, és elkezdhetjük az első Runbook létrehozását.
Hitelesítés az Azure Runbookban MFA használatakor
Az Azure Runbooks hitelesítése mindig egy kis kihívás. Feltételes hozzáférési szabályokkal kizárhatja az Azure-szolgáltatásokat az MFA-ból, de ehhez az összes IP-címről naprakésznek kell lennie.
Egy másik lehetőség a szolgáltatásfiók kizárása az MFA-ból, de ez nem a legjobb gyakorlat. Előfordulhat, hogy a szolgáltatásfiókok globális rendszergazdai jogokkal rendelkeznek, ezért megfelelően szeretné védeni ezeket a fiókokat.
Tehát hogyan hitelesíthet AzureAD vagy Exchange Online szolgáltatást az Azure Runbookban? Nos, használhatjuk az Azure Run As fiókot.
Az Azure Automation-fiókunk létrehozása során automatikusan létrehoztunk egy Futtatás fiókként is. A Futtatás másként fiók hitelesítést biztosít az Azure Runbookokhoz, az automatizáláshoz és az Azure Resource Manager erőforrásainak kezeléséhez egy önaláírt tanúsítvány használatával.
Figyelmeztetés
2023 szeptemberétől már nem tudjuk használni a RunAs-fiókokat. Győződjön meg arról, hogy a runbookokat áttelepítette a felügyelt identitások használatára a hitelesítéshez az említett dátum előtt. Olvasson el mindent a felügyelt identitásokról ebben a cikkben.
Jegyzet
A tanúsítvány csak egy évig érvényes. Győződjön meg arról, hogy megújítja a tanúsítványt, mielőtt lejár.
A Futtatás másként fiókhoz hozzárendeljük a megfelelő engedélyeket az AzureAD, Exchange Online és SharePoint eléréséhez. A kezdéshez először meg kell találnunk a fiók objectId-jét .
- Válassza a Futtatás fiókként lehetőséget az Azure Automation-fiókban.
- Jegyezze fel a Service Principal Object ID-t
Egyenként adjuk hozzá a megfelelő engedélyeket. A teljes szkriptet itt találhatja meg a Githubon, amely egyetlen futtatással beállítja az összes engedélyt.
Csatlakozás az AzureAD-hez egy Azure Runbookból
Először megadjuk a fő szolgáltatási fiókunknak a megfelelő engedélyt az AzureAD eléréséhez. Győződjön meg arról, hogy az AzureAD modul helyileg telepítve van, és nyissa meg a PowerShellt.
Először csatlakozzon az Azure AD-hez, és cserélje le a szolgáltatás egyszerű objektumazonosítóját a saját objektumazonosítójával.
# Connect to Azure AD
Connect-AzureAD
# Get the Service Principal based on the object Id
$servicePrincipalObjectId = "6dgw124-0000-1111-1337-abc123def456"Ha csak adatokat kell olvasnia az AzureAD-ből, akkor megadhatja a szolgáltatás egyszerű címtárolvasó szerepét.
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Directory Reader"}).Objectid -RefObjectId $servicePrincipalObjectId
Egy másik lehetőség, hogy globális adminisztrátorivá teszi, így teljes mértékben kezelni tudja az Active Directoryját:
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Company Administrator"}).Objectid -RefObjectId $servicePrincipalObjectIdA következő cmd-vel felsorolhatja a bérlőben elérhető összes szerepkört
Get-AzureADDirectoryRoleMost már csatlakozhat az AzureAD-hez a következő kóddal a PowerShell-runbookokban.
# Get the service principal connection details
$spConnection = Get-AutomationConnection -Name AzureRunAsConnection
# Connect AzureAd
Connect-AzureAD -TenantId $spConnection.TenantId -ApplicationId $spConnection.ApplicationID -CertificateThumbprint $spConnection.CertificateThumbprint | No-Output
# Test connection:
"User count:"
(Get-AzureADUser).countCsatlakozzon az Exchange Online-hoz egy Azure Runbookból
Egy további lépésre van szükség ahhoz, hogy a szolgáltatás főfiókjának hozzáférést biztosítson az Exchange Online-hoz. Meg kell adnunk neki az Exchange Administrator szerepkört és a megfelelő API engedélyeket.
# Connect to Azure AD
Connect-AzureAD
# Get the Service Principal based on the object Id
$servicePrincipalObjectId = "6dgw124-0000-1111-1337-abc123def456"
# Assign the Exchange Administrator Role
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Exchange Administrator"}).Objectid -RefObjectId $servicePrincipalObjectIdHa nem rendelkezik Exchange-rendszergazdai szerepkörrel a bérlőben, akkor a következő kóddal engedélyezheti:
if (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Exchange Administrator"} -eq $null) {
Enable-AzureADDirectoryRole -RoleTemplateId (Get-AzureADDirectoryRoleTemplate | Where-Object {$_.DisplayName -eq "Exchange Administrator"}).Objectid
}Az Exchange Online API engedélyekhez a következő kódot használhatjuk:
# Get the Office 365 Exchange Online App
$EXOApp = (Get-AzureADServicePrincipal -Filter "AppID eq '00000002-0000-0ff1-ce00-000000000000'")
$servicePrincipal = Get-AzureADServicePrincipal -ObjectId $servicePrincipalObjectId
# Get the roles
$permission = $EXOApp.AppRoles | Where-Object { $_.Value -eq 'Exchange.ManageAsApp' }
# Create the permission object
$apiPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $EXOApp.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{
Id = $permission.Id ;
Type = "Role"
}
}
$Application = Get-AzureADApplication | Where-Object {$_.AppId -eq $servicePrincipal.AppId}
$Application | Set-AzureADApplication -ReplyUrls 'http://localhost'
$Application | Set-AzureADApplication -RequiredResourceAccess $apiPermission
Most mindössze annyit kell tennie, hogy adminisztrátori hozzájárulást kell adnia az általunk hozzárendelt engedélyekhez.
- Nyissa meg az Azure Active Directory-t
- Válassza az Alkalmazásregisztrációk lehetőséget
- Kattintson aMinden alkalmazás elemre, és válassza ki Automation-fiókját
- Lépjen az API engedélyek oldalra
- Kattintson a Rendszergazdai hozzájárulás megadása lehetőségre
Mostantól csatlakozhat az Exchange Online-hoz az Azure Runbookban a következő PowerShell-kóddal:
# Get the service principal connection details
$spConnection = Get-AutomationConnection -Name AzureRunAsConnection
# Set your tenant name
$tenantName = "contoso.onmicrosoft.com"
# Connect to ExchangeOnline
Connect-ExchangeOnline -CertificateThumbprint $spConnection.CertificateThumbprint -AppId $spConnection.ApplicationID -Organization $tenantName
# Test connection
(Get-ExoMailbox).countCsatlakozzon a SharePointhoz/PnPOnline-hoz az Azure Runbookból
Ha használni szeretné a PnPOnline-t az Azure Runbookban, akkor hozzáférést kell adnia a SharePoint API-hoz és talán még a Graphhoz is.
Néhány engedélyt használok SharePoint-webhelyek automatikus létrehozásához és sablonok alkalmazásához az alapértelmezett mappákkal. Lehet, hogy nincs szüksége az összes engedélyre, de ez ötletet ad ezek beállításához.
# Get Office 365 SharePoint Online App
$spApp = (Get-AzureADServicePrincipal -Filter "AppID eq '00000003-0000-0ff1-ce00-000000000000'")
# Get the roles
# All sites full control
$spSitesControl = $SPApp.AppRoles | Where-Object { $_.Value -eq 'Sites.FullControl.All' }
# User read write
$spUserControl= $SPApp.AppRoles | Where-Object { $_.Value -eq 'User.ReadWrite.All' }
# TermStore
$spTermControl= $SPApp.AppRoles | Where-Object { $_.Value -eq 'TermStore.ReadWrite.All' }
# NOTE: If you format the code below nicely, and copy-paste it, it will make typeID from the Id attribute :s
$spPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $spApp.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $spSitesControl.Id;Type = "Role";},
[Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $spUserControl.Id;Type = "Role";},
[Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $spTermControl.Id ;Type = "Role";}
}
$Application = Get-AzureADApplication | Where-Object {$_.AppId -eq $servicePrincipal.AppId}
$Application | Set-AzureADApplication -ReplyUrls 'http://localhost'
$Application | Set-AzureADApplication -RequiredResourceAccess $spPermissionIsmét meg kell adnia adminisztrátori hozzájárulást az engedélyekhez:
- Nyissa meg az Azure Active Directory-t
- Válassza az Alkalmazásregisztrációk lehetőséget
- Kattintson aMinden alkalmazás elemre, és válassza ki Automation-fiókját
- Lépjen az API engedélyek oldalra
- Kattintson a Rendszergazdai hozzájárulás megadása lehetőségre
A PnPOnline-hoz való csatlakozáshoz a következő kódot használhatja az Azure Runbookban:
# Get the service principal connection details
$spConnection = Get-AutomationConnection -Name AzureRunAsConnection
# Connect to PnPOnline
Connect-PnPOnline -ClientId $spConnection.ApplicationID -Url "https://contoso.sharepoint.com" -Tenant contoso.onmicrosoft.com -Thumbprint $spConnection.CertificateThumbprint
# Test connection
(get-pnptenantsite).count
A Graph-hoz is hozzáférésre volt szükségem, ezért hozzáadtam az API engedélyeket ehhez is:
#
# Get Graph App
#
$graphApp = (Get-AzureADServicePrincipal -Filter "AppID eq '00000003-0000-0000-c000-000000000000'")
# Group read write
$graphGroupControl = $graphApp.AppRoles | Where-Object { $_.Value -eq 'Group.ReadWrite.All' }
# User read write
$graphUserControl = $graphApp.AppRoles | Where-Object { $_.Value -eq 'User.ReadWrite.All' }
# NOTE: If you format the code below nicely, and copy-paste it, it will make typeID from the Id attribute :s
$graphPermission = [Microsoft.Open.AzureAD.Model.RequiredResourceAccess]@{
ResourceAppId = $graphApp.AppId ;
ResourceAccess = [Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $graphGroupControl.Id;Type = "Role";},
[Microsoft.Open.AzureAD.Model.ResourceAccess]@{Id = $graphUserControl.Id;Type = "Role";}
}
$Application = Get-AzureADApplication | Where-Object {$_.AppId -eq $servicePrincipal.AppId}
$Application | Set-AzureADApplication -ReplyUrls 'http://localhost'
$Application | Set-AzureADApplication -RequiredResourceAccess $graphPermissionIsmét adja meg a rendszergazdai hozzájárulást az Azure AD-ben.
Ha csatlakoztatta a PnPOnline-t, akkor könnyen szerezhet hozzáférési tokent a Graphhoz való csatlakozáshoz:
# User Graph
$accessToken = Get-PnPAccessToken
$header = @{
"Content-Type" = "application/json"
Authorization = "Bearer $accessToken"
}
# Get users to test Graph
Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/" -Method Get -Headers $headerAz eredménynek az Azure Active Directory összes engedélyével a következőképpen kell kinéznie:
Az Azure Portal engedélyeit a fő szolgáltatási fiókhoz is hozzáadhatja. Ez kényelmesebb lehet, ha nem ismeri a keresett engedély pontos nevét.
Az Azure Active Directoryban:
- Válassza az Alkalmazásregisztrációk lehetőséget
- Kattintson aMinden alkalmazás elemre, és válassza ki Automation-fiókját
- Lépjen az API engedélyek oldalra
- Kattintson az Engedély hozzáadása lehetőségre
- Válassza ki a szükséges API-t, például a SharePoint
- Válassza az Alkalmazásengedélyek lehetőséget, és válassza ki a szükséges engedélyeket.
Változók használata az Azure Automation Runbooks-ban
Mielőtt hozzákezdenénk az első Runbookunk elkészítéséhez, először vessünk egy pillantást a változók használatára. Az Automation-fiókjában globális változókat határozhat meg, amelyeket használhat és módosíthat a Runbookokban. Különféle típusú változókat hozhat létre, és ezek titkosíthatók is.
Ha lefelé görget az Azure Automation-fiókjában, a változókat a Megosztott erőforrások alatt találja.
- Nyissa meg a Változók elemet
- Kattintson a Változó hozzáadása lehetőségre
- Adjon nevet a változónak
- Válassza ki a típust (karakterlánc, logikai érték, dátum, idő, egész szám, nincs megadva)
- Írja be az értéket
- Válassza a Titkosított lehetőséget, vagy sem
Azure Runbook létrehozása
Az Azure Automation-fiók beállítása és az összes hozzárendelt engedély birtokában megkezdhetjük az első Runbook létrehozását.
Az Azure Automation-fiókjában megtalálja a Runbooks elemet. Már van néhány oktatóanyag-runbook a fiókjában, de egy újat fogunk létrehozni.
- Kattintson a Runbook létrehozása lehetőségre
- Adjon értelmes nevet a runbooknak
- Válassza a PowerShell lehetőséget a Runbook típushoz, és esetleg egy leírást, amely leírja a runbook működését.
- Kattintson a Létrehozás lehetőségre
Ebben a példában egy olyan Runbookot fogunk létrehozni, amely néhány alkalmazásfiók kivételével az összes felhasználó számára letiltja az SMTP-hitelesítést. Ha többet szeretne tudni az Office 365-bérlő biztonságáról, feltétlenül olvassa el ezeket a tippeket.
Az új Runbook megnyitása alapvetően egy üres PowerShell-szkript. A bal oldalon található az elérhető CMDLet-ek áttekintése, a Runbookok listája (más runbookokat indíthat el a runbookból) és az eszközök.
Az eszközök lehetnek olyan változók, amelyeket az automatizálási fiókjában, kapcsolatokban, tárolt hitelesítő adatokban és tanúsítványokban deklarált.
Az SMTP-hitelesítés letiltásához csatlakozunk az Exchange Online-hoz. Ehhez szükségünk lesz az Azure Run As Connectionra és a bérlő nevére, amelyet hozzáadtam egy változóhoz.
Mostantól a következő kóddal tudunk csatlakozni az Exchange Online-hoz, ha az elején leírtak szerint beállította az engedélyeket:
# Get the automation account and tenant name
$spConnection = Get-AutomationConnection -Name 'AzureRunAsConnection'
$tenantName = Get-AutomationVariable -Name 'tenantName'
# Connect to ExchangeOnline
Connect-ExchangeOnline -CertificateThumbprint $spConnection.CertificateThumbprint -AppId $spConnection.ApplicationID -Organization $tenantName
$exclusions = @("sa_signatureTool",
"sa_otherImportantTool"
)
$mailboxes = Get-CASMailbox | Where-Object {$_.SmtpClientAuthenticationDisabled -ne $true -and $_.Identity -notin $exclusions}
$mailboxes
foreach ($mailbox in $mailboxes) {
try {
Set-CASMailbox -Identity $mailbox.Identity -SmtpClientAuthenticationDisabled $true
[PSCustomObject]@{
UserPrincipalName = $mailbox.Identity
SmtpClientAuthenticationDisabled = $true
}
}
catch {
[PSCustomObject]@{
UserPrincipalName = $mailbox.Identity
SmtpClientAuthenticationDisabled = $false
}
}
}
# Close the connection
Disconnect-ExchangeOnline -Confirm:$falseA runbook közzététele előtt először tesztelheti a tesztablakban. Ez nagyon hasznos a meglévő Runbookok szerkesztésekor, tesztelheti a szerkesztést, mielőtt közzétenné, és az élő verzió továbbra is működik.
Azure Automation ütemezése
Ütemezheti a runbookot, hogy az automatikusan fusson egy meghatározott időközönként. A runbook közzététele után kattintson a Link az ütemezéshez lehetőségre
Az Azure Runbook ütemezésének kiválasztásához (vagy létrehozásához) kattintson az Ütemezés összekapcsolása elemre a runbookhoz. Egy ütemezés több runbookhoz is használható az Azure Automation-fiókban.
Meg kell alkotnunk az első ütemtervet:
- Kattintson az Ütemezés hozzáadása lehetőségre
- Adjon nevet az ütemtervének
- Állítsa be a kezdés dátumát és időpontját
- Legyen ismétlődő (vagy futtassa csak egyszer)
- Kattintson a Létrehozás lehetőségre
Az ütemezés létrehozása után kattintson az OK gombra az ütemezés alkalmazásához a runbookra. Ha akarja, több ütemezést is hozzáadhat a Runbookhoz.
A runbooknak most automatikusan futnia kell a létrehozott ütemezés szerint. A runbook áttekintő képernyőjén láthatja a feladatok áttekintését.
Becsomagolás
Amikor runbookokat hoz létre, mindig győződjön meg arról, hogy a feladatok befejezésekor zárja be a kapcsolatokat. Ellenkező esetben előfordulhat, hogy például az összes Exchange Online-kapcsolatot használja.
Remélem, ez a cikk segített az Azure Runbookok létrehozásának és/vagy az Office 365 hitelesítésének beállításában.
Ha bármilyen kérdése van, csak írjon megjegyzést alább.











