API経由でのESA RADIUSクライアントの作成
ESA保護がPAMモジュール経由で多くのLinux/Macデスクトップログインに統合され、ESAで多くのRADIUSクライアントを設定する必要がある場合は、次のPowerShellスクリプトを使用すると作業が簡単になります。
前提条件
- ESA WebコンソールでRADIUSクライアントを設定します。
- 基本設定 > IPアドレス:PAMモジュールをホスティングしているコンピューターのIPアドレスを入力します。このIPアドレスは、ESA RADIUSサーバーが通信できます
- 基本設定 > 共有シークレット:VPNアプライアンスに入力したのと同じ共有シークレットを入力します
- 認証 > クライアントの種類 > クライアントがユーザー名とパスワードを検証 - Access-Challengeを使用
- ESA WebコンソールでESA APIを有効にし、Management APIのAPI資格情報を追加します。
- 各VPNアプライアンスのIPアドレスと共有シークレットを<IP address>;<Shared Secret>ペアとして、.csvファイルにリストを作成します。
(例:
192.168.0.11;test1
192.168.0.12;test2
192.168.0.13;test3
スクリプトはどのように機能しますか。
このスクリプトは、.csvファイルの各行を読み取り、IPアドレスと共有シークレットのペアの行が見つかった数だけRADIUSクライアントを作成します。各RADIUSクライアントの認証セクションは、事前設定されたRADIUSクライアントに基づいて設定されます。
ESA API経由で新しいESA RADIUSクライアントを作成するためのサンプルPowerShellスクリプト。create_radius_clients.ps1ファイル
# 設定
# Management APIの資格情報 - username:password $credentials = "kjssgmarkm:dapweburnx"
# 認証サーバーのIPアドレスまたはFQDN $esaAuthenticationServer = "esac.eset.com"
# ESA WebコンソールのComponets > RADIUSで見つかったESA RADIUSサーバーの名前 $radiusServerName = "WIN-FMPA4KUT4S8 (invited by New invitation)"
# 事前設定されたESA RADIUSクライアントの名前 $baseRadiusClientName = "Base Client"
# 各VPNアプライアンスのIPアドレスと共有シークレットのリストは、clients.csvファイルに保存されます。 # clients.csvファイルは、このPowerShellスクリプトが存在するのと同じディレクトリにあります $csvImportFilePath = $PSScriptRoot + "\\clients.csv"
# ヘッダーの準備
$ErrorActionPreference = "Stop"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credentials)) $basicAuthHeader = "Basic $encodedCredentials" $headers = @{Authorization = $basicAuthHeader}
# find RADIUS server
$body = @{ componentType = "radius" } $bodyStr = $body | ConvertTo-Json $response = Invoke-WebRequest -Uri https://$esaAuthenticationServer/manage/v2/GetComponentSettings -Method POST -Body $bodyStr -ContentType "application/json" -Headers $headers
$components = $response.Content | ConvertFrom-Json
$radiusServerKey = $null foreach ($component in $components) { if ($component.Info.Name -ceq $radiusServerName) { $radiusServerKey = $component.Info.Key } }
if ($radiusServerKey -ceq $null) { Throw "RADIUS server not found: " + $radiusServerName }
# base RADIUS client
$body = @{ componentKey = $radiusServerKey } $bodyStr = $body | ConvertTo-Json $response = Invoke-WebRequest -Uri https://$esaAuthenticationServer/manage/v2/GetRadiusClients -Method POST -Body $bodyStr -ContentType "application/json" -Headers $headers
$clients = $response.Content | ConvertFrom-Json
$baseRadiusClientSettings = $null foreach ($client in $clients) { if ($client.ClientName -ceq $baseRadiusClientName) { $baseRadiusClientSettings = $client } }
if ($baseRadiusClientSettings -ceq $null) { Throw "RADIUS client not found: " + $baseRadiusClientName }
# create clients
foreach($line in [System.IO.File]::ReadLines($csvImportFilePath)) { $fields = $line.Split(';') if ($fields.Count -cne 2) { Throw "Invalid fields count: " + $line }
$ip = $fields[0] $sharedSecret = $fields[1]
$newClientSettings = $baseRadiusClientSettings | ConvertTo-Json | ConvertFrom-Json $newClientSettings.Id = [guid]::NewGuid().ToString("d") $newClientSettings.ClientName = "Generated - " + $ip $newClientSettings.ClientIp = $ip $newClientSettings.SharedSecret = $sharedSecret
$body = @{ componentKey = $radiusServerKey; client = $newClientSettings } $bodyStr = $body | ConvertTo-Json $response = Invoke-WebRequest -Uri https://$esaAuthenticationServer/manage/v2/CreateRadiusClient -Method POST -Body $bodyStr -ContentType "application/json" -Headers $headers }
echo "success" |