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

生成ファイル

ninka compileauthz/out/ に書き出すすべてについての完全なリファレンスです。

authz/out/ はすべてコミットする

以下のファイルはすべてリポジトリにコミットします。これらは合わせて、あなたのポリシーの承認済み・ 実行可能な形であり、ninka verify がそのバイト同一性で CI をゲート します。手で編集しないでください。

ファイル一覧

ファイル役割
<id>.regoランタイムのポリシーロジック。
<id>.manifest.json契約と監査チェーン。
<id>.build.jsonビルド環境と整合性ハッシュ。
<id>.validation.json翻訳検証ベクトル。
<id>.wasmコンパイル済み OPA WASM — 出荷される成果物。
types.gen.ts生成された TypeScript の入力型と policies テーブル。
input-contract.jsonプロジェクト全体でマージした入力コントラクト。

<id>.wasm<id>.build.json<id>.validation.json は、OPA ツールチェーンが利用可能な場合のみ 書き出されます。CLI → compile を参照してください。


<id>.rego

ランタイムのポリシーロジックです。判断のみで、メタデータは一切なく(タイムスタンプ・コンパイラ バージョン・description なし)、セクション順序は固定です。これはコンパイラが手形から出力するもので、 verify によってバイト単位でチェックされます。


<id>.manifest.json

ポリシーの契約と監査チェーンです。tegata_hash が承認と差分の対象です。

フィールド意味
policy_idポリシー id。
tegata_version"0.1"
generated_byninka-authz リリースの { package, version }
tegata_hash正規化された手形のフィンガープリント — あなたが承認するもの。
rego_sha256出力された Rego のハッシュ。
covered_resource_typesこのポリシーが対象とする resource type。
input_requirements{ key, type, required, origins[] } の配列。
log_allowlist決定ログに素で現れうる属性。

<id>.build.json

ビルド環境と整合性ハッシュです。

フィールド意味
policy_idポリシー id。
opa_version"0.65.0"
entrypoint"ninka/<snake>/allow"
wasm_sha256コンパイル済み WASM のハッシュ。
rego_sha256出力された Rego のハッシュ。
validation{ vector_count, vectors_sha256, status: "passed" }

ランタイムは読み込み時に *.build.json を読み、これらのハッシュをフェイルクローズドで検査します。 ランタイム API → load を参照してください。


<id>.validation.json

翻訳検証ベクトルです。手形から導出され、ビルドした WASM に対して実行される判断ケースです。verify はこれらを再計算し再実行します。

{ "policy_id": "…", "tegata_hash": "…", "validation_version": "1", "vectors": [ { "id": "…", "input": {}, "expected": true } ] }

<id>.wasm

コンパイル済み OPA WASM です。境界で実行される、出荷される成果物です。その SHA-256 は、ランタイムが 読み込むために build.jsonwasm_sha256 と一致する必要があります。


types.gen.ts

生成された TypeScript です。ポリシーごとの入力インターフェースと、型付き PolicyRefpolicies テーブルを含みます。このファイルから policies と型をインポートします。手で編集しないでください。 verify によってバイト単位でチェックされます。

// GENERATED by `ninka compile` — do not edit by hand.
/** Input contract of policy "invoice-access" (tegata_hash c2b55b92fb53…). */
export interface InvoiceAccessInput {
subject: {
properties: {
roles: string[];
user_id: string;
[key: string]: unknown;
};
};
action: {
name: "approve" | "delete" | "view";
};
resource: {
type: "invoice";
properties: {
amount: number;
submitted_by: string;
[key: string]: unknown;
};
};
}

export type PolicyRef<Id extends string, In> = Id & { readonly __input?: In };

export const policies = {
invoiceAccess: "invoice-access" as PolicyRef<"invoice-access", InvoiceAccessInput>,
} as const;

policies.invoiceAccesscheck に渡すと、正確な入力形状がコンパイル時に固定されます。 ランタイム API を参照してください。


input-contract.json

すべてのポリシーにわたってマージした、プロジェクト全体の入力コントラクトです。

{ "generated_by": { "package": "…", "version": "…" }, "keys": [ { "key": "…", "type": "…", "required_by": [], "policies": [] } ] }

関連ページ

  • CLI → verify — これらのファイルに対する CI ゲート。
  • ランタイム API — ランタイムがこれらをどう消費するか。
  • CLI — これらを書き出すコマンド。