Varsayılan bir Microsoft Entra ID tenant'ında herhangi bir kullanıcı, posta kutusunu okuyan üçüncü taraf bir uygulamayı onaylayabilir ve BT ekibine hiçbir şey sorulmaz. Bu ayarı daha önce hiç gözden geçirmediyseniz bazı onayların zaten mevcut olduğunu varsayın ve politikayı değiştirmeden önce bunları denetleyin.
Varsayılan ayar neye izin veriyor?
Bir kullanıcı, bir uygulamanın kendi posta kutusunu okumasına onay verebilir. Ancak bir uygulamaya kuruluştaki tüm dosyalara sınırsız okuma ve yazma erişimi veremez, çünkü bunun için yönetici gerekir. Microsoft, kötü niyetli uygulamaların kullanıcıları erişim vermeye ikna etme riskini azaltmak için kullanıcı onayına yalnızca doğrulanmış yayıncılara (verified publisher) ait uygulamalar için izin verilmesini önerir.
Ayrıca bir onay, parola anlamına gelmez. OAuth 2.0 (RFC 6749) kapsamında uygulama, kullanıcının kimlik bilgileri yerine tanımlı bir kapsama (scope) ve ömre sahip bir access token alır. Onay kendi başına bir nesnedir; onu bulmak ve kaldırmak sizin göreviniz olur.
Verilen onayları listeleyin
En azından Cloud Application Administrator veya Application Administrator rolüne ihtiyacınız var. Microsoft Entra admin center'da Entra ID > Enterprise apps > All applications yolunu izleyin, uygulamayı seçin ve Permissions bölümünü açın. Admin consent sekmesi tüm kuruluş için verilmiş izinleri gösterir. User consent sekmesi ise belirli kullanıcıların veya grupların verdiği izinleri gösterir.
Portal uygulama uygulama çalışır, bu nedenle tenant genelinde bir görünüm için bir döngü gerekir. Microsoft'un iptal rehberindeki Graph endpoint'lerinin her biri tek bir service principal ile sınırlıdır: oauth2PermissionGrants delegated izinleri, appRoleAssignments ise application izinlerini döndürür. Aşağıdaki script eşdeğer cmdlet'leri kullanır ve Mail.Read gibi application rollerini de kapsayacak şekilde ID'leri isimlere çevirir:
Connect-MgGraph -Scopes "Application.ReadWrite.All","DelegatedPermissionGrant.ReadWrite.All","AppRoleAssignment.ReadWrite.All"
$sps = Get-MgServicePrincipal -All
$name = @{}
$role = @{}
foreach ($s in $sps) {
$name[$s.Id] = $s.DisplayName
foreach ($r in $s.AppRoles) { $role["$($s.Id)|$($r.Id)"] = $r.Value }
}
$rows = @()
foreach ($g in Get-MgOauth2PermissionGrant -All) {
$rows += [pscustomobject]@{ App=$name[$g.ClientId]; Type="Delegated"
Resource=$name[$g.ResourceId]; Detail=$g.Scope }
}
foreach ($sp in $sps) {
$assigned = Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id -All |
Where-Object { $_.PrincipalType -eq "ServicePrincipal" }
foreach ($a in $assigned) {
$rows += [pscustomobject]@{ App=$sp.DisplayName; Type="Application"
Resource=$name[$a.ResourceId]; Detail=$role["$($a.ResourceId)|$($a.AppRoleId)"] }
}
}
$rows | Export-Csv consent-audit.csv -NoTypeInformation
Bu scope'lar Microsoft'un iptal örneklerinden alınmıştır ve salt okunur bir denetimin ihtiyaç duymadığı yazma erişimini de içerir. Tenant'ınız izin veriyorsa daha dar scope'lar isteyin ve script'i önce küçük bir kümede test edin.
Önceliklendirme sırası
Bu sıra bize aittir, Microsoft'un önerisi değildir. Önce posta okuyan, gönderen veya dosya okuyan scope'lara sahip delegated onaylardan başlayın. Detail sütununu Mail ve Files için filtreleyin. Ardından tüm application izinlerini ele alın.
Kötü niyetli bir onay portalda sıradan görünür: makul bir ad ve birkaç scope. Aranması gereken örüntü, doğrulayamadığınız bir yayıncıya ait tanımadığınız bir uygulamaya birden fazla kullanıcının onay vermiş olmasıdır. Böyle bir durum bulursanız bunu bir olay olarak ele alın ve olay müdahale ekibimizi ya da kendi ekibinizi devreye sokun.
Riskli onayları kaldırın
Yöneticiler tarafından verilen izinler için Admin consent sekmesini açın, iznin yanındaki ... denetimini seçin ve Revoke permission seçeneğini seçin. Portalda User consent sekmesindeki hiçbir şeyi iptal edemezsiniz. Bunlar için Graph veya PowerShell gerekir.
Graph'ta bir delegated onayı ID'siyle silebilir, bir application iznini ise atama ID'siyle kaldırabilirsiniz:
DELETE https://graph.microsoft.com/v1.0/oAuth2PermissionGrants/{id}
DELETE https://graph.microsoft.com/v1.0/servicePrincipals/{resource-servicePrincipal-id}/appRoleAssignedTo/{appRoleAssignment-id}
İptal sayfasında ayrıca tek bir uygulamanın tüm delegated ve application izinlerini kaldıran PowerShell script'leri de bulunur. İlgili service principal için her şeyi sildikleri için çalıştırmadan önce script'leri okuyun.
İptal etmek, kullanıcının aynı uygulamayı yeniden onaylamasını engellemez. Microsoft iki çözüm belirtir: uygulamanın dynamic consent yoluyla izin istemesini durdurmak veya kullanıcı onayını tamamen engellemek. Üçüncü taraf uygulamaların neyi talep ettiğini değiştiremeyeceğiniz için, bizce elinizdeki kontrol engellemedir.
Kullanıcı onayını kısıtlayın
Privileged Role Administrator rolüne ihtiyacınız var. Global Administrator rolü yalnızca admin center'ı kullanırsanız gereklidir; ayar orada Identity > Applications > Enterprise apps > Consent and permissions > User consent settings altındadır.
Entra bu iş için iki yerleşik politika sunar:
| ID | Etki |
|---|---|
microsoft-user-default-low | Kullanıcılar yalnızca doğrulanmış yayıncılara ait veya kendi tenant'ınızda kayıtlı uygulamalara ve yalnızca düşük etkili olarak sınıflandırdığınız izinlere onay verebilir |
microsoft-user-default-legacy | Kullanıcılar, yönetici onayı gerektirmeyen her izne, herhangi bir uygulama için onay verebilir |
Low politikası, izinleri sizin sınıflandırmanıza bağlıdır; kullanıcıların neyi onaylayabileceğini bu sınıflandırma belirler. Önce bunu yapın, ardından sıradan bir kullanıcı hesabıyla test edin.
PowerShell veya Graph'ta herhangi bir şeyi değiştirmeden önce mevcut authorizationPolicy nesnesini alın. Tenant'ınızda, geliştiricilerin sahibi oldukları uygulamalar için onayı yönetmesine izin verenler gibi ManagePermissionGrantsForOwnedResource.* politikaları atanmış olabilir. Bunları koleksiyonda tutun, aksi halde kaldırmış olursunuz. Graph PowerShell ile kullanıcı onayını devre dışı bırakmak şöyle görünür:
Connect-MgGraph -Scopes "Policy.ReadWrite.Authorization"
$body = @{
"permissionGrantPolicyIdsAssignedToDefaultUserRole" = @(
"managePermissionGrantsForOwnedResource.{other-current-policies}"
)
}
Update-MgPolicyAuthorizationPolicy -BodyParameter $body
Bunun yerine düşük etkili politika kapsamında onaya izin vermek için, defaultUserRolePermissions.permissionGrantPoliciesAssigned alanına yapılan Graph PATCH isteğine managePermissionGrantsForSelf.microsoft-user-default-low değerini ekleyin. Politika değişikliği yalnızca gelecekteki onayları etkiler; mevcut onaylar siz kaldırana kadar yerinde kalır.
Kullanıcılara talep etme yolu sunun
Alternatif sunmadan onayı engellerseniz kullanıcılar çözüm yolları arayacaktır. Admin consent workflow, kullanıcıların bunun yerine onay talep etmesini sağlar. Global Administrator bunu Entra ID > Enterprise apps > Consent and permissions > Admin consent settings altında açar. "Users can request admin consent to apps they are unable to consent to" ayarını Yes yapın, ardından şunları seçin:
- İnceleyiciler (reviewers): kullanıcılar, gruplar veya roller. İnceleyici olmak yetkilerini yükseltmez; bu nedenle her birinin talep edilen uygulama için onay verme izinlerine zaten sahip olması gerekir. Microsoft Graph app role'leri (application izinleri) isteyen uygulamaları yalnızca Global Administrator'lar onaylayabilir.
- E-posta bildirimleri: inceleyiciler için kapatırsanız, talep sahiplerine giden bildirimler de kapanır.
- Talep ömrü ve süre dolum hatırlatmaları: ömür, bir talebin geçerli kalacağı gün sayısıdır. İlk hatırlatma yaklaşık yarı noktada gelir; yani üç günlük bir talep için ikinci günde.
Kaydedin, ardından iş akışının devreye girmesi için bir saate kadar bekleyin. Görevden alınan bir inceleyici, rolü elindeyken oluşturulan taleplere erişmeye devam eder. Yeni inceleyiciler, eklenmelerinden önce oluşturulmuş taleplerde işlem yapamaz.
Entra yerleşik rolleri, Exchange RBAC ve Teams resource-specific consent de erişim verebilir; bu yüzden bunları daha kapsamlı bir incelemeye dahil edin.
Nereden başlamalı?
- Envanter script'ini çalıştırın ve delegated onayları ile application izinlerini ayrı listeler olarak inceleyin. Kimsenin gerekçelendiremediği uygulamaları işaretleyin.
- Riskli onayları iptal edin: yönetici onaylılar portaldan, kullanıcı onaylılar Graph veya PowerShell ile.
- Mevcut
authorizationPolicynesnesini okuyun, ardındanManagePermissionGrantsForOwnedResource.*girdilerini koruyarak kullanıcı onayını sınıflandırılmış izinlerlemicrosoft-user-default-lowolarak ayarlayın veya devre dışı bırakın. - Admin consent workflow'u etkinleştirin. Rolleri, kullanıcıların talep edeceği uygulamalar için onay verebilen inceleyicileri belirleyin ve aralarında bir Global Administrator bulundurun, çünkü Microsoft Graph application izinlerini yalnızca bu rol onaylar.
- İncelemeyi belirli aralıklarla tekrarlayın. Zamanınız yoksa danışmanlık ekibimiz bunu bir değerlendirme olarak yürütebilir, yönetilen güvenlik hizmetimiz ise izlemeyi üstlenebilir.
