JEA'da Denetim ve Raporlama
JEA'yı dağıttıktan sonra, JEA yapılandırmasını düzenli olarak denetlemeniz gerekir. Denetim, doğru kişilerin JEA uç noktasına erişimi olduğunu ve atanan rollerinin hala uygun olduğunu değerlendirmenize yardımcı olur.
Makinede kayıtlı JEA oturumlarını bulma
Bir makinede hangi JEA oturumlarının kayıtlı olduğunu denetlemek için Get-PSSessionConfiguration cmdlet'ini kullanın.
# Filter for sessions that are configured as 'RestrictedRemoteServer' to
# find JEA-like session configurations
Get-PSSessionConfiguration | Where-Object { $_.SessionType -eq 'RestrictedRemoteServer' }
Name : JEAMaintenance
PSVersion : 5.1
StartupScript :
RunAsUser :
Permission : CONTOSO\JEA_DNS_ADMINS AccessAllowed, CONTOSO\JEA_DNS_OPERATORS AccessAllowed,
CONTOSO\JEA_DNS_AUDITORS AccessAllowed
Uç noktanın geçerli hakları İzin özelliğinde listelenir. Bu kullanıcılar JEA uç noktasına bağlanma hakkına sahiptir. Ancak erişimleri olan roller ve komutlar, uç noktayı kaydetmek için kullanılan oturum yapılandırma dosyasındaki RoleDefinitions özelliği tarafından belirlenir. Kayıtlı bir JEA uç noktasında rol eşlemelerini değerlendirmek için RoleDefinitions özelliğini genişletin.
# Get the desired session configuration
$jea = Get-PSSessionConfiguration -Name 'JEAMaintenance'
# Enumerate users/groups and which roles they have access to
$jea.RoleDefinitions.GetEnumerator() | Select-Object Name, @{
Name = 'Role Capabilities'
Expression = { $_.Value.RoleCapabilities }
}
Makinede kullanılabilir rol özelliklerini bulma
JEA, bir PowerShell modülünün .psrc
içindeki RoleCapabilities klasöründe depolanan dosyalardan rol özelliklerini alır. Aşağıdaki işlev, bir bilgisayarda kullanılabilen tüm rol özelliklerini bulur.
function Find-LocalRoleCapability {
$results = @()
# Find modules with a "RoleCapabilities" subfolder and add any PSRC files to the result set
Get-Module -ListAvailable | ForEach-Object {
$psrcpath = Join-Path -Path $_.ModuleBase -ChildPath 'RoleCapabilities'
if (Test-Path $psrcpath) {
$results += Get-ChildItem -Path $psrcpath -Filter *.psrc
}
}
# Format the results nicely to make it easier to read
$results | Select-Object @{ Name = 'Name'; Expression = { $_.Name.TrimEnd('.psrc') }}, @{
Name = 'Path'; Expression = { $_.FullName }
} | Sort-Object Name
}
Not
Bu işlevden elde edilen sonuçların sırası, birden çok rol özelliği aynı adı paylaşıyorsa rol özelliklerinin seçileceği sıra olmayabilir.
Belirli bir kullanıcı için geçerli hakları denetleme
Get-PSSessionCapability cmdlet'i, kullanıcının grup üyeliklerine göre JEA uç noktasında kullanılabilen tüm komutları numaralandırır. çıktısı Get-PSSessionCapability
, bir JEA oturumunda çalışan Get-Command -CommandType All
belirtilen kullanıcının çıktısı ile aynıdır.
Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'
Kullanıcılarınız, kendilerine ek JEA hakları verecek grupların kalıcı üyesi değilse, bu cmdlet bu ek izinleri yansıtmayabilir. Bu durum, kullanıcıların geçici olarak bir güvenlik grubuna ait olmasına izin vermek için tam zamanında ayrıcalıklı erişim yönetim sistemleri kullanıldığında ortaya çıkar. Kullanıcıların yalnızca işlerini başarılı bir şekilde yapmak için gereken erişim düzeyini elde etmelerini sağlamak için kullanıcıların rollere ve yeteneklere eşlemesini dikkatle değerlendirin.
PowerShell olay günlükleri
Sistemde modül veya betik bloğu günlüğünü etkinleştirdiyseniz, bir kullanıcının JEA oturumunda çalıştırabileceği her komut için Windows olay günlüklerinde olayları görebilirsiniz. Bu olayları bulmak için Microsoft-Windows-PowerShell/operasyonel olay günlüğünü açın ve olay kimliği 4104 olan olayları arayın.
Her olay günlüğü girdisi, komutun çalıştırıldığı oturum hakkında bilgi içerir. JEA oturumları için olay, Bağlan edUser ve RunAsUser hakkında bilgi içerir. Bağlan edUser, JEA oturumunu oluşturan gerçek kullanıcıdır. RunAsUser, komutu yürütmek için kullanılan JEA hesabıdır.
Uygulama olay günlükleri RunAsUser tarafından yapılan değişiklikleri gösterir. Bu nedenle, belirli bir komut çağrısını Bağlan edUser'a geri izlemek için modül ve betik günlüğünün etkinleştirilmesi gerekir.
Uygulama olay günlükleri
Dış uygulamalar veya hizmetlerle etkileşim kuran bir JEA oturumunda çalıştırılacak komutlar olayları kendi olay günlüklerine kaydedebilir. PowerShell günlüklerinin ve transkriptlerinin aksine, diğer günlüğe kaydetme mekanizmaları JEA oturumunun bağlı kullanıcısını yakalamaz. Bunun yerine, bu uygulamalar yalnızca sanal farklı çalıştır kullanıcısını günlüğe kaydeder. Komutu kimin çalıştırdığını belirlemek için bir oturum transkriptine başvurmanız veya PowerShell olay günlüklerini uygulama olay günlüğünde gösterilen saat ve kullanıcıyla ilişkilendirmeniz gerekir.
WinRM günlüğü, farklı çalıştır kullanıcılarını bir uygulama olay günlüğündeki bağlanan kullanıcıyla ilişkilendirmenize de yardımcı olabilir. Microsoft-Windows-Windows Uzaktan Yönetimi/İşletim günlüğündeki Olay Kimliği 193, hem bağlanan kullanıcının güvenlik tanımlayıcısını (SID) hem de hesap adını kaydeder ve her yeni JEA oturumu için kullanıcı olarak çalışır.
Oturum transkriptleri
JEA'yı her kullanıcı oturumu için bir transkript oluşturacak şekilde yapılandırdıysanız, her kullanıcının eylemlerinin metin kopyası belirtilen klasörde depolanır.
Aşağıdaki komut (yönetici olarak) tüm transkript dizinlerini bulur.
Get-PSSessionConfiguration |
Where-Object { $_.TranscriptDirectory -ne $null } |
Format-Table Name, TranscriptDirectory
Her transkript, oturumun başlatıldığı zaman, hangi kullanıcının oturuma bağlandığı ve bunlara hangi JEA kimliğinin atandığı hakkında bilgilerle başlar.
**********************
Windows PowerShell transcript start
Start time: 20160710144736
Username: CONTOSO\Alice
RunAs User: WinRM Virtual Users\WinRM VA_1_CONTOSO_Alice
Machine: SERVER01 (Microsoft Windows NT 10.0.14393.0)
[...]
Dökümün gövdesi, kullanıcının çağırmış olduğu her komut hakkında bilgi içerir. PowerShell uzaktan iletişiminde komutların dönüştürülme şekli nedeniyle, kullanılan komutun tam söz dizimi JEA oturumlarında kullanılamaz. Ancak yine de yürütülen etkili komutu belirleyebilirsiniz. Aşağıda, JEA oturumunda çalışan Get-Service Dns
bir kullanıcıdan alınan örnek transkript parçacığı verilmiştir:
PS>CommandInvocation(Get-Service): "Get-Service"
>> ParameterBinding(Get-Service): name="Name"; value="Dns"
>> CommandInvocation(Out-Default): "Out-Default"
>> ParameterBinding(Out-Default): name="InputObject"; value="Dns"
Running Dns DNS Server
Bir kullanıcının çalıştırmış olduğu her komut için bir CommandInvocation satırı yazılır. ParameterBindings komutuyla sağlanan her parametreyi ve değeri kaydeder. Önceki örnekte Name parametresinin cmdlet için Get-Service
Dns değeriyle sağlandığını görebilirsiniz.
Her komutun çıktısı genellikle olarak bir CommandInvocationOut-Default
da tetikler. inputobject komutundan Out-Default
döndürülen PowerShell nesnesidir. Bu nesnenin ayrıntıları aşağıdaki birkaç satırda yazdırılır ve kullanıcının neleri gördüğü yakından eşlenir.
Ayrıca bkz.
PowerShell