サインイン ずっと無料 はじめる

MSPツール

お使いのRMMはすでにAPI呼び出しを行っています。Clavitorがその安全性を確保します。

技術者の皆様は毎日Datto、N-able、ConnectWiseを使用しています。すべてのスクリプト、自動化、スケジュールタスクには資格情報が必要です。現在、これらはスクリプト変数、カスタムフィールド、または誰でも読み取り可能な共有ボールトに保存されています。ClavitorのプロキシとCLIは、ワークフローを変更することなくこの状況を改善します。

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

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を呼び出します。

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, secure

ConnectWise 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^%}"

PowerShellステップが実行される前に、{%^el:ClavitorToken^%}マクロはコンピューターレベル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))
# 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は、サイト変数とグローバル変数を$env:プレフィックス付きの環境変数としてPowerShellコンポーネントに公開します。ユーザー定義フィールド(UDF)は$env:UDF_1から$env:UDF_30として公開されます。1つのコンポーネントでCLIをインストールし、その後の処理はすべてボールトから読み取ります。

コンポーネント:インストールと初期化

Dattoコンソールでサイト変数ClavitorTokenを定義します。これはコンポーネント内で$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経由で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#"

VSAがコマンドを実行する前に、#vAgentConfiguration.ClavitorToken#マクロはカスタムフィールドの値に置換されます。トークンが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)であり、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の監査ログに表示されることはありません。

スクリプトリポジトリ:実行時に資格情報を取得

スクリプトリポジトリ(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)はN-centralと同じAutomation Managerエンジンを実行し、さらに.ps1、AMP、バッチなどのスクリプトタイプ用のスクリプトマネージャーを備えています。パターンはN-centralと同様で、トークン用の入力パラメータを持つAMPを使用し、その後の処理はすべて実行時に解決されます。

スクリプトマネージャー: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タイプ)に保存します。インストールスクリプトはこれを1回だけ読み取ります。

インストールスクリプト:カスタムフィールドからトークンを読み取る

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" }

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

Syncro

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
# 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が保存するのはエージェントトークン(クライアントごとに1つ)のみです。トークンは、そのクライアントのボールトへのスコープ付きアクセスを許可します。RMMコンソールが侵害されても露呈するのは資格情報ではなくトークンであり、各トークンはデプロイ先のエンドポイントのIPホワイトリストに登録されています。

クライアントごとのスコープ設定

各クライアントのボールトには独自のエージェントトークンがあります。技術者のアクセスは、「誰がRMMコンソールにログインできるか」ではなく、スコープによって制御されます。

スクリプトごとの監査

すべての資格情報アクセスは、どのスクリプト、どのエンドポイント、どの資格情報、いつアクセスしたかがログに記録されます。クライアントは監査証跡を確認でき、誰が何にアクセスしたかを証明できます。

ワンクリックで失効

クライアントが離脱した場合は、エージェントトークンを失効させます。すべてのエンドポイントで資格情報の解決が即座に停止します。200台のマシン全体でパスワードをローテーションしたり、カスタムプロパティをクリアしたりする必要はありません。

RMMに資格情報を保存するのはやめましょう。

1つのCLIですべてのクライアントに対応。すべての資格情報がスコープ設定され、監査可能で、失効可能です。