Николай Вересов – Как настроить Remote Desktop Gateway

Основы авторизации

Любая процедура авторизации может быть разбита на эти три части:

Такую функциональную схему можно представить следующими способами:

Рис.1. Основы авторизации.

  1. Субъект доступа связывается с объектом доступа.
  2. Субъект доступа связывается с Авторизатором и запрашивает двоичный ответ о том, может ли Субъект доступа получить доступ к Объекту.
  3. Авторизатор проверяет, может ли субъект получить доступ к объекту, и отвечает, если доступ разрешен или запрещен. Наиболее распространенной логической моделью для управления доступом является модель авторизации на основе ролей (RBAC).
  4. Объект доступа, основываясь на ответе Авторизатора, разрешает или запрещает доступ к субъекту.

Что такое remote desktop gateway?

Все службы удаленного рабочего стола были переименованы в Windows Server 2008 R2. Служба удаленного рабочего стола заменила службы терминалов.

Пример №2. контроль доступа на основе ролей (rbac)

Наша система авторизации безупречно функционирует в простых сценариях, но при увеличении числа пользователей предоставление каждому из них соответствующего доступа становится трудоемкой задачей. Роли, изображенные на следующей схеме, послужили основой для разработки новой системы контроля доступа.

Изображение 3. Какие роли определяются для доступа (RBAC).

Пример №3. контроль доступа на основе ролей с поддержкой мультитенатности (rbac with domains/tenants)

По мере развития нашего CRM-приложения другие компании начали проявлять к нему интерес. Боб перешел в другую компанию после ухода из нашей и занял должность администратора CRM.

Мы добавляем новый атрибут (например, “нет права доступа к домену”) в кортеж запроса на авторизацию и схему описания правила политики для поддержки многопользовательского доступа. В дальнейшем мы также будем учитывать этот атрибут при определении роли и при задании правил сопоставления.

[request_definition]
r = sub, dom, obj, act

[policy_definition]
p = sub, dom, obj, act

[role_definition]
g = _, _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

Сравнивая нашу модель с моделью в примере 2 (RBAC), мы видим, что у нас есть новый атрибут dom, который выражает имя предприятия, к которому принадлежит субъект авторизации.

Кроме того, мы добавили новое измерение в раздел [role_definition], чтобы определить, принадлежит ли роль субъекту, принимая во внимание также компанию, которой он принадлежит. Если rsub имеет роль или наследует ее от атрибута политики POBFE, пользователю не нужно иметь статус пользователя сайта, чтобы использовать его в качестве службы веб-поиска, поскольку вся информация о человеке передается через Интернет без его согласия или с помощью специальных технологий поиска данных Google.

Содержимое файла client_rbac.with-domain_policy в формате csv вместе с правилами применимой политики может выглядеть следующим образом:

Casbin

A CL и RBAP – это две разные модели управления доступом, которые можно объединить с помощью библиотеки авторизации Casbin.

Рис.2. Принципиальный план авторизации с использованием Casbin.

Модель политики авторизации является важнейшим компонентом механизма авторизации Casbin. Эта модель может быть изображена в виде звезды. PERM (Policy, Effect, Request Matchers) текстовый файл CONF на основе метамодели

Модель политики определяет структуру хранения политик авторизации, а также состав кортежа с данными, которые будут включены в запрос авторизации.

P ERM – это универсальная метамодель для создания моделей авторизации как есть. Request – запрос в письме; Policy – политика; Effect – эффект; конкретный экземпляр PERM, который хранится в файле. CONF объясняет, как взаимодействуют эти 4 компонента, и описывает логику авторизации.

Claims

Принцип авторизации такой же, как и в предыдущей итерации фреймворка. Авторизация на основе претензий – одна из самых свежих идей в мире. Что такое утверждение?

Он состоит из двух строк “ключ-значение”, где ключом может быть “FirstName” или даже какой-то другой текст, содержащий конкретную информацию.

Многоуровневое утверждение, включающее в свой список предопределенную Систему, органично сочетается с привычной для многих разработчиков одномерной ролевой моделью. Безопасность. Точно так же не возбраняется придумывать собственные утверждения.

