เครื่องมือ MSP
RMM ของคุณเรียกใช้ API อยู่แล้ว
Clavitor ทำให้การเรียกใช้เหล่านั้นปลอดภัยครับ
ช่างเทคนิคของคุณใช้ Datto, N-able และ ConnectWise ทุกวัน ทุกสคริปต์ ทุกการทำงานอัตโนมัติ และทุกงานที่ตั้งเวลาไว้ล้วนต้องการข้อมูลรับรอง ปัจจุบันข้อมูลเหล่านี้ถูกเก็บในตัวแปรสคริปต์ ฟิลด์กำหนดเอง หรือห้องนิรภัยร่วมกันที่ทุกคนสามารถอ่านได้ พร็อกซีและ CLI ของ Clavitor จะเปลี่ยนสิ่งนี้โดยไม่เปลี่ยน workflow ของคุณครับ
รูปแบบพร็อกซีสำหรับ RMM
ตั้งค่า HTTPS_PROXY บน endpoint แล้วสคริปต์ที่มีอยู่ของคุณจะทำงานได้เหมือนเดิมโดยไม่มีการเปลี่ยนแปลง พร็อกซีจะดักจับคำขอ 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 และพร็อกซีต่างทำงานได้แบบ native ครับ
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
Render — เทมเพลตการกำหนดค่า
# 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 บน endpoint ครับ
ติดตั้งผ่านโปรไฟล์ IT Automation
ในไลบรารีสคริปต์ Atera ให้สร้างสคริปต์ PowerShell ชื่อ Install Clavitor ที่มีหนึ่งพารามิเตอร์ ในโปรไฟล์ IT Automation ที่รันสคริปต์นี้ ให้เรียกใช้ด้วยตัวยึดตำแหน่งฟิลด์ระดับลูกค้า:
Install-Clavitor.ps1 -Token "{[Atera.Customer.CustomField.ClavitorToken]}"Atera จะแทนที่ค่าก่อนที่เอเจนต์จะอ่านรายการอาร์กิวเมนต์ สคริปต์:
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
ดึงข้อมูลรับรองขณะรันไทม์
เมื่อ endpoint ถูกลงทะเบียนแล้ว สคริปต์ 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, secureConnectWise 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, secureDatto 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-NullKaseya VSA
ขั้นตอนเอเจนต์ VSA จะแทนที่มาโคร #variable# ลงในอาร์กิวเมนต์ PowerShell ขณะรันไทม์ จากนั้นรันสคริปต์ผ่านกลุ่มขั้นตอน executePowershell (executePowerShell64BitSystem ฯลฯ) ฟิลด์กำหนดเองในระเบียนเอเจนต์จะเก็บโทเค็น Clavitor และขั้นตอนจะส่งไปยัง init ผ่าน 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 เลยครับ
Script Repository: ดึงข้อมูลรับรองขณะรันไทม์
สำหรับสคริปต์เฉพาะกิจที่พุชผ่าน Script Repository (Configuration → Repository → Scripts/Software) endpoint จะถูกเริ่มต้นเรียบร้อยแล้ว สคริปต์เพียงเรียกใช้ 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, secureN-able N-sight
N-sight (เดิมคือ SolarWinds RMM) รันเอนจิน Automation Manager เดียวกับ N-central พร้อม Script Manager สำหรับ .ps1, AMP, batch และประเภทสคริปต์อื่นๆ รูปแบบจะเหมือนกับ N-central คือ AMP ที่มีพารามิเตอร์อินพุตสำหรับโทเค็น จากนั้นทุกอย่างจะถูกแปลงขณะรันไทม์ครับ
Script Manager: ติดตั้งผ่าน Automated Task
อัปโหลด Install-Clavitor.ps1 ไปยัง Settings → Script Manager พร้อมพารามิเตอร์สำหรับโทเค็น แนบเป็น Automated Task บน endpoint และส่งโทเค็นเป็นอาร์กิวเมนต์สคริปต์จากการตั้งค่าระดับอุปกรณ์:
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, secureNinjaOne
สคริปต์ NinjaOne ที่รันบน endpoint สามารถอ่านและเขียนฟิลด์กำหนดเองผ่าน cmdlet ในตัว: 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
Custom Action: เรียกใช้ 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.statusSyncro
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 สำหรับ endpoint ที่ถูกปรับใช้เท่านั้นครับ
ขอบเขตต่อลูกค้า
ห้องนิรภัยของลูกค้าแต่ละรายมีโทเค็นเอเจนต์ของตัวเอง การเข้าถึงของช่างเทคนิคถูกควบคุมโดยขอบเขต ไม่ใช่โดย "ผู้ที่สามารถล็อกอินเข้าคอนโซล RMM ได้" ครับ
การตรวจสอบต่อสคริปต์
การเข้าถึงข้อมูลรับรองทุกครั้งจะถูกบันทึกไว้ ว่าสคริปต์ใด endpoint ใด ข้อมูลรับรองใด และเมื่อใด ลูกค้าของคุณสามารถเห็นบันทึกการตรวจสอบได้ และคุณสามารถพิสูจน์ได้ว่าใครเข้าถึงอะไรครับ
เพิกถอนได้ในคลิกเดียว
ลูกค้าเลิกใช้บริการหรือ เพิกถอนโทเค็นเอเจนต์ของพวกเขา ทุก endpoint จะหยุดดึงข้อมูลรับรองทันที ไม่ต้องทำการหมุนเวียนรหัสผ่าน ไม่ต้องล้างคุณสมบัติกำหนดเองทั่ว 200 เครื่องครับ
หยุดจัดเก็บข้อมูลรับรองใน RMM ของคุณครับ
หนึ่ง CLI สำหรับลูกค้าทุกราย ข้อมูลรับรองทุกชิ้นถูกกำหนดขอบเขต ตรวจสอบ และเพิกถอนได้ครับ