Azure Otomasyonu nasıl kullanılır - [Tam Kılavuz]
Azure Otomasyonu, PowerShell betiklerini bulutta çalıştırmak için en popüler araçlardan biridir. Runbook'larla yalnızca Azure ortamınızı değil aynı zamanda Microsoft Office 365 kiracınızı da yönetebilirsiniz.
Otomasyon BT'nin önemli bir parçasıdır ve bir Sistem Yöneticisi olarak günlük/manuel görevlerinizin çoğunu otomatikleştirmeye çalışmalısınız. Senaryo yazmak başlangıçta biraz zaman alabilir ancak uzun vadede size çok zaman kazandıracaktır.
Bu yazımda Azure Otomasyon hesabınızı nasıl kuracağınızı ve Azure’da ilk PowerShell runbook’unuzu nasıl oluşturacağınızı anlatacağım.
Azure Otomasyon Gereksinimleri
PowerShell betiğinizi Azure'da çalıştırmaya başlamanız için yalnızca birkaç gereksinim vardır:
- Azure aboneliği (kullandıkça öde)
- Azure Otomasyon Hesabı
Azure Aboneliğinin ücretsiz deneme sürümüyle başlayabilirsiniz ancak kullandıkça öde aboneliği de pek pahalı değildir.
Tavsiye
Eylül 2023'ten itibaren RunAs hesaplarını artık kullanamayacağız. Bu tarihten önce kimlik doğrulama için yönetilen kimlikleri kullanacak şekilde runbook'larınızı geçirdiğinizden emin olun. Bu makalede yönetilen kimlikler hakkında her şeyi okuyun.
Azure Otomasyonu Fiyatlandırması
Azure Otomasyonunun fiyatlandırması bir işin çalıştırıldığı dakika sayısına göre belirlenir. Her abonelikle, ayda 500 dakikalık iş çalıştırma süresi ve izleyiciler için 744 saat ücretsiz olarak yararlanırsınız.
- Job run time
500 dakika
- Watchers
744 saat
Size bir fikir vermek gerekirse, kiracımdaki tüm kullanıcıların MFA durumunu kontrol eden basit bir komut dosyası yalnızca 1 dakika sürer. SharePoint ekip sitesi oluşturmak ve bu siteye şablon uygulamak toplamda 30 saniye sürer.
Yani 500 ücretsiz dakikayla günlük görevlerinizin çoğunu otomatik hale getirebilmelisiniz ? Ve her saatin daha fazlasının maliyeti yalnızca 0,12 ABD dolarıdır.
Azure Otomasyonunu kullanmaya başlama
Azure Otomasyonuna başlamak için bir Azure Otomasyon hesabı oluşturmamız ve doğru PowerShell modüllerini yüklememiz gerekecek.
Azure Portal'da oturum açın
https://portal.azure.com/ adresine gidin ve Office 365 kimlik bilgilerinizle oturum açın.
Otomasyon hesapları hizmetlerine gidin
Otomasyon hesapları hizmetlerini bulmak için arama çubuğunu kullanın
Yeni bir otomasyon hesabı oluşturun
Yeni bir otomasyon hesabı oluşturmak için Oluştur 'u tıklayın.
- Otomasyon hesabınıza bir ad verin
- Aboneliğinizi seçin (ücretsiz deneme veya kullandıkça öde)
- Bir kaynak grubu oluşturun veya seçin
Kaynak grubunun oluşturulması birkaç dakika sürebilir.Azure Otomasyon Hesabınızı açın
Yeni otomasyon hesabınızı oluşturulduktan sonra seçin.
PowerShell modüllerini yükleyin
İlk runbook'umuzu oluşturmaya başlamadan önce gerekli PowerShell modüllerini yüklememiz gerekir.
Modülleri seçin ve Galeriye Göz At
Aşağıdaki modülleri yükleyin:
- PnP.PowerShell
- AzureAD
- ExchangeOnlineManagement
Artık Azure Otomasyon hesabımızı oluşturduk ve ilk Runbook'umuzu oluşturmaya başlayabiliriz.
MFA kullanırken Azure Runbook'ta kimlik doğrulama
Azure Runbooks'ta kimlik doğrulama her zaman biraz zorludur. Azure hizmetlerini koşullu erişim kurallarıyla MFA'dan hariç tutabilirsiniz ancak bu, tüm IP Adreslerini güncel tutmanızı gerektirir.
Diğer bir seçenek de hizmet hesabını MFA'dan hariç tutmak olabilir ancak bu en iyi uygulama değildir. Hizmet hesaplarının genel yönetici hakları olabilir, bu nedenle bu hesapları uygun şekilde korumak istersiniz.
Peki bir Azure Runbook'ta AzureAD veya Exchange Online'da kimlik doğrulamasını nasıl yaparsınız? Azure Farklı Çalıştır hesabını kullanabiliriz.
Azure Otomasyon hesabımızın oluşturulması sırasında otomatik olarak bir Farklı çalıştır hesabı da oluşturduk. Farklı Çalıştır hesabı, kendinden imzalı bir sertifika kullanarak Azure Runbook'ları, Otomasyon ve Azure Resource Manager'daki kaynakların yönetilmesi için kimlik doğrulaması sağlar.
Uyarı
Eylül 2023'ten itibaren RunAs hesaplarını artık kullanamayacağız. Bu tarihten önce kimlik doğrulama için yönetilen kimlikleri kullanacak şekilde runbook'larınızı geçirdiğinizden emin olun. Bu makalede yönetilen kimlikler hakkında her şeyi okuyun.
Not
Sertifika yalnızca bir yıl geçerlidir. Sertifikanın süresi dolmadan yenilediğinizden emin olmanız gerekir.
AzureAD, Exchange Online ve SharePoint'e erişim için Farklı Çalıştır hesabına doğru izinleri atayacağız. Başlamak için öncelikle hesabın objectId değerini bulmamız gerekiyor.
- Azure Otomasyon Hesabınızda Hesap olarak çalıştır'ı seçin.
- Hizmet Sorumlusu Nesne Kimliğini not edin
Doğru izinleri tek tek ekleyeceğiz. Tüm izinleri tek çalıştırmada ayarlayacak betiğin tamamını Github'ımda bulabilirsiniz.
Azure Runbook'tan AzureAD'ye bağlanma
Öncelikle Hizmet Sorumlusu hesabımıza AzureAD'e erişim için doğru izni vereceğiz. AzureAD modülünün yerel olarak kurulu olduğundan ve PowerShell'i açtığınızdan emin olun.
Öncelikle Azure AD'ye bağlanın ve hizmet sorumlusu nesne kimliğini kendi nesne kimliğinizle değiştirin.
# Connect to Azure AD
Connect-AzureAD
# Get the Service Principal based on the object Id
$servicePrincipalObjectId = "6dgw124-0000-1111-1337-abc123def456"Yalnızca AzureAD'den veri okumanız gerekiyorsa hizmet sorumlusuna Dizin Okuyucu rolünü verebilirsiniz.
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Directory Reader"}).Objectid -RefObjectId $servicePrincipalObjectId
Başka bir seçenek de onu Genel Yönetici yapmaktır, böylece Active Directory'nizi tam olarak yönetebilir:
Add-AzureADDirectoryRoleMember -ObjectId (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Company Administrator"}).Objectid -RefObjectId $servicePrincipalObjectIdKiracınızdaki mevcut tüm rolleri aşağıdaki cmd ile listeleyebilirsiniz
Get-AzureADDirectoryRoleArtık PowerShell Runbook'larınızda aşağıdaki kodla AzureAD'e bağlanabilirsiniz.
# 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).countAzure Runbook'tan Exchange Online'a bağlanma
Exchange Online'a hizmet sorumlusu hesabına erişim izni vermek için fazladan bir adım gerekir. Ona Exchange Yöneticisi rolünü ve uygun API izinlerini vermemiz gerekiyor.
# 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 $servicePrincipalObjectIdKiracınızda Exchange Yöneticisi rolünüz yoksa aşağıdaki kodla etkinleştirebilirsiniz:
if (Get-AzureADDirectoryRole | where-object {$_.DisplayName -eq "Exchange Administrator"} -eq $null) {
Enable-AzureADDirectoryRole -RoleTemplateId (Get-AzureADDirectoryRoleTemplate | Where-Object {$_.DisplayName -eq "Exchange Administrator"}).Objectid
}Exchange Online API izinleri için aşağıdaki kodu kullanabiliriz:
# 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
Şimdi tek yapmanız gereken, atadığımız izinler için yönetici izni vermek.
- Azure Active Directory'nizi açın
- Uygulama kayıtları'nı seçin
- Tüm uygulamalar'ı tıklayın ve Otomasyon hesabınızı seçin
- API İzinleri 'ne gidin
- Yönetici izni ver'i tıklayın
Artık aşağıdaki PowerShell koduyla Azure Runbook'unuzda Exchange Online'a bağlanabilirsiniz:
# 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).countAzure Runbook'tan SharePoint/PnPOnline'a bağlanın
Azure Runbook'unuzda PnPOnline'ı kullanmak istiyorsanız SharePoint API'ye ve hatta Graph'a erişim izni vermeniz gerekir.
Otomatik olarak SharePoint siteleri oluşturmak ve şablonları varsayılan klasörlerle uygulamak için birkaç izin kullanıyorum. Tüm izinlere ihtiyacınız olmayabilir, ancak bu size izinleri ayarlama konusunda bir fikir verir.
# 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İzinler için yine yönetici izni vermeniz gerekecek:
- Azure Active Directory'nizi açın
- Uygulama kayıtları'nı seçin
- Tüm uygulamalar'ı tıklayın ve Otomasyon hesabınızı seçin
- API İzinleri 'ne gidin
- Yönetici izni ver'i tıklayın
PnPOnline'a bağlanmak için Azure Runbook'unuzda aşağıdaki kodu kullanabilirsiniz:
# 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
Ayrıca Graph'a erişmem gerekiyordu, dolayısıyla bunun için de API izinlerini ekledim:
#
# 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 $graphPermissionYine Azure AD'de yönetici izni verin.
PnPOnline'a bağlandıysanız Graph'a bağlanmak için kolayca bir erişim belirteci alabilirsiniz:
# 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 $headerAzure Active Directory'deki tüm izinlere sahip sonuç şöyle görünmelidir:
Azure Portal'daki izinleri hizmet sorumlusu hesabınıza da ekleyebilirsiniz. Aradığınız izin adını tam olarak bilmiyorsanız bu daha kullanışlı olabilir.
Azure Active Directory'de:
- Uygulama kayıtları'nı seçin
- Tüm uygulamalar'ı tıklayın ve Otomasyon hesabınızı seçin
- API İzinleri'ne gidin
- İzin ekle'yi tıklayın
- İhtiyacınız olan API'yi seçin; örneğin, SharePoint
- Uygulama İzinleri'ni seçin ve ihtiyacınız olan izinleri seçin.
Azure Otomasyon Runbook'larında değişkenleri kullanma
İlk Runbook'umuzu oluşturmaya başlamadan önce değişkenlerin kullanımına bir göz atacağız. Otomasyon hesabınızda Runbook'larınızda kullanabileceğiniz ve değiştirebileceğiniz genel değişkenler tanımlayabilirsiniz. Farklı türde değişkenler oluşturabilirsiniz ve bunlar şifrelenebilir.
Azure Otomasyonu hesabınızda aşağı doğru kaydırırsanız değişkenleri Paylaşılan Kaynaklar altında bulacaksınız.
- Değişkenler'i açın
- Değişken ekle'yi tıklayın
- Değişkeninize bir ad verin
- Türünü seçin (Dize, Boolean, DateTime, Tamsayı, Belirtilmemiş)
- Değeri girin
- Şifreli'yi seçin veya seçmeyin
Azure Runbook'u oluşturma
Azure Otomasyonu hesabı kurulumu ve atanan tüm izinler ile ilk Runbook'umuzu oluşturmaya başlayabiliriz.
Azure Otomasyonu hesabınızda Runbook'ları bulacaksınız. Hesabınızda zaten birkaç Eğitim runbook'u var ancak yeni bir tane oluşturacağız.
- Runbook Oluştur'u tıklayın
- Runbook'unuza anlamlı bir ad verin
- Runbook türü için PowerShell'i seçin ve runbook'un ne yaptığını açıklayan bir açıklama da olabilir.
- Oluştur'u tıklayın
Bu örnekte, birkaç uygulama hesabı dışında tüm kullanıcılar için SMTP Kimlik Doğrulamasını devre dışı bırakan bir Runbook oluşturacağız. Office 365 kiracınızın güvenliğini sağlama hakkında daha fazla bilgi edinmek istiyorsanız bu ipuçlarını okuduğunuzdan emin olun.
Yeni Runbook'unuz açılır cadı temelde boş bir PowerShell betiğidir. Sol tarafta, kullanılabilir CMDlet'lere genel bir bakış, Runbook'larınızın bir listesi (diğer runbook'ları runbook'unuzdan tetikleyebilirsiniz) ve varlıklar bulacaksınız.
Varlıklar, otomasyon hesabınızda, bağlantılarınızda, depolanan kimlik bilgilerinde ve sertifikalarınızda bildirdiğiniz değişkenler olabilir.
SMTP Kimlik Doğrulamasını devre dışı bırakmak için Exchange Online'a bağlanacağız. Bunu yapmak için Azure Farklı Çalıştır Bağlantısına ve bir değişkene eklediğim kiracı adına ihtiyacımız olacak.
İzinleri başta anlatıldığı gibi ayarladıysanız artık aşağıdaki kodla Exchange Online'a bağlanabiliyoruz:
# 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:$falseRunbook'u yayımlamadan önce ilk olarak Test Bölmesinde test edebilirsiniz. Bu, mevcut Runbook'ları düzenlerken gerçekten faydalıdır; düzenlemenizi yayınlamadan önce test edebilir ve canlı sürümün çalışır durumda kalmasını sağlayabilirsiniz.
Azure Otomasyon Zamanlaması
Runbook'unuzu belirli bir aralıkta otomatik olarak çalışacak şekilde zamanlayabilirsiniz. Runbook'unuzu yayınladıktan sonra Zamanlamaya Bağlantı Ver'i tıklayın
Azure Runbook'unuz için bir zamanlama seçmek (veya oluşturmak) üzere Bir zamanlamayı runbook'unuza bağlayın'a tıklayın. Azure Otomasyonu hesabınızdaki birden çok runbook için bir zamanlama kullanılabilir.
İlk programımızı oluşturmalıyız:
- Plan ekle'yi tıklayın
- Programınıza bir ad verin
- Başlangıç tarihini ve saatini ayarlayın
- Yinelenen yapın (veya yalnızca bir kez çalıştırın)
- Oluştur'u tıklayın
Zamanlamayı oluşturduktan sonra zamanlamayı runbook'unuza uygulamak için Tamam'a tıklayın. İsterseniz Runbook'unuza birden fazla zamanlama ekleyebilirsiniz.
Runbook'unuz artık oluşturduğunuz zamanlamaya göre otomatik olarak çalışmalıdır. Runbook'un genel bakış ekranında işlere ilişkin bir genel bakış göreceksiniz.
Kapanış
Runbook'lar oluştururken her zaman işler bittiğinde bağlantıları kapattığınızdan emin olun. Aksi takdirde, örneğin Exchange Online'a olan tüm bağlantılarınızı kullanmak zorunda kalabilirsiniz.
Bu makalenin Azure Runbook'larınızı oluşturmaya ve/veya Office 365'te kimlik doğrulamayı ayarlamaya başlamanıza yardımcı olacağını umuyorum.
Herhangi bir sorunuz varsa aşağıya bir yorum bırakmanız yeterli.











