Войти Бесплатно навсегда Начать

Инструменты MSP

Ваши RMM уже делают вызовы API. Clavitor делает их безопасными.

Ваши техники ежедневно используют Datto, N-able и ConnectWise. Каждый скрипт, каждая автоматизация, каждая запланированная задача требует учетных данных. Сегодня они находятся в переменных скриптов, пользовательских полях или общем хранилище, доступном для чтения всем. Прокси и CLI Clavitor меняют это, не изменяя ваших рабочих процессов.

Прокси-шаблон для RMM

Установите HTTPS_PROXY на конечной точке, и ваши существующие скрипты будут работать без изменений. Прокси перехватывает исходящие HTTPS-запросы, разрешает ссылки clavitor:// в заголовках и внедряет реальные учетные данные. Ваш скрипт никогда не увидит секрет. Ваша консоль RMM никогда не запишет его в журнал.

# On the managed endpoint — one-time setup
$env:HTTPS_PROXY = "http://localhost:1983"

# Your existing automation scripts work unchanged
# The proxy resolves clavitor:// references in request headers
Invoke-RestMethod -Uri "https://api.openai.com/v1/models" `
  -Headers @{ Authorization = "Bearer clavitor://OpenAI/key" }

PowerShell

PowerShell — это ежедневный язык MSP. CLI и прокси работают нативно.

CLI — отдельные значения

# Resolve, use, scrub — the credential lives for one statement
$cred = clavitor-cli get "Client-Acme/VPN" --field password
Add-VpnConnection -Name "Acme" -ServerAddress "vpn.acme.com" -AuthenticationMethod MSChapv2
$secure = ConvertTo-SecureString $cred -AsPlainText -Force
Set-VpnConnectionUsernamePassword -ConnectionName "Acme" -Password $secure
Remove-Variable cred, secure

Рендеринг — шаблоны конфигурации

# Template with clavitor:// references (safe to store in your RMM)
clavitor-cli render monitoring-config.json | `
  Set-Content -Path "C:\ProgramData\Monitor\config.json"

Прокси — прозрачное внедрение

$env:HTTPS_PROXY = "http://localhost:1983"

# Every Invoke-RestMethod and Invoke-WebRequest now resolves clavitor://
Invoke-RestMethod -Uri "https://api.datto.com/v1/devices" `
  -Headers @{ Authorization = "Bearer clavitor://Datto API/key" }

Atera

Atera подставляет заполнители пользовательских полей в параметры скрипта во время выполнения, используя синтаксис {[Atera.<level>.CustomField.<name>]}. Передайте токен Clavitor в одноразовый установочный скрипт в качестве параметра; последующие скрипты будут вызывать CLI на конечной точке.

Установка через профиль IT-автоматизации

В библиотеке скриптов Atera создайте PowerShell-скрипт Install Clavitor с одним параметром. В профиле IT-автоматизации, который его запускает, вызовите его с помощью заполнителя поля уровня клиента:

Install-Clavitor.ps1 -Token "{[Atera.Customer.CustomField.ClavitorToken]}"

Atera подставляет значение перед тем, как агент прочитает список аргументов. Скрипт:

param([Parameter(Mandatory)][string]$Token)
$Token | clavitor-cli init
Remove-Variable Token

Разрешение учетных данных во время выполнения

После регистрации конечной точки каждый последующий скрипт Atera будет считывать учетные данные из хранилища — Atera хранит только слот токена:

$pass = clavitor-cli get "Client-Acme/SQL Server" --field password
$secure = ConvertTo-SecureString $pass -AsPlainText -Force
Invoke-Sqlcmd -ServerInstance "sql.acme.local" `
  -Credential (New-Object PSCredential("sa", $secure)) -Query "SELECT 1"
Remove-Variable pass, secure

ConnectWise Automate

Automate подставляет макросы Extra Data Field (EDF) в аргументы шагов скрипта, используя синтаксис {%^el:FieldName^%} (EDF уровня компьютера). CLI устанавливается через скрипт Automate, который загружает бинарный файл и вызывает шаг PowerShell с токеном, переданным в качестве параметра — значение EDF заменяется до выполнения шага скрипта.

Скрипт Automate: установка

В редакторе скриптов Automate создайте скрипт с двумя шагами:

Step 1  File Download from LTShare       clavitor-cli.exe → %windir%\Temp\
Step 2  Shell Execute (PowerShell)       Install-Clavitor.ps1 -Token "{%^el:ClavitorToken^%}"

Макрос {%^el:ClavitorToken^%} заменяется значением EDF уровня компьютера перед запуском шага PowerShell. Храните токены длиной менее 255 символов, чтобы оставаться в пределах лимита подстановки LabReplace. Сам скрипт:

# Install-Clavitor.ps1
param([Parameter(Mandatory)][string]$Token)
$Token | clavitor-cli init
Remove-Variable Token

Скрипт Automate: ротация учетных данных домена

Последующие скрипты считывают данные из хранилища и записывают статус обратно в EDF для дашбординга:

