Microsoft Graph PowerShell SDK ile Sertifika Tabanlı Kimlik Doğrulamayı Kullanma
İnteraktif Oturumlardan Uzaklaşmak
Microsoft 365 verilerine erişmek için Microsoft Graph PowerShell SDK'sını kullanan Azure AD hesaplarının lisanslarının güncellenmesi gibi makalelerde etkileşimli oturumlarda verilen komutları kullandık. Bu makalede de belirttiğim gibi bu yaklaşım, Graph SDK cmdlet'lerinin nasıl çalıştığını keşfetmek için harikadır ve aynı zamanda programcıların ve yöneticilerin anlaması için bazı önemli noktalara sahiptir. En ciddi sorun, zaman içinde toplanan izinlerin SDK için kullanılan hizmet sorumlusuna aşırı izin verilmesi anlamına geldiği izin tahakkukudur. Çözüm, bir işi tamamlamak için yalnızca yeterli izinlere izin vererek Azure AD'de kayıtlı ayrı uygulamaları kullanmaktır; bu bir yönetim zorluğu yaratır ancak çok daha güvenlidir.
Kayıtlı uygulamaları kullanma yolunu izlerseniz, yetkilendirilmiş erişim yerine yalnızca uygulama kimlik doğrulamasını kullanabilirsiniz. Yalnızca uygulama kimlik doğrulaması, uygulamanın kimlik bilgisi olarak X.509 sertifikasını kullandığı anlamına gelir. Sertifika otomatik olarak imzalanabilir (test amacıyla) veya bir sertifika yetkilisi tarafından verilebilir. Microsoft Graph PowerShell SDK'sı için yalnızca uygulama kimlik doğrulamasını kullanmaya yönelik Microsoft belgeleri, Azure AD'de kayıtlı bir uygulamayı yalnızca uygulama kimlik doğrulaması için yapılandırmaya yönelik adımları içerir. Bu makale, adımları kullanma deneyimimi kapsamaktadır.
Sertifika Alın
Muhtemelen kullanılmayı bekleyen bir X.509 sertifikanız yoktur, ancak PowerShell ile bunları oluşturmak kolaydır. Bu kod örneği, komutun çalıştığı iş istasyonundaki geçerli kullanıcının yerel sertifika deposunda depolanan yeni bir sertifika oluşturmak için New-SelfSignedCertificate cmdlet'ini çalıştırır:
$Cert = New-SelfSignedCertificate -DnsName office365itpros.onmicrosoft,com -CertStoreLocation "Cert:\CurrentUser\My" -FriendlyName "MicrosoftGraphSDK" -Subject "Test Cert for Microsoft Graph SDK"
Get-ChildItem "Cert:\CurrentUser\My\$($Cert.thumbprint)"
PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
FC92991B21219F178AFB37C12DF231B6AFC3D790 CN=office365itpros.onmicrosoft
Sertifikayı yerel makinenin sertifika deposunda oluşturmak istiyorsanız, depolama konumu olarak Cert:\LocalMachine\My'i belirtin. PowerShell'i yönetici olarak çalıştırırsanız yalnızca yerel makine deposunda yeni sertifikalar oluşturabilirsiniz. Test amacıyla kullandığınız sertifikaları mağazanızda saklamanızda sakınca yoktur. Bir şeyi üretime sokma zamanı geldiğinde, kodun çalışacağı makinelerde farklı sertifikaların yüklü olması gerekir.
Sertifikayı oluşturduktan sonra .cer dosyasına aktarıyoruz. İşte yaptığım şey:
Get-ChildItem "Cert:\CurrentUser\My\$($Cert.thumbprint)" | Export-Certificate -FilePath C:\temp\MicrosoftGraphSDK.cer
Directory: C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 06/10/2021 17:01 861 MicrosoftGraphSDK.cer
Sertifikayı Bir Uygulamaya Bağlama
Azure AD'ye kayıtlı uygulamalar, bir dizi Grafik izni için izin almak üzere kapsayıcı görevi görür. İzinler, uygulamanın Grafik sorgularını kullanarak verilere erişmesini sağlar. Bir komut dosyası yalnızca uygulama kimlik doğrulamasını kullanarak bağlandığında, etkileşimli parola veya uygulama sırrı gibi başka bir mekanizma yerine, uygulama tarafından bilinen bir sertifikanın parmak izini ileterek kimlik doğrulaması yapar.
Bunu mümkün kılmak için Export-Certificate cmdlet'i kullanılarak oluşturulan sertifika dosyasını uygulamaya yüklememiz gerekir. Bu, uygulama özelliklerinin sertifikalar ve sırlar bölümüne gidip sertifika yükle seçeneğini seçerek yapılır (Şekil 1).
Uygulamanın, Grafik sorgularıyla kullanmak istediğimiz izinlere sahip olduğunu hatırlayarak, gerekli Grafik izinlerini uygulamaya eklememiz gerekiyor. Tam izinler, uygulamanın erişmek istediği verilere göre değişir. Doğru izin kümesini bulmak ve ardından bunları uygulamaya eklemek için etkileşimli bir oturumda kod çalıştırarak denemeler yapabilirsiniz. Şekil 2'de, Auditlog.Read.All (kullanıcı oturum açma verilerini okumak için gereklidir) ile User.Read.All (kullanıcı oturum açma verilerini okumak için gereklidir) arasında değişen beş uygulama izni ekledim. kullanıcı hesapları hakkındaki bilgileri okuyun).
Yetki verilen User.Read izninin kaldırıldığını unutmayın. Bu, ihtiyacımız olmayan varsayılan bir izindir.
Microsoft Graph'a bağlanma
Connect-MgGraph cmdlet'ini kullanarak Grafiğe bağlanmak için üç parça bilgiye ihtiyacımız var:
- Kiracı tanımlayıcısı. Bunu uygulama özelliklerinden kopyalayabilirsiniz.
- Uygulama tanımlayıcısı. Yine, bu, uygulama özelliklerinde mevcuttur.
- Sertifika parmak izi. Bu, sertifikanın bir özelliği olarak mevcuttur (yukarıdaki örneğe bakın).
Bu bilgilerle şöyle bir komut çalıştırabiliriz (kiracı tanımlayıcınızı, uygulama tanımlayıcınızı ve sertifika parmak izi değerlerini kiracınıza uygun şekilde değiştirmeyi unutmayın):
Connect-MgGraph -TenantId "a562313f-14fc-43a2-9a7a-d2e27f4f3478" -AppId "d86b1929-b818-411b-834a-206385bf5347" -CertificateThumbprint "FC92991B21219F178AFB37C12DF231B6AFC3D790"
Welcome To Microsoft Graph!
Doğru ayarlarla bağlanıp bağlanmadığınızı kontrol etmek için Get-MgContext cmdlet'ini çalıştırın. Burada kontrol edilmesi gereken önemli şeyler, istemci tanımlayıcısı, kiracı tanımlayıcısı ve parmak izi ile mevcut izinler (kapsamlar) için giriş ayarlarıdır. Bağlam kapsamı, CurrentUser (etkileşimli oturum açma) yerine İşlem'i raporlamalı ve herhangi bir hesap adı gösterilmemelidir.
Get-MgContext
ClientId : d86b1929-b818-411b-834a-206385bf5347
TenantId : a562313f-14fc-43a2-9a7a-d2e27f4f3478
CertificateThumbprint : FC92991B21219F178AFB37C12DF231B6AFC3D790
Scopes : {Group.Read.All, MailboxSettings.Read, User.Read.All, Organization.ReadWrite.All...}
AuthType : AppOnly
AuthProviderType : ClientCredentialProvider
CertificateName :
Account :
AppName : Microsoft Graph PowerShell SDK Cert
ContextScope : Process
Certificate :
Bir şeyler doğru görünmüyorsa oturumu sonlandırmak için Disconnect-MgGraph cmdlet'ini çalıştırın, geri dönün ve uygulama ayarlarını kontrol edin (özellikle gerekli tüm izinler için izin verildiğinden emin olun), ve tekrar deneyin.
Kodu Çalıştırma
Doğru izinlerle başarılı bir şekilde bağlandıktan sonra kodunuzu çalıştırabilirsiniz. Her zamanki gibi etkileşimli istemler çalışmaz, bu nedenle etkileşimli bir oturum için oluşturulan kodu alıp arka planda çalışmasını sağlamak için bazı ayarlamalar yapılması gerekebilir. Bundan sonra, aşağıdaki gibi operasyonel ayrıntıları bulma meselesi:
- Kimlik doğrulama için kullanılacak X.509 sertifikaları ve bunların doğru yere nasıl kurulacağı
- Komut dosyası işin arka planı olarak nasıl gönderilir?
- Çıktıyla ilgilenin (örneğin, komut dosyasının sonuçlarını içeren bir dosyayı e-postayla göndermek).
Bunların hepsi başka bir günün işi.