Идентичность – следующая важнейшая идея. Она состоит из одного утверждения и ряда утверждений. Например, если под идентичностью понимается весь документ (например, паспорт и водительские права), то утверждение будет строкой из паспорта. System – это класс, используемый в Core MVC. Security,ClaimsIdentities

Permission-based авторизация. свой фильтр авторизации

Декларативный список всех действий, необходимых для авторизации пользователя, в том числе:

Resource-based авторизация

Перед вызовом защищенного устройства Core MVC выполняет авторизацию на основе политики. Успех авторизации зависит только от пользователя, от того, есть ли у него соответствующие полномочия. Какую информацию можно получить из внешних источников, если необходимо учесть защищаемый ресурс и его характеристики?

Мы будем использовать действие GET /Orders/id, которое считывает строку по ID из базы данных. Только после получения заказа из базы данных мы можем определить, есть ли у пользователя права на этот заказ. Это делает бесполезными обсуждавшиеся ранее сценарии на основе фильтров MVC, которые запускаются до того, как пользователь получает контроль. К счастью, Core MVC предлагает метод ручной авторизации.

I AuthorizationService должен быть реализован в контроллере. Как обычно, мы получаем его и включаем в конструктор.

public class ResourceController : Controller
{
    IAuthorizationService _authorizationService;
    public ResourceController(IAuthorizationService authorizationService)
    {
        _authorizationService = authorizationService;
    }
}

После установления нового куратора и правил:

Настройка ssl сертификата для remote desktop gateway

Чтобы соединение со шлюзом RDS было безопасным, необходимо установить сертификат. В коммерческих ситуациях предпочтительнее использовать коммерческий сертификат, выданный внешним центром сертификации. Шлюз удаленного рабочего стола может использовать бесплатный SSL-сертификат Let’s Encrypt (установка Let’s EncryptFT).

При использовании самоподписанного SSL-сертификата в Windows следует помнить, что сертификат должен быть доверенным для внешних клиентов. Клиент не сможет подключиться к шлюзам, если он не доверяет сертификату RDGW.

D NS-имя серверов RDGW, которые будут использоваться для подключения внешних клиентов, необходимо включить в поле Subject Name (CN) или Alternative Node сертификата.

  1. Откройте свойства сервера RDGW в консоли RD Gateway и перейдите на вкладку SSL Certificate;
  2. В этом примере мы используем самоподписанный сертификат. Выберите Create self-signed certificate -> Create and import certificate;
  3. Укажите имя сертификата (этот DNS будет использоваться вашими клиентами для подключения к RDGW) и каталог, в котором вы хотите сохранить сертификат (этот сертификат будет распространяться среди клиентов);

Для подключения к RDGateway в Windows Server 2022 используются следующие порты:

Держите этот порт открытым на вашем сетевом оборудовании.

Убедитесь, что все элементы в консоли RDGW Manager окрашены в зеленый цвет, прежде чем открыть ее.

Настройка политик доступа rds gateway

Управление политиками и правилами доступа на RDGW осуществляется с помощью консоли Tgateway Manager (ts gatesw.msc). В этом пакете конфигурация может быть выполнена с использованием двух различных типов политик.

  • Политики авторизации подключений (RD CAP) – определяет, кто имеет права авторизации на шлюзе RDS
  • Политики авторизации ресурсов (RD RAP) – определяет, кто и какие ресурсы (компьютеры) во внутренней сети могут подключаться через RDS.

Выберите сначала политику RD CAP:

Настройки политик доступа

Альтернативному интерфейсу не хватает гибкости, необходимой для реальных приложений. RequireClam(“x”, params values) позволяет указать допустимые значения формулы, но логическое условие должно быть написано с помощью логики.

RequireClaim(“y”). В конечном итоге вы сможете реализовать различные политики. В результате логики AND будут получены одинаковые условия:

services.AddAuthorization(options =>
{
    options.AddPolicy("age-policy", 
        policy => policy.Requirements.Add(new AgeRequirement(42), new FooRequirement()));
});