$cred = clavitor-cli get "Client-Delta/Domain Admin" --field password
$secure = ConvertTo-SecureString $cred -AsPlainText -Force
Reset-ComputerMachinePassword `
  -Credential (New-Object PSCredential("administrator", $secure))
# Push timestamp back to EDF "LastRotation" via Automate's ExtraData Set Value step
Write-Output (Get-Date -Format o)
Remove-Variable cred, secure

Datto RMM

Datto RMM предоставляет переменные сайта и глобальные переменные компонентам PowerShell в виде переменных среды с префиксом $env:; пользовательские поля (UDF) предоставляются как $env:UDF_1 до $env:UDF_30. Один компонент устанавливает CLI; все последующие считывают данные из хранилища.

Компонент: установка и инициализация

Определите переменную сайта ClavitorToken в консоли Datto — она появится в компоненте как $env:ClavitorToken:

# Datto RMM component: bootstrap Clavitor CLI
# Site variable "ClavitorToken" → $env:ClavitorToken at runtime
$env:ClavitorToken | clavitor-cli init

Компонент: мониторинг API через прокси

Последующие компоненты записывают ссылки clavitor:// в заголовки запросов — прокси разрешает их на хосте. Учетные данные никогда не попадают в память скрипта или журналы Datto:

# Scheduled monitor — runs every 15 minutes
$env:HTTPS_PROXY = "http://localhost:1983"
$response = Invoke-RestMethod -Uri "https://api.client.com/v1/status" `
  -Headers @{ Authorization = "Bearer clavitor://Client-Bravo/Monitoring API" }

# Push a status code back into UDF_5 for the Datto dashboard
New-ItemProperty -Path "HKLM:\SOFTWARE\CentraStage" `
  -Name "Custom5" -Value $response.status -Force | Out-Null

Kaseya VSA

Процедуры агента VSA подставляют макросы #variable# в аргументы PowerShell во время выполнения, затем выполняют скрипт через семейство шагов executePowershell (executePowerShell64BitSystem и т. д.). Пользовательское поле в записи агента содержит токен Clavitor; процедура передает его для инициализации через stdin.

Процедура агента: установка

Добавьте пользовательское поле агента ClavitorToken (Audit → Edit Profile → Custom Fields), затем создайте процедуру с двумя шагами:

Step 1  Get File from VSA Server     clavitor-cli.exe → C:\Program Files\Clavitor\
Step 2  Execute PowerShell (64 Sys)  "C:\Program Files\Clavitor\clavitor-cli.exe init" \
                                     stdin = "#vAgentConfiguration.ClavitorToken#"

Макрос #vAgentConfiguration.ClavitorToken# заменяется значением пользовательского поля перед выполнением команды VSA — токен не отображается в истории процедур VSA.

Процедура агента: ротация привилегированных учетных данных

После инициализации любая последующая процедура считывает данные из хранилища:

# Executed via executePowerShell64BitSystem
$cred = clavitor-cli get "Client-Hotel/Local Admin" --field password
$secure = ConvertTo-SecureString $cred -AsPlainText -Force
Set-LocalUser -Name "Administrator" -Password $secure
Remove-Variable cred, secure

N-able N-central

Единицей автоматизации является AMP (Automation Manager Policy) — политика на основе PowerShell, созданная в Automation Manager. Пользовательские свойства на уровне организации, клиента или сайта могут быть переданы объекту Run PowerShell Script в качестве входных параметров.

AMP: установка с пользовательским свойством в качестве входных данных

Добавьте пользовательское свойство ClavitorToken на уровне клиента (Administration → Custom Properties). В Automation Manager создайте AMP, чей объект Run PowerShell Script привязывает входной параметр Token к этому пользовательскому свойству. Скрипт:

param([Parameter(Mandatory)][string]$Token)
$Token | clavitor-cli init
Remove-Variable Token

Значение пользовательского свойства передается как $Token. Оно никогда не появляется в экспортированном XML AMP или в журнале аудита N-central.

Репозиторий скриптов: получение учетных данных во время выполнения

Для ad-hoc скриптов, отправляемых через Репозиторий скриптов (Configuration → Repository → Scripts/Software), конечная точка уже инициализирована — скрипт просто вызывает CLI:

$dbPass = clavitor-cli get "Client-Bcme/SQL Server" --field password
$secure = ConvertTo-SecureString $dbPass -AsPlainText -Force
Invoke-Sqlcmd -ServerInstance "sql.bcme.com" `
  -Credential (New-Object PSCredential("sa", $secure)) -Query "SELECT 1"
Remove-Variable dbPass, secure

N-able N-sight

N-sight (ранее SolarWinds RMM) использует тот же движок Automation Manager, что и N-central, а также Script Manager для скриптов .ps1, AMP, пакетных файлов и других типов. Шаблон аналогичен N-central: AMP с входным параметром для токена, затем все остальное разрешается во время выполнения.

Script Manager: установка через Automated Task

