SharePoint Sitelerinin Yaşam Döngüsünü Yönetmek için Power Automate ve Azure Otomasyonunu Kullanma


SharePoint'in Yayılması Gerçek Bir Sorundur

İyi yönetilen bir Microsoft 365 ortamının önemli bir yönü, SharePoint siteleri (ve buna bağlı olarak Microsoft Teams) gibi nesnelerin artık ihtiyaç duyulmadığında kaldırılmasını sağlamaktır. Sitelerin yaşam döngüsünün nasıl yönetileceğini düşünmeden Microsoft 365 kiracısını dağıtan birçok kuruluşla konuştum. Sonuç genellikle pişmanlıktır. Sorun genellikle ilk birkaç yılda ortaya çıkmasa da, zamanla kiracı yöneticileri, kiracılarındaki nesnelerin çoğalmasının günlük yönetimi çok zorlaştırdığını fark etmeye başlar. Örneğin, uygun yönetime sahip olmayan ortamlarda, çok sayıda SharePoint sitesine yayılmış büyük miktarda eski veri bulunma eğilimi vardır ve bu da yönetici ve kullanıcının kafa karışıklığına yol açar.

Bu makalede, Microsoft 365 kiracınızı aşırı yayılmadan uzak tutmanın temiz ve sağlam bir yolunu oluşturmak için nispeten temel PowerShell ve Azure Otomasyonu becerilerini Power Automate ile nasıl birleştireceğimi araştırıyorum.

Grup Sona Erme İlkeleri Neden İşinize Yaramayabilir?

Microsoft'un grup/ekip yayılmasına cevabı, grup sona erme politikasıdır. Temel düzeyde, süre sonu, bir Microsoft 365 kiracısı içindeki eski veya etkin olmayan Grupları kaldırmanın basit bir yolu olarak iyi çalışır; ancak Microsoft Graph'tan gelen sınırlı sinyaller, etkinlik tabanlı süre sonunu güvenilmez hale getirebilir. Sona erme politikaları, Grup sahiplerinin bir grubun kaldırılmasını onaylamasına veya silinmeyi önlemek için grubu yenilemesine olanak tanır ve yenilemelerin kaçırılmadığından emin olmak için kullanıcılara birden fazla hatırlatıcı gönderir.

Sona erme ilkesiyle ilgili sorun, gereksinimlerinizin Microsoft'un grup sona erme vizyonuna tam olarak uymamasıdır. Örneğin, kiracı başına yalnızca tek bir Grup sona erme ilkesi desteklenir. Sona erme politikası kapsamına giren tüm grupların sona erme süresi aynıdır. Başka bir örnek ise, süre sonu politikasına dahil etmek istemediğiniz Gruplarınızın olmasıdır. Bir süre sonu ilkesinin atama için iki ayarı vardır: tüm gruplar veya seçili gruplar (maksimum 500'e kadar). Ayrıca, grup süre sonu ilkeleri (adından da anlaşılabileceği gibi) yalnızca gruba bağlı ekip sitelerine odaklanır ve İletişim siteleri gibi diğer SharePoint Online sitelerini kapsamaz. Grup sona erme politikaları aynı zamanda bazı kuruluşlar için engelleyici olabilecek Entra ID Premium lisansını da gerektirir.

Sona erme politikaları bazı durumlarda faydalı olsa da, grubun sona ermesini kontrol etmeye yönelik esneklik ve özelleştirme eksikliği çoğu zaman kiracıları bir tür özel çözüm keşfetmeye ikna eder.

Azure Otomasyonu ile Power Automate'i Birleştirme

Practical 365 hakkındaki çok sayıda makale, yönetim işlemlerini otomatikleştirme ihtiyacıyla karşı karşıya kaldığında Azure Otomasyonunun değerini göstermektedir. Örneğin daha önce benzer bir konu olan Teams'in Otomasyon ile düzenli tutulması hakkında yazmıştım. Tekrarlanabilir, programatik görevler için Azure Otomasyonu, her kiracı yöneticisinin araç kutusunda bulunması gereken muhteşem bir araçtır. Azure Otomasyonu, bu çözüm için ağır işlerin çoğunu yapabilir, ancak sunamadığı şeylerden biri (Azure Otomasyonu'nun barındırılan bir Linux kutusunda basit komut dosyaları çalıştırması nedeniyle) nesne silmeye yönelik onay sürecidir.

Power Automate'in devreye girdiği yer burasıdır. Özellikle Power Automate'teki onay işlevi, kullanıcı dostu onay akışları oluşturmanın kolay bir yoludur. Onay bildirimleri kullanıcılar için hem Teams'de hem de Outlook'ta yönetilebilir, bu da süre sonu bildirimlerine yanıt vermeyi nispeten zahmetsiz hale getirir.

