例:パラメータ化パッケージ

パラメータ化パッケージでは、アクションの展開時のコマンドラインパラメータの値を指定するよう求められます。たとえば、Tanium提供のRegistry - Set Valueパッケージを使用するアクションの展開では、[Action Deployment (アクションの展開)][Deploy Action (アクションを展開)] ページでは、レジストリキーの名前とその他のキー値パラメータを入力するよう求められます。

図1:パラメータ化パッケージ

アクションが定期的に再展開されるように設定すると、それはスケジュール済みアクションになります。スケジュール済みアクションがパラメータ化パッケージに基づいている場合、代入値をはじめとするパッケージの定義は、一時パッケージと呼ばれるオブジェクトに保存されます。そうしたパッケージを呼び出すスケジュール済みアクションを実行する指令がある場合、エンドポイントのTanium Clientはその一時パッケージを実行します。スケジュール済みアクションは、基のパッケージが更新されても引き続き一時パッケージを使用します。したがって、パッケージが更新され、更新済みコードを予定済みアクションで使用する場合は、予定済みアクションを作成し直す必要があります。

パッケージのスクリプトとコマンドラインパラメータ

パラメータ化パッケージの構成では(「パッケージを作成する」を参照)、コマンドにスクリプトを指定します。スクリプトにコード化されたパラメータと、アクションの展開時に値を指定する順序は、番号ではなく位置に従います。次の例では、スクリプトのパラメータは0〜4の番号が振られています。

図2:set-value.vbsスクリプトのパラメータ

コマンドラインパラメータには、$1から$5までの番号が振られています。

図3:コマンドラインパラメータ

TaaS Tanium Serverは、基のスクリプトにパラメータデータを渡す前にデータをコード化します。パラメータデータが使用されるには、UTF-8にデコードされている必要があります。図2Registry - Set Value例に対するVBスクリプトでは、i18n/UTF8Decode.vbsスクリプトに対して@includeが使用されています。このスクリプトは、Tanium Consoleフォームのユーザ入力をパッケージスクリプトに渡す時に適切にエンコードされるようにします。

'- Begin file: i18n/UTF8Decode.vbs
'========================================
' UTF8Decode
'========================================
' Used to convert the UTF-8 style parameters passed from 
' the server to sensors in sensor parameters.
' This function should be used to safely pass non english input to sensors.
'-----
'-----
Function UTF8Decode(str)
    Dim arraylist(), strLen, i, sT, val, depth, sR
    Dim arraysize
    arraysize = 0
    strLen = Len(str)
    for i = 1 to strLen
        sT = mid(str, i, 1)
        if sT = "%" then
            if i + 2 <= strLen then
                Redim Preserve arraylist(arraysize + 1)
                arraylist(arraysize) = cbyte("&H" & mid(str, i + 1, 2))
                arraysize = arraysize + 1
                i = i + 2
            end if
        else
            Redim Preserve arraylist(arraysize + 1)
            arraylist(arraysize) = asc(sT)
            arraysize = arraysize + 1
        end if
    next
    depth = 0
    for i = 0 to arraysize - 1
		Dim mybyte
        mybyte = arraylist(i)
        if mybyte and &h80 then
            if (mybyte and &h40) = 0 then
                if depth = 0 then
                    Err.Raise 5
                end if
                val = val * 2 ^ 6 + (mybyte and &h3f)
                depth = depth - 1
                if depth = 0 then
                    sR = sR & chrw(val)
                    val = 0
                end if
            elseif (mybyte and &h20) = 0 then
                if depth > 0 then Err.Raise 5
                val = mybyte and &h1f
                depth = 1
            elseif (mybyte and &h10) = 0 then
                if depth > 0 then Err.Raise 5
                val = mybyte and &h0f
                depth = 2
            else
                Err.Raise 5
            end if
        else
            if depth > 0 then Err.Raise 5
            sR = sR & chrw(mybyte)
        end if
    next
    if depth > 0 then Err.Raise 5
    UTF8Decode = sR
End Function
'- End file: i18n/UTF8Decode.vbs

シェルスクリプトでは、次のような関数を使用してパラメータデータをデコードできます。

#!/bin/sh

percent_decode() {
        local data=$(echo "$1" | sed 's/%/\\\x/g')
        /usr/bin/printf '%b' "$data"
}

myVariable=`percent_decode "||parameter_value||"`

この場合、printfユーティリティが使用できないか、Linux、MacOS、UNIXのすべてのプラットフォームで正しく機能しないことがあります。洗練されてはいませんが、誰にも簡単に使える実装は次のようになります。

#!/bin/sh 

