So verwenden Sie Azure Automation – [Vollständige Anleitung]
Azure Automation ist eines der beliebtesten Tools zum Ausführen von PowerShell-Skripten in der Cloud. Mit den Runbooks können Sie nicht nur Ihre Azure-Umgebung verwalten, sondern beispielsweise auch Ihren Microsoft Office 365-Mandanten.
Automatisierung ist ein wichtiger Bestandteil der IT, und als Systemadministrator sollten Sie danach streben, die meisten Ihrer täglichen/manuellen Aufgaben zu automatisieren. Das Schreiben eines Skripts kann am Anfang einige Zeit in Anspruch nehmen, wird Ihnen aber auf lange Sicht viel Zeit sparen.
In diesem Artikel erkläre ich, wie Sie Ihr Azure Automation-Konto einrichten und Ihr erstes PowerShell-Runbook in Azure erstellen.
Azure-Automatisierungsanforderungen
Es gibt nur wenige Voraussetzungen, um mit der Ausführung Ihres PowerShell-Skripts in Azure zu beginnen:
- Azure-Abonnement (Pay-as-you-go)
- Azure Automation-Konto
Sie können mit einer kostenlosen Testversion des Azure-Abonnements beginnen, aber ein Pay-as-you-Abonnement ist auch nicht wirklich teuer.
Beratung
Ab September 2023 können wir die RunAs-Konten nicht mehr verwenden. Stellen Sie sicher, dass Sie Ihre Runbooks vor diesem Datum migrieren, um verwaltete Identitäten für die Authentifizierung zu verwenden. Lesen Sie in diesem Artikel alles über verwaltete Identitäten.
Preise für Azure Automation
Die Preise für Azure Automation basieren auf der Anzahl der Minuten, die ein Auftrag ausgeführt wird. Mit jedem Abonnement erhalten Sie monatlich 500 Minuten Joblaufzeit und 744 Stunden für die Beobachter kostenlos.
- Job run time
500 Minuten
- Watchers
744 Stunden
Um Ihnen eine Vorstellung zu geben: Ein einfaches Skript, das den MFA-Status aller Benutzer in meinem Mandanten überprüft, dauert nur 1 Minute. Das Erstellen einer SharePoint-Teamwebsite und das Anwenden einer Vorlage darauf dauert insgesamt 30 Sekunden.
Mit den 500 Freiminuten sollten Sie also in der Lage sein, die meisten Ihrer täglichen Aufgaben zu automatisieren ? Und jede weitere Stunde kostet nur 0,12 $.
Erste Schritte mit Azure Automation
Um mit Azure Automation zu beginnen, müssen wir ein Azure Automation-Konto erstellen und die richtigen PowerShell-Module installieren.
Melden Sie sich beim Azure-Portal an
Gehen Sie zu https://portal.azure.com/ und melden Sie sich mit Ihren Office 365-Anmeldeinformationen an.
Gehen Sie zu den Automatisierungskontendiensten
Verwenden Sie die Suchleiste, um die Automatisierungskontendienste zu finden
Erstellen Sie ein neues Automatisierungskonto
Klicken Sie auf Erstellen, um ein neues Automatisierungskonto zu erstellen.
- Geben Sie Ihrem Automatisierungskonto einen Namen
- Wählen Sie Ihr Abonnement aus (kostenlose Testversion oder nutzungsbasierte Bezahlung)
- Erstellen Sie eine Ressourcengruppe oder wählen Sie sie aus
Es kann einige Minuten dauern, bis die Ressourcengruppe erstellt ist.Eröffnen Sie Ihr Azure Automation-Konto
Wählen Sie Ihr neues Automatisierungskonto aus, nachdem es erstellt wurde.
PowerShell-Module installieren
Bevor wir mit der Erstellung unseres ersten Runbooks beginnen können, müssen wir zunächst die erforderlichen PowerShell-Module installieren.
Wählen Sie Module aus und klicken Sie auf Galerie durchsuchen
Installieren Sie die folgenden Module:
- PnP.PowerShell
- AzureAD
- ExchangeOnlineManagement
Wir haben nun unser Azure Automation-Konto erstellt und können mit der Erstellung unseres ersten Runbooks beginnen.
Authentifizierung in Azure Runbook bei Verwendung von MFA
Die Authentifizierung in Azure Runbooks ist immer eine kleine Herausforderung. Sie könnten die Azure-Dienste mit bedingten Zugriffsregeln von MFA ausschließen, aber dazu müssten Sie über alle IP-Adressen auf dem Laufenden bleiben.
Eine andere Möglichkeit wäre, das Dienstkonto von MFA auszuschließen, aber das ist keine bewährte Vorgehensweise. Dienstkonten verfügen möglicherweise über globale Administratorrechte, daher sollten Sie diese Konten ordnungsgemäß schützen.
Wie authentifizieren Sie sich also in einem Azure Runbook bei AzureAD oder Exchange Online? Nun, wir können das Azure Run As-Konto verwenden.
Bei der Erstellung unseres Azure Automation-Kontos haben wir automatisch auch ein Als Konto ausführen erstellt. Das „Run As“-Konto bietet Authentifizierung für Azure Runbooks, Automatisierung und die Verwaltung von Ressourcen im Azure Resource Manager mithilfe eines selbstsignierten Zertifikats.
Warnung
Ab September 2023 können wir die RunAs-Konten nicht mehr verwenden. Stellen Sie sicher, dass Sie Ihre Runbooks vor diesem Datum migrieren, um verwaltete Identitäten für die Authentifizierung zu verwenden. Lesen Sie in diesem Artikel alles über verwaltete Identitäten.
Notiz
Das Zertifikat ist nur ein Jahr gültig. Sie müssen sicherstellen, dass Sie das Zertifikat erneuern, bevor es abläuft.
Wir werden dem ausführenden Konto die richtigen Berechtigungen für den Zugriff auf AzureAD, Exchange Online und SharePoint zuweisen. Um zu beginnen, müssen wir zunächst die objectId des Kontos finden.
- Wählen Sie Als Konten ausführen in Ihrem Azure Automation-Konto aus.
- Notieren Sie sich die Service Principal Object ID
Wir werden nach und nach die richtigen Berechtigungen hinzufügen. Das vollständige Skript finden Sie hier auf meinem Github, das alle Berechtigungen in einem Durchlauf festlegt.
Herstellen einer Verbindung zu AzureAD über ein Azure Runbook
Wir erteilen zunächst unserem Dienstprinzipalkonto die richtige Berechtigung für den Zugriff auf AzureAD. Stellen Sie sicher, dass das AzureAD-Modul lokal installiert ist und öffnen Sie PowerShell.
Stellen Sie zunächst eine Verbindung zu Azure AD her und ersetzen Sie die Objekt-ID des Dienstprinzipals durch Ihre eigene Objekt-ID.
# Connect to Azure AD
Connect-AzureAD
# Get the Service Principal based on the object Id
$servicePrincipalObjectId = "6dgw124-0000-1111-1337-abc123def456"Wenn Sie nur Daten aus AzureAD lesen müssen, können Sie dem Dienstprinzipal die Rolle „Verzeichnisleser“ zuweisen.
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Directory Reader"}).Objectid -RefObjectId $servicePrincipalObjectId
Eine andere Möglichkeit besteht darin, es zum globalen Administrator zu machen, damit es Ihr Active Directory vollständig verwalten kann:
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Company Administrator"}).Objectid -RefObjectId $servicePrincipalObjectIdMit dem folgenden cmd können Sie alle verfügbaren Rollen in Ihrem Mandanten auflisten
Get-AzureADDirectoryRoleSie können jetzt mit dem folgenden Code in Ihren PowerShell-Runbooks eine Verbindung zu AzureAD herstellen.
# 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).countStellen Sie über ein Azure Runbook eine Verbindung zu Exchange Online her
Es ist ein zusätzlicher Schritt erforderlich, um dem Dienstprinzipalkonto Zugriff auf Exchange Online zu gewähren. Wir müssen ihm die Exchange-Administratorrolle und die entsprechenden API-Berechtigungen zuweisen.
# 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 $servicePrincipalObjectIdWenn Sie in Ihrem Mandanten nicht über die Exchange-Administratorrolle verfügen, können Sie sie mit dem folgenden Code aktivieren:
if (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Exchange Administrator"} -eq $null) {
Enable-AzureADDirectoryRole -RoleTemplateId (Get-AzureADDirectoryRoleTemplate | Where-Object {$_.DisplayName -eq "Exchange Administrator"}).Objectid
}Für die Exchange Online API-Berechtigungen können wir den folgenden Code verwenden:
# 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
Jetzt müssen Sie nur noch die Administratoreinwilligung für die von uns zugewiesenen Berechtigungen erteilen.
- Öffnen Sie Ihr Azure Active Directory
- Wählen Sie App-Registrierungen
- Klicken Sie auf Alle Anwendungen und wählen Sie Ihr Automation-Konto aus
- Gehen Sie zu API-Berechtigungen
- Klicken Sie auf Administratoreinwilligung erteilen
Sie können jetzt in Ihrem Azure Runbook mit dem folgenden PowerShell-Code eine Verbindung zu Exchange Online herstellen:
# 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).countStellen Sie über Azure Runbook eine Verbindung zu SharePoint/PnPOnline her
Wenn Sie PnPOnline in Ihrem Azure Runbook verwenden möchten, müssen Sie Zugriff auf die SharePoint-API und möglicherweise sogar Graph gewähren.
Ich verwende einige Berechtigungen, um automatisch SharePoint-Websites zu erstellen und Vorlagen mit Standardordnern anzuwenden. Möglicherweise benötigen Sie nicht alle Berechtigungen, aber dies gibt Ihnen eine Vorstellung davon, wie Sie diese festlegen.
# 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 $spPermissionAuch hier müssen Sie die Zustimmung des Administrators für die Berechtigungen erteilen:
- Öffnen Sie Ihr Azure Active Directory
- Wählen Sie App-Registrierungen
- Klicken Sie auf Alle Anwendungen und wählen Sie Ihr Automation-Konto aus
- Gehen Sie zu API-Berechtigungen
- Klicken Sie auf Administratoreinwilligung erteilen
Um eine Verbindung zu PnPOnline herzustellen, können Sie den folgenden Code in Ihrem Azure Runbook verwenden:
# 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
Ich brauchte auch Zugriff auf Graph, also fügte ich auch die API-Berechtigungen dafür hinzu, um:
#
# 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 $graphPermissionErteilen Sie erneut die Zustimmung des Administrators im Azure AD.
Wenn Sie PnPOnline verbunden haben, können Sie ganz einfach ein Zugriffstoken erhalten, um eine Verbindung zu Graph herzustellen:
# 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 $headerDas Ergebnis mit allen Berechtigungen im Azure Active Directory sollte wie folgt aussehen:
Sie können die Berechtigungen auch im Azure-Portal zu Ihrem Dienstprinzipalkonto hinzufügen. Dies ist möglicherweise praktischer, wenn Sie den genauen Berechtigungsnamen, nach dem Sie suchen, nicht kennen.
Im Azure Active Directory:
- Wählen Sie App-Registrierungen
- Klicken Sie auf Alle Anwendungen und wählen Sie Ihr Automation-Konto aus
- Gehen Sie zu API-Berechtigungen
- Klicken Sie auf Berechtigung hinzufügen
- Wählen Sie die API aus, die Sie benötigen, zum Beispiel SharePoint
- Wählen Sie Anwendungsberechtigungen und wählen Sie die Berechtigungen aus, die Sie benötigen.
Verwenden von Variablen in Azure Automation Runbooks
Bevor wir mit der Erstellung unseres ersten Runbooks beginnen, werfen wir zunächst einen Blick auf die Verwendung von Variablen. Sie können in Ihrem Automation-Konto globale Variablen definieren, die Sie in Ihren Runbooks verwenden und ändern können. Sie können verschiedene Arten von Variablen erstellen und diese auch verschlüsseln.
Wenn Sie in Ihrem Azure Automation-Konto nach unten scrollen, finden Sie die Variablen unter Gemeinsam genutzte Ressourcen.
- Öffnen Sie Variablen
- Klicken Sie auf Variable hinzufügen
- Geben Sie Ihrer Variable einen Namen
- Wählen Sie den Typ (String, Boolean, DateTime, Integer, Not Specified)
- Geben Sie den Wert ein
- Wählen Sie Verschlüsselt oder nicht
Erstellen eines Azure Runbooks
Nachdem das Azure Automation-Konto eingerichtet und alle Berechtigungen zugewiesen wurden, können wir mit der Erstellung unseres ersten Runbooks beginnen.
In Ihrem Azure Automation-Konto finden Sie Runbooks. In Ihrem Konto sind bereits einige Tutorial-Runbooks vorhanden, wir werden jedoch ein neues erstellen.
- Klicken Sie auf Runbook erstellen
- Geben Sie Ihrem Runbook einen aussagekräftigen Namen
- Wählen Sie PowerShell als Runbook-Typ und möglicherweise eine Beschreibung aus, die beschreibt, was das Runbook tut.
- Klicken Sie auf Erstellen
In diesem Beispiel erstellen wir ein Runbook, das die SMTP-Authentifizierung für alle Benutzer außer einigen Anwendungskonten deaktiviert. Wenn Sie mehr über die Sicherung Ihres Office 365-Mieters erfahren möchten, lesen Sie unbedingt diese Tipps.
Ihr neues Runbook wird geöffnet und ist im Grunde ein leeres PowerShell-Skript. Auf der linken Seite finden Sie eine Übersicht der verfügbaren CMDLets, eine Liste Ihrer Runbooks (Sie können andere Runbooks aus Ihrem Runbook heraus auslösen) und Assets.
Bei den Assets kann es sich um Variablen handeln, die Sie in Ihrem Automatisierungskonto deklariert haben, um Verbindungen, gespeicherte Anmeldeinformationen und Zertifikate.
Um die SMTP-Authentifizierung zu deaktivieren, stellen wir eine Verbindung zu Exchange Online her. Dazu benötigen wir die Azure Run As-Verbindung und den Mandantennamen, den ich einer Variablen hinzugefügt habe.
Wir können uns nun mit dem folgenden Code mit Exchange Online verbinden, wenn Sie die Berechtigungen wie am Anfang beschrieben festgelegt haben:
# 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:$falseBevor Sie das Runbook veröffentlichen, können Sie es zunächst im Testbereich testen. Dies ist sehr nützlich, wenn Sie vorhandene Runbooks bearbeiten. Sie können Ihre Bearbeitung testen, bevor Sie sie veröffentlichen, sodass die Live-Version weiterhin funktioniert.
Azure Automation-Zeitplan
Sie können Ihr Runbook so planen, dass es automatisch in einem festgelegten Intervall ausgeführt wird. Nachdem Sie Ihr Runbook veröffentlicht haben, klicken Sie auf Link zum Zeitplan
Klicken Sie auf Einen Zeitplan verknüpfen mit Ihrem Runbook, um einen Zeitplan für Ihr Azure Runbook auszuwählen (oder zu erstellen). Ein Zeitplan kann für mehrere Runbooks in Ihrem Azure Automation-Konto verwendet werden.
Wir müssen unseren ersten Zeitplan erstellen:
- Klicken Sie auf Zeitplan hinzufügen
- Geben Sie Ihrem Zeitplan einen Namen
- Legen Sie Startdatum und -uhrzeit fest
- Machen Sie es wiederkehrend (oder führen Sie es nur einmal aus)
- Klicken Sie auf Erstellen
Nachdem Sie den Zeitplan erstellt haben, klicken Sie auf „OK“, um den Zeitplan auf Ihr Runbook anzuwenden. Sie können Ihrem Runbook bei Bedarf mehrere Zeitpläne hinzufügen.
Ihr Runbook sollte nun automatisch gemäß dem von Ihnen erstellten Zeitplan ausgeführt werden. Eine Übersicht der Jobs sehen Sie im Übersichtsbildschirm des Runbooks.
Zusammenfassung
Stellen Sie beim Erstellen von Runbooks immer sicher, dass Sie die Verbindungen schließen, wenn die Aufträge abgeschlossen sind. Andernfalls könnten Sie am Ende beispielsweise alle Verbindungen zu Exchange Online nutzen.
Ich hoffe, dieser Artikel hat Ihnen dabei geholfen, mit der Erstellung Ihrer Azure Runbooks und/oder der Einrichtung der Authentifizierung für Office 365 zu beginnen.
Wenn Sie Fragen haben, hinterlassen Sie einfach unten einen Kommentar.











