Rego インラインポリシー
このページでは、ワークフロー中のジョブに対して Rego で記述されたインラインポリシーと、Shisho Cloud の間の API 仕様を示します。
jobs[].decide.rego に関する API
jobs[].decide.rego に指定されたインラインポリシーは、ワークフロー の持つ「データ取得 → 検査/監査 → 結果の通知・結果の記録」という機能のうち、検査・監査の役割を持ちます。

パッケージ名
制限はありません。自由なパッケージ名を指定できます。
package arbitrary.name.could.be.specified
ポリシー実行時の入力
jobs[].decide.rego に指定されたインラインポリシーに対しては、いくつかの入力が与えられます。
input
input 変数には、jobs[].decide.input.schema に指定された GraphQL クエリ により取得されたデータが格納されます。
例えば同 GraphQL クエリが以下のようなものだったとします:
query {
github {
organizations {
login
requiresTwoFactorAuthentication
}
}
}
このとき、インラインポリシー中からアクセスできる input という変数に、以下のようなオブジェクトが格納されます:
{
"github": {
"organizations": [
{
"login": "octcat",
"requiresTwoFactorAuthentication": true
},
{
"login": "your-org-name",
"requiresTwoFactorAuthentication": false
}
]
}
}
インラインポリシーから上記のオブジェクトへのアクセスは、以下のようにして行えます:
org := input.github.organizations[_]
data.shisho
data.shisho 変数には、Shisho Cloud 公式の Rego ライブラリ 中の定義が格納されています。
例えば、shisho.decision.dependency パッケージ中の package_known_vulnerability 関数 にアクセスしたい場合、以下のような Rego ポリシーを記述できます:
import data.shisho
x := shisho.decision.dependency.package_known_vulnerability(...)
ポリシーに期待される出力
decisions 変数
インラインポリシーは decisions というリストに、Decision と呼ばれる構造のデータのリスト(配列)を格納しなくてはなりません。
これを通して、インラインポリシーは、ポリシーによる検査/監査結果を Shisho Cloud に伝えることが出来ます。
Shisho Cloud 公式の Rego ライブラリ 中で、"Emits a decision ..." なる description が指定された関数を用いることで、特定の kind を持った decision を簡単に発行できます。
jobs[].notify.rego に関する API
パッケージ名
制限はありません。自由なパッケージ名を指定できます。
ポリシー実行時の入力
input.query
jobs[].notify.input.schema で指定された GraphQL クエリにより取得されたデータが格納されています。
input.organization_id
ワークフローが実行されている組織の ID が格納されています。
input.workflow_id
ワークフローの ID が格納されています。
input.job_id
当該インラインポリシーが指定されているジョブの ID が格納されています。
input.decisions
当該インラインポリシーが指定されているジョブの decide ブロックにより生成された decisions が格納されています。
input.running_state
当該インラインポリシーが指定されているジョブの実行状態が格納されています。
shisho.job 以下 に、この変数が取りうる値が定数として定義されています。
input.exit_code
当該インラインポリシーが指定されているジョブの実行状態が格納されています。
shisho.job 以下 に、この変数が取りうる値が定数として定義されています。