Подготовительные работы

Здесь и далее мы будем настраивать доступ к различным страницам сайта. Вы можете создать совершенно новое приложение, аналогичное “ASP. Выберите тип аутентификации “No Authentications” в разделе “NET Core Web Application”.

Подключение через шлюз

Откройте стандартную программу Windows Remote Desktop Connection (mstsc.exe), чтобы установить соединение. Нажмите кнопку Параметры на вкладке Дополнительно.

В поле Выбрать доступны следующие параметры сервера удаленного рабочего стола. Нажмите OK после выбора адреса сервера в указанном формате.

Введите домен и имя пользователя в поле Компьютер на вкладке Общие, затем нажмите Подключиться. При необходимости можно сохранить настройки входа в систему.

Обратите внимание, что у пользователя должно быть разрешение на подключение через ранее настроенный шлюз.

Введите пароль учетной записи.

Это позволит использовать шлюз RD для подключения к удаленному рабочему столу. Это можно подтвердить с помощью команды tracert:

Из вывода видно, что трасса проходит через шлюз.

Пример №1. список контроля доступа (acl)

Исследование конкретного случая – наиболее эффективный метод для понимания модели PERM.

Представьте, что мы построили простую CRM-систему с базой данных клиентов и хотим ограничить, кто имеет доступ к ресурсу клиента. Для авторизации в системе используется список контроля доступа (ACL).

Системные требования представлены ниже в следующем формате:

Теперь, основываясь на метамодели PERM, мы описываем модель в конфигурационном файле client_acl.conf, а затем анализируем каждый раздел отдельно.

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

Формат ключ = значение используется для описания каждого раздела модели. Ключ для каждого раздела отдельный.

Определение структуры запроса (r) впервые встречается в разделе [request_definition]. Первый элемент является синонимом sub (“субъект”), второй – obj (“объект”), а третий – act (“действие”). Это означает, что каждый запрос будет состоять из кортежа трех элементов.

Структура хранения политики будет описана в этом разделе. Формулировка запроса обычно соответствует формату документа. Все правила политики также имеют специальный атрибут eft, который может быть установлен только в разрешающее или запрещающее значение. В данном случае было бы излишним указывать его при определении достаточно простой модели политики ACL.

