このレシピは、多数のコンピュータにポリシーを割り当てるスクリプトを作成します。スクリプトは、変更するコンピュータを検索し、各コンピュータにポリシーを割り当てます。
多数のコンピュータ (数百台または数千台) でタスクを実行する必要がある場合は、次のように小さなバッチで作業を実行します。
手順
- 少数のコンピュータを取得します。
- ポリシーを各コンピュータに一括で割り当てます。
- すべてのコンピュータにポリシーが割り当てられるまで、この手順を繰り返します。
次に進む前に
バッチを小さくすると、 Server & Workload Protection リソースをより効率的に使用できます。このレシピでは、すべてのコンピュータにポリシーを小さなバッチで割り当てます。
開始前の準備
jq for Bash
Bashスクリプトはjqを使用してJSONデータを解析します。インストールされているかどうかを確認するには、ターミナルまたは任意のコマンドラインツールを開き、次のコマンドを入力します。
jq --version
次の場合
jq
が見つかりません。ウェブサイトをクリックしてインストールします。必須項目
このレシピを完了するために必要な次の情報を収集します。
-
Server & Workload ProtectionのURL
-
APIキーの秘密鍵
-
割り当てるポリシーのID
ポリシーのIDがわからない場合は、ポリシーの検索入手レシピです。
バッシュ
手順
- ターミナルまたは任意のコマンドラインツールを開きます。
- 次のコマンドを入力して、リクエストに関する詳細を保存します。
<YOUR URL>
のURLでServer & Workload Protection、 と<YOUR SECRET KEY>
API キーのシークレットを使用して:url=<YOUR URL>
たとえば、url=https://cloudone.trendmicro.com
secret=<YOUR SECRET KEY>
たとえば、secret=5C58EADA-04BC-4ABC-45CF-B72925A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8=
- 次のコマンドを入力して、ポリシーの ID を保存します。
<YOUR POLCIY ID>
コンピューターの ID を使用して:policyId=<YOUR POLICY ID>
たとえば、policyId=1
- コンピュータを一括で検索してポリシーを割り当てる次のコードをコピーして貼り付けます。
pagesize=10; idOfLastFound=0 ; \ while [ $pagesize -gt 0 ]; do \ echo -e "\nGetting a batch of computers..." page=$(curl -X POST "$url/api/computers/search?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -# \ -d "{ \ \"searchCriteria\": [{ \ \"idValue\": \"$idOfLastFound\", \ \"idTest\": \"greater-than\"}], \ \"maxItems\": \"$pagesize\" \ }" \ -k | jq '.[]'); \ pagesize=$(echo $page | jq length); \ for (( i=0; i<$pagesize; i++)); do \ computerId=$(echo $page | jq ".[$i][\"ID\"]"); \ echo "Assigning policy to computer with ID $computerId"; \ curl -X POST "$url/api/computers/${computerId}?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -d "{ \"policyID\": \"$policyId\" }" -s -S -o /dev/null; \ done; \ idOfLastFound=$(echo $page | jq '.[-1]["ID"]'); \ done;
次に進む前に
そのBashスクリプトを詳しく見てみましょう
このスクリプトは、他のレシピで実行したスクリプトよりも少し複雑です。
ほとんどのコードはループ内で実行され、ループの各反復でコンピュータのバッチが検索および変更されます。検索で返されたコンピュータがなくなると、ループは終了します。まず、バッチのサイズを定義し、最初の反復で検索の基準として使用するコンピュータIDを設定します。
pagesize=10; idOfLastFound=0 ; \ while [ $pagesize -gt 0 ]; do \ ... done;
ループ内では、cURLを使用してコンピュータのバッチを検索します。この検索では、前の反復で検出された最後のIDよりも大きいIDを持つ10台のコンピュータが検出されます。結果は次のようにパイプされます。
jq
コンピュータのアレイを取得します。page=$(curl -X POST "$url/api/computers/search?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -# \ -d "{ \ \"searchCriteria\": [{ \ \"idValue\": \"$idOfLastFound\", \ \"idTest\": \"greater-than\"}], \ \"maxItems\": \"$pagesize\" \ }" \ -k | jq '.[]'); \
次に、返されたコンピュータの数を調べます。
pagesize=$(echo $page | jq length); \
各コンピュータには、cURLを使用してポリシーを割り当てます。
for (( i=0; i<$pagesize; i++)); do \ computerId=$(echo $page | jq ".[$i][\"ID\"]"); \ echo "Assigning policy to computer with ID $computerId"; \ curl -X POST "$url/api/computers/${computerId}?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -d "{ \"policyID\": \"$policyId\" }" -k -s -S -o /dev/null; \ done; \
最後に見つかったコンピュータのIDを見つけ、次の反復で検索の基準として使用します。
idOfLastFound=$(echo $page | jq '.[-1][\"ID\"]'); \
PowerShell
手順
- PowerShellを開きます。
- Managerがセキュアな接続を確立するために必要なTLS 1.2を使用するには、次のコマンドを入力します。
[Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12
- 次のコマンドを入力して、リクエストに関する詳細を保存します。
<YOUR URL>
あなたの URL とServer & Workload Protection、 と<YOUR SECRET KEY>
API キーのシークレットを使用して:-
$url = "<YOUR URL>"
たとえば、url=https://cloudone.trendmicro.com
-
$secret = "<YOUR API KEY SECRET>"
たとえば、$secret="5C58EADA-04BC-4ABC-45CF-B72725A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8="
-
$headers = @{‘api-version’ = “v1”; ‘api-secret-key’ = $secret; 'Content-Type' = "application/json"}
-
- 次のコマンドを入力して、ポリシーの ID を保存します。
<YOUR POLCIY ID>
コンピューターの ID を使用して:$policyId = <YOUR POLICY ID>
たとえば、$policyId = 1
- コンピュータを一括で検索してポリシーを割り当てる次のコードをコピーして貼り付けます。
$pageSize = 10 $idOfLastFound = 0 while($pageSize -gt 0){ Write-Output "Getting batch of computers..." $page = Invoke-RestMethod -Method 'Post' -Uri "$url/api/computers/search?expand=none" -Headers $headers -Body @" {"searchCriteria": [ { "idTest": "greater-than", "idValue": $idOfLastFound } ], "maxItems": $pageSize} "@ $pageSize = $page.computers.Length for ($i=0; $i -lt $pageSize; $i++){ $id = $page.computers.Get($i).ID Write-Output "Setting policy for computer with ID $id" Invoke-RestMethod -Method 'Post' -Uri "$url/api/computers/${id}?expand=none" -Headers $headers -Body @" {"policyID": "$policyId"} "@ | Out-Null } if ($pageSize -gt 0 ) { $idOfLastFound = $page.computers.Get($pageSize - 1).ID } }
次に進む前に
エラーメッセージが表示された場合
The underlying connection was closed: An unexpected error occurred on a send
をクリックしてPowerShellを閉じ、再度PowerShellを開いて、手順を繰り返します。そのPowerShellスクリプトを詳しく見てみましょう
このスクリプトは、他のレシピで実行したスクリプトよりも少し複雑です。
ほとんどのコードはループ内で実行され、ループの各反復でコンピュータのバッチが検索および変更されます。検索で返されたコンピュータがなくなると、ループは終了します。まず、バッチのサイズを定義し、最初の反復で検索の基準として使用するコンピュータIDを設定します。
$pageSize = 10 $idOfLastFound = 0 while($pageSize -gt 0){ ... }
ループ内では、
Invoke-RestMethod
をクリックしてコンピュータのバッチを検索します。この検索では、前の反復で見つかった最後のIDよりも大きいIDを持つ10台のコンピュータが検出されます。page=$(curl -X POST "$url/api/computers/search?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -# \ -d "{ \ \"searchCriteria\": [{ \ \"idValue\": \"$idOfLastFound\", \ \"idTest\": \"greater-than\"}], \ \"maxItems\": \"$pagesize\" \ }" \ -k | jq '.[]'); \
次に、返されたコンピュータの数を確認します。
$pageSize = $page.computers.Length
コンピュータごとに、
Invoke-RestMethod
をクリックしてポリシーを割り当てます。for ($i=0; $i -lt $pageSize; $i++){ $id = $page.computers.Get($i).ID Write-Output "Setting policy for computer with ID $id" Invoke-RestMethod -Method 'Post' -Uri "$url/api/computers/${id}?expand=none" -Headers $headers -Body @" {"policyID": "$policyId"}
最後に見つかったコンピュータのIDを見つけ、次の反復で検索の基準として使用します。
$idOfLastFound = $page.computers.Get($pageSize - 1).ID
備考
- 処理するコンピュータのバッチのサイズを変更するには、
pagesize
(Bash) または$pageSize
(PowerShell) 変数を別の値に変更します。の値10
は通常、控えめなバッチサイズです。
関連リソース
-
コンピュータの変更(APIレファレンス/参照情報
-
ポリシーの作成と設定(ガイド) – 「コンピュータへのポリシーの割り当て」セクション
-
リソースの検索(ガイド) - [検索結果とページングの制限] セクション