Weboldal keresés

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.

  1. Jelentkezzen be az Azure Portalra

    Nyissa meg a https://portal.azure.com/ webhelyet, és jelentkezzen be az Office 365 hitelesítő adataival.

  2. 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

  3. 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.

  4. Nyissa meg Azure Automation-fiókját

    Válassza ki az új automatizálási fiókját a létrehozása után.

  5. 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 .

  1. Válassza a Futtatás fiókként lehetőséget az Azure Automation-fiókban.
  2. 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 $servicePrincipalObjectId

A következő cmd-vel felsorolhatja a bérlőben elérhető összes szerepkört

Get-AzureADDirectoryRole

Most 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).count

Csatlakozzon 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 $servicePrincipalObjectId

Ha 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.

  1. Nyissa meg az Azure Active Directory-t
  2. Válassza az Alkalmazásregisztrációk lehetőséget
  3. Kattintson aMinden alkalmazás elemre, és válassza ki Automation-fiókját
  4. Lépjen az API engedélyek oldalra
  5. 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).count

Csatlakozzon 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 $spPermission

Ismét meg kell adnia adminisztrátori hozzájárulást az engedélyekhez:

  1. Nyissa meg az Azure Active Directory-t
  2. Válassza az Alkalmazásregisztrációk lehetőséget
  3. Kattintson aMinden alkalmazás elemre, és válassza ki Automation-fiókját
  4. Lépjen az API engedélyek oldalra
  5. 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 $graphPermission

Ismé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 $header

Az 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:

  1. Válassza az Alkalmazásregisztrációk lehetőséget
  2. Kattintson aMinden alkalmazás elemre, és válassza ki Automation-fiókját
  3. Lépjen az API engedélyek oldalra
  4. Kattintson az Engedély hozzáadása lehetőségre
  5. Válassza ki a szükséges API-t, például a SharePoint
  6. 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.

  1. Nyissa meg a Változók elemet
  2. Kattintson a Változó hozzáadása lehetőségre
  3. Adjon nevet a változónak
  4. Válassza ki a típust (karakterlánc, logikai érték, dátum, idő, egész szám, nincs megadva)
  5. Írja be az értéket
  6. 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.

  1. Kattintson a Runbook létrehozása lehetőségre
  2. Adjon értelmes nevet a runbooknak
  3. 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.
  4. 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:$false

A 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:

  1. Kattintson az Ütemezés hozzáadása lehetőségre
  2. Adjon nevet az ütemtervének
  3. Állítsa be a kezdés dátumát és időpontját
  4. Legyen ismétlődő (vagy futtassa csak egyszer)
  5. 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.

Kapcsolódó cikkek