Son olarak, dahil edilecek sitelerin ve ilgili son kullanma sürelerinin bir listesinin tutulması gerekir. SharePoint veya Azure Storage'daki bir CSV dosyası veya bir Dataverse tablosu gibi süre sonu denetimlerine tabi olan grupların listesini depolamak için birden fazla seçenek mevcuttur. Bu örnekte, bakımı kolay olduğundan ve temel sürüm geçmişini ve denetim günlüğünü desteklediğinden bir SharePoint listesi kullanıyorum. Her şey yerli yerinde olduğunda süreç akışı Şekil 1'deki taslağı takip eder.

SharePoint İzleme listesi

Onay durumunu izlemek için sitelerin geçerlilik süresinin sona ermesini yönetmek için gereken önemli ayrıntıları içeren bir SharePoint listesi kullanıyorum. Liste Tablo 1'de gösterilen sütunları içerir.

Column Name

Ayrıntılar

SiteName

Kişiler alanı, her site için bir veya daha fazla onaylayanı tanımlamak için kullanılır

SiteURL

Sitenin URL'si

RetentionDays

Site için gün cinsinden son kullanma süresi

RemainingDays

Son kullanma tarihine kaç gün kaldığını takip etmek için kullanılır

MarkedforDeletion

Bir sitenin silinmesi gerekip gerekmediğini izlemek için bir seçim alanı. Mevcut seçenekler şunlardır: “Evet”, “Hayır” ve “Onay Bekleniyor”

DeletedOn

Bir sitenin silindiği tarihi izlemek için kullanılır

Approver

Her site için bir veya daha fazla onaylayanı tanımlamak için kullanılan kişi alanı

Takip listesi (Şekil 2), sona erme süreci kapsamındaki her sitenin ayrıntılarını ve güncel durumunu tutar. Bir site listede yoksa, geçerlilik süresi dolmaz.

İzleme listesini oluştururken, Graph API isteklerinden aranabilir hale getirmek için “Deletedon”, “MarkedforDeletion” ve “SiteURL” sütunlarını indekslediğinizden emin olun. Bu listeye ilişkin dizin ayarları Şekil 3'te gösterilmektedir.

Güç Otomatikleştirme Akışı

Power Automate çok esnektir ve süreç onaylarına yönelik akış, kurumsal gereksinimleri karşılayacak şekilde özelleştirilebilir. Burada Power Automate akışları oluşturmanın alt düzey ayrıntılarına girmeyeceğim ancak Power Automate'e aşina değilseniz Teams ve Power Automate: Görevleri Otomatikleştirmek için Pratik Örnekler kitaplarını okumanızı öneririm.

Süre sonu işlemine ilişkin Power Automate akışı, günde bir kez çalıştırılacak zamanlanmış bir tetikleyiciyle başlar. Akış her gün izleme listesini kontrol edecek ve "KalanGünler" değeri zaten 0 değilse azaltılacaktır. Tetikleme işlemi Şekil 4'te özetlenmiştir.

Eğer “RemainingDays” değeri zaten 0 ise sitenin süresi dolmuş ve onay süreci çalıştırılmış demektir. “MarkedForDeletion” sütunu “PendingApproval” değeri ile güncellenir ve Approver sütununda listelenen kullanıcılara onay gönderilir. Akışın konfigürasyonu Şekil 5'te gösterilmiştir.

Onay daha sonra hem Teams hem de Outlook aracılığıyla onaylayanlar listesine gönderilir. Onaylayanlar, silme işlemini onaylama veya reddedip grubun ömrünü yeniden sıfırlama seçeneğine sahiptir (Şekil 6).

Son olarak, onaylayanlardan biri isteği onaylarsa akış, "Silinmek İçin İşaretlendi" alanını "Evet" olarak günceller. İsteği reddederlerse akış, "RemainingDays" değerini "RetentionDays" değeriyle eşleşecek şekilde sıfırlayarak sona erme süresini yeniden başlatır (Şekil 7).

Azure Otomasyonu Runbook'u

Otomasyon Hesabı ve runbook, çözüm için gereken son yapılandırma parçasıdır. Bu örnekte kullandığım kod GitHub'da mevcuttur. Runbook, otomasyon hesabı için kaynak olarak eklenmesi gereken dört PowerShell modülünü kullanır:

  • Microsoft Graph API'sinde kimlik doğrulaması yapmak için Microsoft.Graph.Authentication gereklidir.
  • Gruba bağlı sitelerin silinmesini işlemek için Microsoft.Graph.Groups gereklidir.
  • Her sitede veri toplamak için Microsoft.Graph.Sites gereklidir.
  • İletişim sitelerinin silinmesini işlemek için PnP.PowerShell gereklidir, çünkü bu işlem henüz Microsoft Graph API tarafından desteklenmemektedir.

