OPA からの移行
Ninka は、あなたが既に OPA 上で動かしている Rego/WASM を出力します。移行とは、手書きのポリシーを宣言的な 手形 (Tegata) に捉え直すことです。
1. ルールを手形のフィールドに対応づける
| 現在のコードでの表現 | 手形での表現 |
|---|---|
| 保護される対象の種類 | resource.type |
| 呼び出し元は誰か / そのロール | subject.roles |
| 何をしようとしているか | actions |
| 属性を値と比較する | conditions |
| サブジェクト対リソースの比較(所有) | relationships |
インラインチェックや同等の手書き Rego:
allow if {
input.action == "approve"
input.subject.roles[_] == "manager"
input.resource.amount <= 500000
}
は、1 つのルールになります。
{
"id": "allow-manager-approve-invoice-within-limit",
"effect": "allow",
"subject": { "roles": ["manager"] },
"actions": ["approve"],
"resource": { "type": "invoice" },
"conditions": [ { "key": "resource.amount", "op": "lte", "value": 500000 } ]
}
所有チェック(input.subject.id == input.resource.owner)は relationship になります。
"relationships": [
{ "label": "ownership", "subject_attribute": "user_id", "op": "eq", "resource_attribute": "submitted_by" }
]
2. コンパイルする
npx ninka compile
書く → コンパイル → 統合のループ全体は ポリシーを追加する を参照してください。
ツールチェーンと表現範囲
- Ninka は OPA 0.65.0 をピン留めします。
PATH上の見知らぬopaは決して使いません。エアギャップ環境や既存ツールチェーンでは、検証済みの 0.65.0 バイナリを指すようNINKA_OPA_PATHを設定します。サポート対象は darwin-x64、darwin-arm64、linux-x64、linux-arm64、win32-x64 です。 - v0.1 が表現できるのはロール、アクション、リソースタイプ、relationship、列挙された condition 演算子、整数のみ(浮動小数点なし)です。Ninka が表現できないロジックは
custom.*キーで Policy Information Point に委譲するか、その部分を OPA に直接残してください。