レシピ: deny-closed ポリシー (Cedar / OPA)
目的: deny-by-default の RBAC の上に属性ベースの制限を追加する —
たとえば「ロールが何と言おうと、secret とタグ付けされたリソースには誰も触れない」。
頭に入れておくべき不変条件はただ一つ: PDP は 制限のみを行う。 決定は RBAC ∩ ネイティブ ABAC ∩ 外部 PDP として合成される — ポリシーはロールモデルが拒否したものを決して付与できない (モデル)。
Cedar (組み込み、プライマリ)
Section titled “Cedar (組み込み、プライマリ)”エンジンを選択し、ポリシーファイルを指定してから再起動する:
OLIVARES_PDP_ENGINE=cedarOLIVARES_PDP_CEDAR_FILE=/etc/olivares/policy.cedarCedar ポリシーは forbid オーバーレイ である — ベースの permit は
「RBAC はすでに決定済み」を表し、forbid ルールがそこから差し引く:
permit(principal, action, resource);
forbid(principal, action, resource) when { resource.kind == "credential" && resource.sensitivity == "secret" };アダプターに対して検証済みの作成上の事実が二つ: resource.kind と
resource.sensitivity は決定入力に常に存在する
(無条件で参照可能)。それ以外の属性は has() でガードしなければ
ルールが一致できない。あなたが書く permit は決して決定を拡大できない。
OPA (HTTP 経由)
Section titled “OPA (HTTP 経由)”OLIVARES_PDP_ENGINE=opaOLIVARES_PDP_OPA_URL=http://opa.internal:8181OLIVARES_PDP_OPA_PATH=/v1/data/olivares/decisionOLIVARES_PDP_OPA_TOKEN=<bearer-reference> # optionalRego は permit-by-default で記述する:
package olivares
default allow := true
allow := false if { input.resource.sensitivity == "secret" input.action == "read"}true = 制限なし。false、結果の欠落、または あらゆるトランスポート上または
非 2xx のエラーは fail closed する — リクエストは拒否され、決して
気づかぬうちにガバナンスを外れることはない。
検証、ドライラン、公開
Section titled “検証、ドライラン、公開”ガバナンスモジュールはポリシーのライフサイクルを公開しており、不正なポリシーが 盲目的に投入されることはない:
# Compile-check the source:curl -ks -X POST "$BASE/v1/m/governance/pdp/validate" \ -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" \ -d @policy.json
# Pre-flight a decision WITHOUT audit side effects:curl -ks -X POST "$BASE/v1/m/governance/pdp/dry-run" \ -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" \ -d '{"principal":"…","action":"…","resource":{"kind":"credential","sensitivity":"secret"}}'
# Then publish (policy-admin permission):curl -ks -X POST "$BASE/v1/m/governance/pdp/publish" …GET /v1/m/governance/pdp/versions はデプロイされている内容を一覧表示する;
POST /v1/m/governance/pdp/explain は決定を説明する。
安全性プロパティを検証する
Section titled “安全性プロパティを検証する”- 不正な ポリシーファイルで再起動する: エンジンは外部 PDP のみを 無効化してログに記録する — RBAC とネイティブ ABAC はガバナンスを継続し、 control plane はダウンしない。
- PDP が適用するすべての制限は 監査される — 拒否されたリクエストの後に ledger を確認すること。
- ポリシーはバージョン管理されて公開されるものであり、本番でホット編集される ファイルではない — 公開はレビュー済みの変更として扱うこと。
- 拒否ではなく承認ゲート付きのアクションについては、 HITL 承認 を参照。