MSPツール
RMMは既にAPIコールを実行しています。
Clavitorはそれを安全に保ちます。
技術者は日々DatDatto、N-able、ConnectWiseを使用しています。すべてのスクリプト、自動化、スケジュールされたタスクには資格情報が必要です。現在、それらはスクリプト変数、カスタムフィールド、または誰でも閲覧できる共有ヴォルトに保存されています。ClavitorのプロキシとCLIは、ワークフローを変更することなく、その状況を改善します。
RMMのためのプロキシパターン
エンドポイントで HTTPS_PROXY を設定するだけで、既存のスクリプトは変更なしで動作します。プロキシが送信されるHTTPSリクエストをインターセプトし、ヘッダー内の clavitor:// 参照を解決して、実際の資格情報を注入します。スクリプトが機密情報を目にすることはありません。RMMコンソールにログが残ることもありません。
# 管理対象のエンドポイントでの設定 — 初回のみ
$env:HTTPS_PROXY = "http://localhost:1983"
# 既存の自動化スクリプトは変更なしで動作します
# プロキシがリクエストヘッダー内の clavitor:// 参照を解決します
Invoke-RestMethod -Uri "https://api.openai.com/v1/models" `
-Headers @{ Authorization = "Bearer clavitor://OpenAI/key" }PowerShell
PowerShellはMSPにとって日常的な言語です。CLIとプロキシの両方がネイティブに動作します。
CLI — 単一の値
# 解決、使用、消去 — 資格情報は1つのステートメントの間だけ存在します $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 — 設定テンプレート
# clavitor:// 参照を含むテンプレート (RMMに安全に保存可能) clavitor-cli render monitoring-config.json | ` Set-Content -Path "C:\ProgramData\Monitor\config.json"
Proxy — 透明な注入
$env:HTTPS_PROXY = "http://localhost:1983"
# すべての Invoke-RestMethod および Invoke-WebRequest が 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 Automation プロファイル経由のインストール
Ateraのスクリプトライブラリで、1つのパラメータを持つ Install Clavitor PowerShellスクリプトを作成します。それを実行するIT Automationプロファイルでは、顧客レベルのフィールドプレースホルダーを使用して呼び出します。
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, secureConnectWise Automate
Automateは、{%^el:FieldName^%} 構文(コンピュータレベルのEDF)を使用して、スクリプトステップの引数にExtra Data Field (EDF) マクロを代入します。CLIは、バイナリをダウンロードし、トークンをパラメータとして渡すPowerShellステップを呼び出すAutomateスクリプトを介してインストールされます。EDFの値は、スクリプトステップが実行される前に置換されます。
Automateスクリプト: インストール
Automateスクリプトエディタで、2つのステップを持つスクリプトを作成します。
Step 1 File Download from LTShare clavitor-cli.exe → %windir%\Temp\
Step 2 Shell Execute (PowerShell) Install-Clavitor.ps1 -Token "{%^el:ClavitorToken^%}"{%^el:ClavitorToken^%} マクロは、PowerShellステップが実行される前にコンピュータレベルのEDF値に置換されます。LabReplaceの置換制限内に収めるため、トークンは255文字以内にしてください。スクリプト自体は以下の通りです。
# 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))
# AutomateのExtraData Set Valueステップを介してタイムスタンプをEDF "LastRotation" に書き戻す
Write-Output (Get-Date -Format o)
Remove-Variable cred, secureDatto RMM
Datto RMMは、サイトおよびグローバル変数を $env: プレフィックスを持つ環境変数としてPowerShellコンポーネントに公開します。ユーザー定義フィールド (UDF) は $env:UDF_1 から $env:UDF_30 として公開されます。1つのコンポーネントでCLIをインストールし、それ以降のすべてがヴォルトから読み取ります。
コンポーネント: インストールと初期化
Dattoコンソールでサイト変数 ClavitorToken を定義します。これはコンポーネント内で $env:ClavitorToken として現れます。
# Datto RMMコンポーネント: Clavitor CLIのブートストラップ # サイト変数 "ClavitorToken" → 実行時に $env:ClavitorToken $env:ClavitorToken | clavitor-cli init
コンポーネント: プロキシ経由のAPIモニター
後続のコンポーネントは、リクエストヘッダーに clavitor:// 参照を書き込みます。プロキシがホスト上でそれらを解決します。資格情報がスクリプトのメモリやDattoのログに入ることはありません。
# スケジュールされたモニター — 15分ごとに実行
$env:HTTPS_PROXY = "http://localhost:1983"
$response = Invoke-RestMethod -Uri "https://api.client.com/v1/status" `
-Headers @{ Authorization = "Bearer clavitor://Client-Bravo/Monitoring API" }
# ステータスコードをDattoダッシュボード用のUDF_5に書き戻す
New-ItemProperty -Path "HKLM:\SOFTWARE\CentraStage" `
-Name "Custom5" -Value $response.status -Force | Out-NullKaseya VSA
VSAエージェントプロシージャは、実行時に #variable# マクロをPowerShell引数に代入し、その後 executePowershell ステップファミリー (executePowerShell64BitSystem など) を介してスクリプトを実行します。エージェントレコードのカスタムフィールドにClavitorトークンを保持し、プロシージャはそれをstdinを通じてinitに渡します。
エージェントプロシージャ: インストール
エージェントのカスタムフィールド ClavitorToken を追加し (Audit → Edit Profile → Custom Fields)、2つのステップを持つプロシージャを作成します。
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のプロシージャ履歴には表示されません。
エージェントプロシージャ: 特権資格情報のローテーション
初期化後は、その後のプロシージャはヴォルトから読み取ります。
# 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) です。これはAutomation Managerで構築されたPowerShellベースのポリシーです。組織、顧客、またはサイトレベルのカスタムプロパティを、Run PowerShell Script オブジェクトの入力パラメータとして渡すことができます。
AMP: カスタムプロパティを入力として使用したインストール
顧客レベルでカスタムプロパティ ClavitorToken を追加します (Administration → Custom Properties)。Automation Managerで、Run PowerShell Script オブジェクトの入力パラメータ Token をそのカスタムプロパティにバインドするAMPを作成します。スクリプトは以下の通りです。
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
カスタムプロパティの値は $Token として流し込まれます。これはAMPの書き出し用XMLやN-centralの監査ログには決して表示されません。
スクリプトリポジトリ: 実行時の資格情報取得
Script Repository (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, secureN-able N-sight
N-sight (旧SolarWinds RMM) は、N-centralと同じAutomation Managerエンジンを実行し、さらに .ps1、AMP、バッチ、その他のスクリプトタイプ用のScript Managerを備えています。パターンはN-centralと同様です。トークンのための入力パラメータを持つAMPを使用し、それ以外は実行時に解決されます。
Script Manager: 自動タスク経由のインストール
Install-Clavitor.ps1 を Settings → Script Manager に、トークン用のパラメータと共にアップロードします。それをエンドポイントの自動タスク (Automated Task) としてアタッチし、デバイスレベルの設定からスクリプト引数としてトークンを渡します。
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
自動タスク: ヴォルト資格情報を使用したスケジュールバックアップ
初期化されると、スケジュールされたタスクはヴォルトから資格情報を取得します。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スクリプトは、組み込みのcmdletを通じてカスタムフィールドを読み書きできます。Ninja-Property-Get <name> は値を返し、Ninja-Property-Set <name> <value> は値を書き込みます。Clavitorトークンは組織のカスタムフィールド (コンソールからは書き込み専用となるよう Secure タイプを選択) に保存し、インストールスクリプトで一度だけ読み取ります。
インストールスクリプト: カスタムフィールドからのトークン読み取り
Administration → Library → Custom Fields で、Secureタイプの組織フィールド clavitorToken を追加します。その後、インストールスクリプトを実行します。
$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" }
# 結果をダッシュボード用のデバイスカスタムフィールドに書き戻す
Ninja-Property-Set lastApiStatus $response.statusSyncro
Syncroは、{{asset_custom_field_<name>}} という二重中括弧構文を使用して、アセットのカスタムフィールドとタグを Platform スクリプト変数として公開します。Platformタイプのスクリプト変数を定義し、それをフィールドにバインドします。Syncroはスクリプト実行時にその値をPowerShellパラメータに代入します。
Syncroスクリプト: インストール
アセットのカスタムフィールド clavitor_token を作成します。スクリプトエディタで、{{asset_custom_field_clavitor_token}} にバインドされた Platform タイプの変数 Token を宣言し、スクリプト本体のPowerShellパラメータに渡します。
param([Parameter(Mandatory)][string]$Token) $Token | clavitor-cli init Remove-Variable Token
すべてのSyncroスクリプトエディタの下部にあるQuick Helpパネルには、アセット、顧客、およびチケットのコンテキストで使用可能なすべてのプラットフォーム変数がリストされています。
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 # Syncroダッシュボード用にステータスをアセットに書き戻す Rmm-Alert -Category "vpn-status" -Body "Golf connected $(Get-Date -Format o)" Remove-Variable pass, secure
MSPにとっての重要性
すべてのRMMプラットフォームは、カスタムプロパティ、サイト変数、Extra Data Field、スクリプトパラメータなど、どこかに資格情報を保存しています。コンソールへのアクセス権を持つすべての技術者がそれらを見ることができます。RMMコンソールが侵害されると、すべてのクライアントの資格情報が漏洩します。
Clavitorは資格情報をRMMの外へ移動させます。RMMが保存するのはエージェントトークン(クライアントごとに1つ)のみです。トークンは、そのクライアントのヴォルトへのスコープ付きアクセスを許可します。RMMコンソールが侵害されても、漏洩するのはトークンであり、資格情報ではありません。さらに、各トークンはデプロイされたエンドポイントに対してIPホワイトリスト化されています。
クライアントごとにスコープ化
各クライアントのヴォルトには、独自の専用エージェントトークンがあります。技術者のアクセスは「誰がRMMコンソールにログインできるか」ではなく、スコープによって制御されます。
スクリプトごとに監査可能
すべての資格情報アクセスはログに記録されます。どのスクリプト、どのエンドポイント、どの資格情報が、いつ使用されたか。クライアントは監査証跡を確認でき、誰が何にアクセスしたかを証明できます。
ワンクリックで無効化
クライアントが解約しましたか?エージェントトークンを無効化するだけです。すべてのエンドポイントで資格情報の解決が即座に停止します。200台のマシンに対してパスワードをローテーションしたり、カスタムプロパティをクリアしたりする必要はありません。
RMMに資格情報を保存するのはもうやめましょう。
1つのCLI。すべてのお客様に。すべての資格情報がスコープ化、監査、および無効化可能です。