Какие политики авторизации должны соблюдаться, определяется в следующем разделе, policy_effect. Если существует подходящее правило разрешительной политики, такое как allow (например; eft == “alsow”), то конечным эффектом будет – if (from) – allow. Эта модель использует следующую формулировку для нашего СО: e = some(where (p.eft == “allow”).

В [matchers] мы задаем логическое выражение, в котором указываем рекомендации по сопоставлению запроса с конкретным правилом политики (p).

Стратегия авторизации нам известна. Следующим шагом будет определение правил политики на основе требований системы и раздела [policy_definition] определения политик в конфигурационном файле модели. Правила могут храниться в базе данных или, по нашему желанию, на сервере.

p, alice, client, create
p, alice, client, read
p, alice, client, modify
p, alice, client, delete

p, bob, client, read

p, peter, client, create
p, peter, client, read
p, peter, client, modify

Прежде всего, поскольку ни одно из перечисленных правил не имеет значения атрибута eft, заданного по умолчанию (разрешено), нам не нужно определять никаких правил для нашей системы. Благодаря логике обработки правил, которую мы включили в файл конфигурации нашей модели.

Модель политики, правила политики и библиотека Casbin будут объединены на следующем этапе, чтобы создать систему контроля доступа для нашей CRM.

Casbin представлен для platform.net как класс Enforcer, который имеет множество конструкторов и принимает две строковые переменные для указания пути к файлам моделей или правил политики (в том числе основанных на данных пользователя).

// Создадим новый экземпляр класса Enforcer
var e = new Enforcer("path/to/client_acl_model.conf", "path/to/client_acl_policy.csv");

// Определим переменные, которые укажем в запросе авторизации
var sub = "alice";
var obj = "client";
var act = "read";

// Выполняем проверку  
if (e.Enforce(sub, obj, act)) {
    // доступ alice к чтению объекта client разрешен
} else {
    // отклонить запрос, показать ошибку
}

Пример №5. контроль доступа на базе атрибутов (abac)

Хотя основы модели ABAC просты, ключевой концепцией является то, что политики авторизации не строятся на ролях субъектов и объектов доступа (атрибутов среды). Стандарты языка управления доступом ABAP используются в XACML.

В отличие от этого, реализация модели ABAC в Casbin довольно проста: вместо строковых значений для значений атрибутов модели можно использовать экземпляры классов или структуры.

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == r.obj.Owner

За исключением того, что мы сопоставляем свойства класса r.obj и атрибуты запроса R.sub со свойствами Owner экземпляра класса word, который мы передаем для вызова метода e. Enforce(), этот пример идентичен описанному выше в [matchers].

Когда переданный экземпляр класса содержит свойство Owner, Casbin будет использовать механизм Reflection для получения его значения.

public class ResourceObject  
{
    ...
    public string Owner { get; set; }
}

Кроме того, вы можете сопоставлять, используя несколько атрибутов ABAC.

[matchers]
m = r.sub.Domain == r.obj.Domain

Только элементы запроса авторизации (r) – такие как r.sub, R obj и т.д. – в настоящее время могут служить источниками для сопоставления атрибутов ABAC.

Однако, чтобы не делать логическое выражение более многословным, для более сложных сценариев ABAC можно описывать правила ABAC в политике Casbin.

На этом рисунке политика abac_scale-model.conf настроена с использованием масштабирования.

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub_rule, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = eval(p.sub_rule) && r.obj == p.obj && r.act == p.act

Здесь мы определяем новый атрибут sub-rule в разделе [policy_definition] модели и используем выражение eval(p.sub). Свойства, необходимые для определения политики, содержатся в определяемом пользователем типе (классе или структуре) p.sub_rule.

Файл abac_scale_policy.conf с правилами политики:

p, r.sub.Age > 18, client1, read
p, r.sub.Age < 60, client2, write

В коде это будет выглядеть следующим образом:

Резюме

Благодаря интерпретируемому языку моделирования PERM (PMIL), Casbin является очень адаптируемым и универсальным решением для авторизации. Система совместима с наиболее распространенными моделями контроля доступа, используемыми в настоящее время.

Casbin основан на интерпретаторе модели политики, который отображает значения, передаваемые в качестве атрибутов запроса на авторизацию, и описывается с помощью языка PERM.

Установка роли

Нажмите Добавить роли и функции в диспетчере серверов после его открытия.

В качестве типа установки выберите установку на основе функций и ролей.

Выберете сервер из пула.

Установите флажок Службы удаленных рабочих столов в следующем окне.

Вы увидите описание должности.

Однако, пожалуйста, добавьте шлюз Remote Desktop Gateway.

Для этой услуги необходим веб-сервер IIS и дополнительные административные инструменты, которые будут предоставлены автоматически.

Добавьте эти функции.

Нажмите Install.

Установка роли rds-gateway в windows server

Ферма Remote Desktop Service (RDS) не обязательно нуждается в службе Remote Desktop Gateway. Для развертывания RDGW обычно нужно использовать другой сервер или, по крайней мере, совместимый.

С помощью PowerShell или функции Add roles and Features диспетчера сервера можно настроить службы удаленных рабочих столов.

При настройке роли NPS (сервер сетевой политики) и службы RDGW в качестве веб-сервера IIS.

Убедитесь, что роль RDS-Gateway установлена:

Get-WindowsFeature RDS*

Используйте команду Impact для установки роли в Windows Server с помощью команды Install-WindowsFeature:

Install-WindowsFeature RDS-Gateway -IncludeAllSubFeature –IncludeManagementTools

Создайте группу пользователей с доступом к Active Directory при помощи ADUC или PowerShell:

Похожее:  МТС ИНТЕРНЕТ БАНК ЛИЧНЫЙ КАБИНЕТ ВХОД В ЛИЧНЫЙ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *