GraphQL クエリの記述
ポリシーコードをローカルでテストするために、入力値を用意したい
shishoctl testcase generate
コマンドを利用した、入力データの半自動生成
shishoctl testcase generate
コマンドにより、入力データを規定する GraphQL クエリを、ポリシーコードへの入力として利用できる JSON ファイルを生成できます。
以下に jobs[].decide.rego
ポリシーに対する入力として利用できる JSON 形式のテストデータを、GraphQL クエリから生成するコマンドの例を示します:
shishoctl testcase generate \
--type decision \
--org <YOUR_ORGANIZATION_ID> \
--query-path (GraphQL クエリが格納されたファイルへのパス)
上記のように shishoctl testcase generate
コマンドを利用する場合、--type
等のオプションを元に shishoctl
コマンドが生成する JSON の形式を調整します。
GraphQL クエリのテスト用 Playground から返却されたデータをコピーアンドペーストするよりも、shishoctl testcase generate
コマンドの利用が多くの場合では簡便でしょう。
GraphQL クエリのテスト用 Playground を用いた、入力データの手動作成
Playground 上で GraphQL クエリをテスト実行した際に出力される JSON は、下記の例のように data
下に GraphQL クエリの実行結果を含む形式を取ります:
{
"data": {
"github": {
...
}
}
}
上記データを適宜加工することによっても、ポリシーコードへの入力値を用意できます。
一方、Rego インラインポリシーに対する API 定義 等に記載があるように、利用しているポリシー言語や、ポリシーの利用箇所(例: jobs[].decide
以下か、あるいは jobs[].notify
以下か)によって「GraphQL クエリの実行結果がどのようにポリシーコードに与えられるか」は異なります。そこで、以下のセクションでは、いくつかのシチュエーションを例に、ポリシーに対する入力データを手動で作成する方法を紹介します。
例: jobs[].decide.rego
に指定する Rego ポリシーの場合
同フィールド上に指定された Rego インラインポリシーの場合、GraphQL クエリの実行結果は input
変数に格納されることになっています。
したがって、opa eval -i input.json ...
等のコマンドで input
変数に値を入力する場合、以下のような手順を踏む必要があります:
- Playground から返却される JSON データの
data
フィールドの値のみ を JSON ファイルに保存する(例:input.json
) opa eval -i input.json ...
等のコマンドで、input
変数の値として、直上のステップで保存した JSON ファイルを指定してポリシーを評価する
以下に手順 1 で保存する JSON ファイルの例を示します:
{
"github": {
...
}
}
例: jobs[].notify.rego
同フィールド上に指定された Rego インラインポリシーの場合、GraphQL クエリの実行結果は input.query
変数に格納されることになっています。
したがって、opa eval -i input.json ...
等のコマンドで input
変数に値を入力する場合、以下のような手順を踏む必要があります:
- Playground から返却される JSON データの
data
フィールドのフィールド名を、query
に置換して、JSON ファイルに保存する(例:input.json
) opa eval -i input.json ...
等のコマンドで、input
変数の値として、直上のステップで保存した JSON ファイルを指定してポリシーを評価する
以下に手順 1 で保存する JSON ファイルの例を示します:
{
"query": {
"github": {
...
}
}
}
GraphQL クエリのテスト用 Playground から返される値が、連携した外部サービス上の値と一致しない
Playground で返される値は、実際に Shisho Cloud 組織に連携された外部サービスから取得されたデータではなく、ランダムに生成されたテストデータです。 ランダムなデータではあるものの、可能な限り実際のポリシーに与えられるデータに近い形式を取るように設定されています。
もし不自然な値や、生成された値に関する不明点がある場合はサービス運営元(Flatt Security)にお問い合わせください。