brute_force_percent_decode() {
        # decode everything between 0x20-0x7E except:
        #0 1 2 3 4 5 6 7 8 9 (0x30-0x39)
        #A B C D E F G H I J K L M N O P Q R S T U V W X Y Z (0x41-0x5A)
        #a b c d e f g h i j k l m n o p q r s t u v w x y z (0x61-0x7A)
        echo "$1" | sed -e 's/%20/ /g' \
        -e 's/%21/!/g' \
        -e 's/%22/"/g' \
        -e 's/%23/#/g' \
        -e 's/%24/$/g' \
        -e 's/%25/%/g' \
        -e 's/%26/\&/g' \
        -e "s/%27/'/g" \
        -e 's/%28/(/g' \
        -e 's/%29/)/g' \
        -e 's/%2[aA]/*/g' \
        -e 's/%2[bB]/+/g' \
        -e 's/%2[cC]/,/g' \
        -e 's/%2[dD]/-/g' \
        -e 's/%2[eE]/./g' \
        -e 's#%2[fF]#/#g' \
        -e 's/%3[aA]/:/g' \
        -e 's/%3[bB]/;/g' \
        -e 's /%3[cC]/</ g '\\
        -e 's/%3[dD]/=/g' \
        -e 's /%3[eE]/>/ g '\\
        -e 's/%3[fF]/?/g' \
        -e 's/%40/@/g' \
        -e 's/%5[bB]/[/g' \
        -e 's/%5[cC]/\\/g' \
        -e 's/%5[dD]/]/g' \
        -e 's/%5[eE]/^/g' \
        -e 's/%5[fF]/_/g' \
        -e 's/%60/`/g' \
        -e 's/%7[bB]/{/g' \
        -e 's/%7[cC]/|/g' \
        -e 's/%7[dD]/}/g' \
        -e 's/%7[eE]/-/g'
}

myVariable=`brute_force_percent_decode "||parameter_value||"`

パラメータ入力の設定

パッケージを使用するアクションを展開した時にTanium Consoleがユーザに入力を求める設定は、パッケージ構成に指定されているパラメータ入力によって決まります。パラメータは1つずつ追加します。最初に追加するパラメータはコマンドライン変数$1、2つ目は変数$2に一致するというように構成します。

図4:パラメータ入力の設定

フォームの左側にあるナビゲーションメニューに表示されるパラメータ入力リストで、項目を選択してドラッグし、並べ替えることができます。必ず、最終的な順序がコマンド内の番号付きのパラメータと揃うようにします。

ユーザ入力の最も一般的なウィジェットはテキストボックスですが、次のオプションのどれでも選択できます。

  • Checkbox (チェックボックス):ユーザはボックスをチェックして設定を有効化します。0または1が変数として入力されます。選択された場合は1、選択されなかった場合は0が返されます。
  • Date (日付)Date Time (日付時刻)Date Time Range (日付時間範囲):ユーザは日付と時間、または範囲を選択します。日時は、ミリ秒単位のエポック形式です。範囲では、ユーザはパイプで区切って2つの日時を指定します。
  • Drop Down List (ドロップダウンリスト):ユーザはリストから1つのオプションのみを選択します。
  • List (リスト):ユーザは1つ以上の値を選択します。複数の値はパイプで区切ります。
  • Numeric (数値): ユーザは数字を入力します。入力は最小値と最大値で制御できます。ステップサイズを指定すると、指定した値で入力を割り切れるように指定できます。スナップ間隔は、上下ボタンが押されたときの数字の増減量です。ステップサイズの値は、スナップ間隔が0でなければ、スナップ間隔の値の倍数にする必要があります。ユーザが選択した数字が変数に入力されます。
  • Numeric Interval (数値間隔):ユーザはリストから数値と項目を選択します。リスト項目は数値を1つとります。 変数に入力される値は、乗算の結果です。たとえば、ユーザが2を選択してHigh(高)(値は3)を選択すると、変数の値は6になります。
  • Separator (セパレータ):セパレータは、ユーザ入力フォーム内のセクションを区切るグラフィカルな方法です。
  • Text Area (テキスト領域):ユーザは大量のテキストを入力します。テキストは変数に入力されます。
  • Text Input (テキスト入力):ユーザはテキスト入力を入力します。許可されるエントリは、正規表現で制御できます。ユーザ入力は変数に入力されます。
  • Time (時刻): ユーザは、ドロップダウンリストから時刻を選択します。入力は制限することができます。

たいていの型のパラメータでは、アクションの展開時にパラメータの設定方法を理解するのに役立つ読み取り専用値を指定したオプションが提供されます。次の例は、テキスト入力に指定できる読み取り専用値を示しています。[Preview (プレビュー)] セクションでは、パッケージを使用するアクションを展開したときにそれら設定がユーザにどのように表示されるかを確認できます。

図5:パラメータのオプション
読み取り専用値

Provide Help Text (ヘルプテキストの指定)の内容は、ユーザが情報Infoにマウスを重ねた時にツールチップとして表示されることに注意してください

図6:ヘルプテキストの指定
ヘルプテキストの指定