Короткий ответ
Регулярный аудит прав — календарная сверка привилегий с реестром и HR, не разовый скрипт после испуга. Раз в квартал: Domain Admins и вложенность, локальные Administrators критичных узлов, sudo/root, VPN-группы, облачные админы, исключения «временно». Каждая лишняя учётка — тикет на снятие или явное продление с датой.
Владелец цикла — Иван Петров. Без даты last-review реестр снова врёт.
Симптомы и как отличить
Типичная картина:
- в DA люди, которых не вспомнить;
contractorв VPN с 2022;- disabled-user всё ещё в
IT-Admins; - локальный admin на FILE01 «для программы».
Отличия:
| Работа | Когда |
|---|---|
| Реестр доступов | постоянно поддерживать |
| Offboarding | событие HR |
| Квартальный аудит | сверка факта vs реестра |
| Первичный IT-аудит | шире: узлы, backup, сеть |
Возможные причины
- Реестр завели и бросили.
- Вложенные группы никто не раскрывает.
- Нет календаря, «как будет время».
- Страх снять «вдруг сломается».
- Облако не в том же цикле, что AD.
- Редко: аудиторы приходят раз в три года — внутренний цикл не завели.
Диагностика
1. Выгрузка факта AD
$out = 'C:\Temp\access-review-{0:yyyy-MM-dd}' -f (Get-Date)
New-Item -ItemType Directory -Force $out | Out-Null
foreach ($g in @('Domain Admins','Enterprise Admins','Schema Admins','Backup Operators','Account Operators')) {
Get-ADGroupMember -Identity $g -Recursive |
Select-Object @{n='Group';e={$g}}, SamAccountName, objectClass, distinguishedName |
Export-Csv "$out\$g.csv" -NoTypeInformation -Encoding UTF8
}
Get-ADUser -Filter {Enabled -eq $false} -Properties MemberOf |
Where-Object { $_.MemberOf } |
Select-Object SamAccountName, DistinguishedNameDisabled с MemberOf — типичный мусор.
2. VPN и кастом
Get-ADGroupMember -Identity 'VPN-Users' -Recursive |
Select-Object SamAccountName, objectClassПодставьте свои группы из реестра, не выдумывайте чужие имена сверх шаблона Contoso.
3. Linux
По CMDB узлам:
getent group sudo
sudo ls /etc/sudoers.d
# authorized_keys root
sudo wc -l /root/.ssh/authorized_keys4. Сравнение с реестром
Любая строка в CSV, которой нет в CMDB Privileged — unknown. Любая строка реестра без факта — stale document.
Решение
Квартальный ритуал (4 часа)
- Выгрузки (день 1).
- Сверка с HR: уволенные, декрет, подрядчики с истекшим договором.
- Сверка с реестром: снять или продлить письменно.
- CHG на снятие групп.
- Обновить
last-review, положить CSV в закрытый каталог (не общий чат). - Короткий отчёт: сколько снято, сколько исключений.
Политика исключений
Временный доступ: дата конца в реестре. На аудите дата в прошлом = снять без дискуссии, либо новый CHG.
Снятие без героизма
Не чистите DA в пятницу пачкой. По одной учётке, проверка входа break-glass, запись в журнале.
Remove-ADGroupMember -Identity 'VPN-Users' -Members 'old.contractor' -Confirm:$false
# Confirm по политике: лучше интерактивно в окне, не слепой -Confirm:$false на DAОблако и панели
Тот же квартал: список Global Admin, гипервизор, firewall admin. Факт из консоли, не память.
Что снимать в первую очередь
Очередь чистки: disabled в привилегированных группах; подрядчики с датой < сегодня; личные учётки в DA при наличии отдельной admin-учётки; локальный admin на FILE01, которого нет в реестре; ключ SSH уволенного на UBNT01. Не начинайте с экзотики PIM, пока в DA восемь человек.
Заведите CHG-пакет «access-review-2026-Q3» и таскайте туда все снятия квартала, чтобы в журнале было одно место. После снятия VPN — проверка, что учётная запись не входит (попытка тестового клиента, если ещё есть профиль — ожидание отказа).
Сверка с HR: список уволенных за 90 дней vs enabled AD. Любое совпадение — провал offboarding, чините процесс, не только этого человека.
Храните CSV выгрузки квартала: при следующем аудите видно тренд DA. Если число людей в DA выросло без CHG — процесс сломан, даже если «все хорошие».
Дополнительно пройдитесь по вложенности: группа IT-All не должна быть членом Domain Admins «для удобства рассылки». Recursive это покажет, плоская схема потом сэкономит часы.
Как проверить, что проблема устранена
- В календаре 4 слота на год.
- Акты/отчёты двух последних кварталов существуют.
- Повторная выгрузка через неделю после чистки не показывает снятых.
- Подрядчик с истекшим сроком не в VPN.
Метрика: число членов DA (людей) не растёт без CHG.
Перед снятием из Domain Admins проверьте вход второй привилегированной учёткой и консоль HV01. Пакет «почистим всех подрядчиков за час» без наблюдателя — способ закрыть себе вход. Квартальный аудит должен заканчиваться не только CSV, но и обновлённым реестром Privileged с новой датой last-review. Если дата не двигается, ритуал был театром.
На Linux добавьте в квартал sudo grep -R . /etc/sudoers.d и список uid 0. Локальный admin с NOPASSWD : ALL, которого нет в CMDB, — такой же DA, только без Get-ADGroupMember. Внесите и снимите по CHG, не «потом».
Если не помогло
- Вложенность «IT-All → DA»: разберите вложенность, иначе Recursive всегда будет шокировать. Цель — упростить.
- GMSA в группах: не удаляйте как людей, пометьте service.
- Нет HR-выгрузки: сверка хотя бы с enabled AD vs lastLogon 90 дней — грубая сеть.
Профилактика
- Изменение DA только через CHG.
- Offboarding чеклист.
- Алерт на изменение привилегированных групп (security-раздел), плюс квартал как страховка.
- Онбординг: временные права с датой.
FAQ
Почему не каждый месяц?
Можно на DA monthly, полный контур quarterly. Если людей двое — квартала хватает при живом offboarding.
Нужны ли скрипты в SIEM?
Полезно. Не заменяет подпись Ивана Петрова на сверке: SIEM не знает, что подрядчик ещё нужен.
Что с локальными админами ПК?
Не в этом цикле целиком. Jump-серверы — да. Массовые ПК — LAPS/отдельный обзор.
Аудит прав = IT-аудит?
Нет. IT-аудит шире (первичный аудит). Этот процесс — только доступы.
Куда складывать CSV с ФИО админов?
Как реестр: ограниченный ACL. Не в Telegram.
Сняли лишнее, сломалась 1С. Что не так?
Сервисная учётка сидела в группе «для людей». Вынесите service accounts в отдельные группы до следующей чистки.