Загрузите Install-Clavitor.ps1 в Settings → Script Manager с параметром для токена. Прикрепите его как Automated Task на конечной точке; передайте токен в качестве аргумента скрипта из настройки уровня устройства:

param([Parameter(Mandatory)][string]$Token)
$Token | clavitor-cli init
Remove-Variable Token

Automated Task: запланированное резервное копирование с учетными данными хранилища

После инициализации запланированные задачи извлекают учетные данные из хранилища. Любой стандартный вывод длиной до 255 символов отображается обратно на панели мониторинга N-sight:

$pass = clavitor-cli get "Client-India/SQL Backup" --field password
$secure = ConvertTo-SecureString $pass -AsPlainText -Force
Backup-SqlDatabase -ServerInstance "sql.india.com" -Database "AppDB" `
  -Credential (New-Object PSCredential("backup-svc", $secure))
Write-Output "backup OK $(Get-Date -Format o)"
Remove-Variable pass, secure

NinjaOne

Скрипты NinjaOne, выполняющиеся на конечной точке, могут считывать и записывать пользовательские поля с помощью встроенных командлетов: Ninja-Property-Get <name> возвращает значение, Ninja-Property-Set <name> <value> записывает его обратно. Храните токен Clavitor в пользовательском поле организации (тип Secure, чтобы он был доступен только для записи из консоли); установочный скрипт считывает его один раз.

Установочный скрипт: чтение токена из пользовательского поля

В Administration → Library → Custom Fields добавьте поле организации clavitorToken типа Secure. Затем запустите установочный скрипт:

$token = Ninja-Property-Get clavitorToken
$token | clavitor-cli init
Remove-Variable token

Пользовательское действие: вызов API через прокси

После установки автоматизации вызывают внешние API через прокси — учетные данные никогда не копируются в переменную скрипта:

$env:HTTPS_PROXY = "http://localhost:1983"
$response = Invoke-RestMethod -Uri "https://api.client-echo.com/v1/status" `
  -Headers @{ Authorization = "Bearer clavitor://Client-Echo/Monitoring API" }

# Push the result back to a device custom field for dashboarding
Ninja-Property-Set lastApiStatus $response.status

Syncro

Syncro предоставляет пользовательские поля активов и теги как переменные скрипта Platform, используя синтаксис двойных фигурных скобок {{asset_custom_field_<name>}}. Определите переменную скрипта типа Platform и привяжите ее к полю — Syncro подставит значение в параметр PowerShell во время выполнения скрипта.

Скрипт Syncro: установка

Создайте пользовательское поле актива clavitor_token. В редакторе скриптов объявите переменную Token типа Platform, привязанную к {{asset_custom_field_clavitor_token}}; передайте ее в параметр PowerShell в теле скрипта:

param([Parameter(Mandatory)][string]$Token)
$Token | clavitor-cli init
Remove-Variable Token

Панель Quick Help в нижней части каждого редактора скриптов Syncro перечисляет все доступные переменные платформы для контекста актива, клиента и заявки.

Скрипт Syncro: подключение VPN с использованием учетных данных хранилища

После установки скрипты и Automated Remediations разрешают учетные данные из хранилища и используют их напрямую:

$pass = clavitor-cli get "Client-Golf/VPN" --field password
$secure = ConvertTo-SecureString $pass -AsPlainText -Force
Add-VpnConnection -Name "Golf" -ServerAddress "vpn.golf.com" `
  -AuthenticationMethod MSChapv2 -Force
Set-VpnConnectionUsernamePassword -ConnectionName "Golf" -Password $secure
# Write status back to asset for Syncro dashboard
Rmm-Alert -Category "vpn-status" -Body "Golf connected $(Get-Date -Format o)"
Remove-Variable pass, secure

Почему это важно для MSP

Каждая платформа RMM хранит учетные данные где-то — пользовательские свойства, переменные сайта, дополнительные поля данных, параметры скрипта. Каждый техник с доступом к консоли может их видеть. Каждое нарушение безопасности вашей консоли RMM раскрывает учетные данные каждого клиента.

Clavitor перемещает учетные данные из RMM. RMM хранит только токен агента (один на клиента). Токен предоставляет ограниченный доступ к хранилищу этого клиента. Нарушение безопасности вашей консоли RMM раскрывает токены, а не учетные данные — и каждый токен имеет IP-белый список для конечной точки, на которой он был развернут.

Ограничено по клиенту

Каждое хранилище клиента имеет свой собственный токен агента. Доступ техников контролируется областью действия, а не тем, "кто может войти в консоль RMM".

Аудит по скрипту

Каждый доступ к учетным данным регистрируется — какой скрипт, какая конечная точка, какие учетные данные, когда. Ваши клиенты могут видеть журнал аудита. Вы можете доказать, кто и что получил доступ.

Отозвано одним щелчком мыши

Клиент уходит? Отозвите его токен агента. Каждая конечная точка немедленно перестает разрешать учетные данные. Нет паролей для ротации, нет пользовательских свойств для очистки на 200 машинах.

Прекратите хранить учетные данные в вашем RMM.

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