生成ファイル
ninka compile が authz/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_by | ninka-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.json の wasm_sha256 と一致する必要があります。
types.gen.ts
生成された TypeScript です。ポリシーごとの入力インターフェースと、型付き PolicyRef の policies
テーブルを含みます。このファイルから 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.invoiceAccess を check に渡すと、正確な入力形状がコンパイル時に固定されます。
ランタイム API を参照してください。
input-contract.json
すべてのポリシーにわたってマージした、プロジェクト全体の入力コントラクトです。
{ "generated_by": { "package": "…", "version": "…" }, "keys": [ { "key": "…", "type": "…", "required_by": [], "policies": [] } ] }
関連ページ
- CLI → verify — これらのファイルに対する CI ゲート。
- ランタイム API — ランタイムがこれらをどう消費するか。
- CLI — これらを書き出すコマンド。