Azure Otomasyonuna yönelik modülleri yükleme ve güncelleme hakkında daha fazla bilgi edinmek için bu makaleye göz atın.

Otomasyon Hesabı, bu makaledeki açıklamaya benzer şekilde, Microsoft Graph ve PnP PowerShell'de kimlik doğrulaması yapmak için sistem tarafından atanan yönetilen bir kimlik kullanır. Yönetilen kimliğin hizmet sorumlusuna atanması gereken izinler şunlardır:

  • Microsoft Graph - Group.ReadWrite.All - Gruba bağlı siteleri silmek için gereklidir
  • Microsoft Graph - Sites.FullControl.All - Site bilgilerini almak ve siteleri yönetmek için gereklidir
  • Office 365 SharePoint Online - Sites.Manage.All - PNP PowerShell aracılığıyla iletişim sitelerini silmek için gereklidir

Bu örnek kod, bir Azure Otomasyon hesabına Grafik ve SharePoint izinlerinin nasıl ekleneceğini gösterir. Kod, önce gerekli Grafik izinlerini listeler, Otomasyon Hesabı hizmet sorumlusu kimliğini alır, Microsoft Graph uygulamasının hizmet sorumlusunu alır ve ardından izinleri Otomasyon Hesabına atar. Bu işlem daha sonra Office 365 SharePoint Online uygulaması için tekrarlanır. Bu süreç, Uygulamalar için Azure Otomasyonu Yönetilen Kimlikleri RBAC ile Kullanma hakkındaki bu makalede daha ayrıntılı olarak açıklanmıştır.

##List Required Permissions
$Permissions = @(
    "Group.ReadWrite.All"
    "Sites.FullControl.All"
)
##Add Managed Identity ID
$MIID = "<Replace with Managed Identity Service Principal ID>"”
##Get Roles for Permissions
$GraphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" # Microsoft Graph
[array]$Roles = $GraphApp.AppRoles | Where-Object {$Permissions -contains $_.Value}
##Loop through and add each role
foreach($role in $roles){
    $AppRoleAssignment = @{
        "PrincipalId” = $MIID
        "ResourceId" = $GraphApp.Id
        "AppRoleId" = $Role.Id
    }
    # Assign the Graph permission
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MIID -BodyParameter $AppRoleAssignment
}
##List Required Permissions
$Permissions = @(
    "Sites.Manage.All"
)
##Get Roles for Permissions
$SPApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0ff1-ce00-000000000000'" # SharePoint Online
[array]$Roles = $SPApp.AppRoles | Where-Object {$Permissions -contains $_.Value}
##Loop through and add each role
foreach($role in $roles){
    $AppRoleAssignment = @{
        "PrincipalId" = $MIID
        "ResourceId" = $SPApp.Id
        "AppRoleId" = $Role.Id
    }
    # Assign the SharePoint permission
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MIID -BodyParameter $AppRoleAssignment
}

Komut dosyası çalıştırıldığında, silinmek üzere işaretlenmiş liste öğelerini algılar ve ilişkili sitenin silinmesini işler. Nesne silme işlemine alındıktan sonra, takip listesindeki “DeletedOn” alanına silme tarihi eklenir. Silinmek üzere işaretlenmiş hiçbir nesne yoksa komut dosyasından çıkılır.

Esnek Bir Çözüm

Bu makalede, gerçek dünyadaki bir sorunu çözmek için Power Automate ve Azure Otomasyonunu kullanmanın bir yolunu özetledim. Bu süreci iyileştirmek için yapılabilecek çok şey var; örneğin, sitelerdeki son etkinliklere son kullanma tarihi için bir ölçüm olarak bakmak güzel olurdu. Ayrıca işleri nispeten yerinde tutmak için buraya minimum hata işlemeyi de ekledim.

Burada gösterdiğim gibi Microsoft araçlarını bir araya getirmek, kiracı yöneticilerinin şaşırtıcı derecede karmaşık bazı görevleri nispeten basit bir otomatik süreçle tamamlamasına yardımcı olabilir. Gelecekte Microsoft, sitelerin ve Teams'in sona ermesini yönetmek için daha iyi bir çözüm sunabilir. O zamana kadar yöneticiler her zaman kendi çözümlerini oluşturabilir ve bunları toplulukla paylaşabilirler.

İlgili makaleler