メインコンテンツまでスキップ

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 変数に値を入力する場合、以下のような手順を踏む必要があります:

  1. Playground から返却される JSON データの data フィールドの値のみ を JSON ファイルに保存する(例: input.json
  2. opa eval -i input.json ... 等のコマンドで、input 変数の値として、直上のステップで保存した JSON ファイルを指定してポリシーを評価する

以下に手順 1 で保存する JSON ファイルの例を示します:

{
"github": {
...
}
}

例: jobs[].notify.rego

同フィールド上に指定された Rego インラインポリシーの場合、GraphQL クエリの実行結果は input.query 変数に格納されることになっています。 したがって、opa eval -i input.json ... 等のコマンドで input 変数に値を入力する場合、以下のような手順を踏む必要があります:

  1. Playground から返却される JSON データの data フィールドのフィールド名を、query に置換して、JSON ファイルに保存する(例: input.json
  2. opa eval -i input.json ... 等のコマンドで、input 変数の値として、直上のステップで保存した JSON ファイルを指定してポリシーを評価する

以下に手順 1 で保存する JSON ファイルの例を示します:

{
"query": {
"github": {
...
}
}
}

GraphQL クエリのテスト用 Playground から返される値が、連携した外部サービス上の値と一致しない

Playground で返される値は、実際に Shisho Cloud 組織に連携された外部サービスから取得されたデータではなく、ランダムに生成されたテストデータです。 ランダムなデータではあるものの、可能な限り実際のポリシーに与えられるデータに近い形式を取るように設定されています。

info

もし不自然な値や、生成された値に関する不明点がある場合はサービス運営元(Flatt Security)にお問い合わせください。