У меня есть команды PowerShell, которые я написал, и вместо того, чтобы заново изобретать колесо, я хочу использовать RBAC в качестве жизнеспособного средства предоставления команд пользователям при загрузке сборок в PowerShell (через Import-Module).
Проводя мой поиск в (вставьте ваш любимый поисковик здесь), я сталкивался с вещами, которые находятся далеко в левом поле, такими как ACE / ACL.Самым близким, что я нашел, был JEA , но это выглядит как специфическое для удаленного взаимодействия;что противоречит цели, так как модуль будет загружен локально.
Я видел, что есть способ выполнить проверку членства в группе с помощью таблицы SQL, но для этого потребуется поставить сервер / базу данных / таблицу и победитьцель использования ресурсов, которые уже существуют.
Я извлек PSPrinicpal.IsInRole () , WindowsPrincipal.IsInRole () и GenericPrincipal.IsInRole () , но для этого требуется доступ / использование внутри пространства имен / класса и, следовательно, их недостаточно для того, что я пытаюсь сделать;который запрещает доступ к [a] определенной команде [s] в «Import-Module», если пользователь не принадлежит к группе «x»;что, я считаю, должно было бы быть сделано для украшения самого класса?
namespace ExamplePowerShell
{
using System;
using System.Management.Automation;
using System.ServiceModel;
/// <summary>
/// Initializes a new instance of the <see cref="RestartRemoteServer"/> class.
/// </summary>
[SOMETHING SHOULD GO HERE?]
[Cmdlet(VerbsLifecycle.Restart, "RemoteServer")]
public class RestartRemoteServer : Cmdlet
{
....
}
}
Спросите: Есть ли способ использовать RBAC, без необходимости заново изобретать всю предпосылку с нуля?
В настоящее время все команды доступны любому, кто загружает модуль, и вместо того, чтобы создавать отдельный модуль (который не является какой-либо формой безопасности, если пользователь может найти другой модуль), я хочу убедиться, чтоНикто другой не может запустить эти команды без соответствующего членства в группе.
Цель: Ограничить доступность командлета членством в группе (или его отсутствием), когда сборка импортируется в локальнуюСеанс PowerShell.
(Концепция) Пример: Командлет Restart-RemoteServer должен быть доступен для запуска только лицам из группы "DevOps" и никому не должен быть доступен.с разрешением RDP на машину, так как любой может импортировать модуль в PowerShell (или он может быть загружен по умолчанию через профили PowerShell).
Редактировать: Найден пример, который использует OData , но япредпочел бы зависеть от нашей эры.