はじめに
ドキュメント基準コミット
991bacf(リリース系列v4.11.2) で検証済み。コマンドは Rust ツールチェーン (ワークスペースはCargo.toml:62で最小サポート Rust バージョン 1.89 を設定) を想定。
前提
- Rust と Cargo (
rustup推奨)、Rust 1.89 以上。 - Git。CLI のウォークスルーでリポジトリを clone するため。
インストール
Rust アプリケーションから Cedar を使うには SDK クレートを追加する (README:37):
bash
cargo add cedar-policycedar コマンドラインツールを得るには CLI クレートをインストールする:
bash
cargo install cedar-policy-cliこれで cedar バイナリがビルドされる。下のウォークスルーは代わりに clone から直接 CLI を実行し、グローバルインストールを避ける。これはリポジトリ自身のクイックスタートに一致する。
最初の動く構成
README のクイックスタート (README:51-128) を再現する。1 つのポリシーと小さなエンティティ集合に対してリクエストを認可する。
リポジトリを clone して入る。
bashgit clone https://github.com/cedar-policy/cedar.git cd cedarpermit ルールを 1 つ持つ
policy.cedarを作る。cedarpermit ( principal == User::"alice", action == Action::"view", resource in Album::"jane_vacation" );ユーザと写真を記述する
entities.jsonを作る。json[ { "uid": { "type": "User", "id": "alice"} , "attrs": {"age": 18}, "parents": [] }, { "uid": { "type": "Photo", "id": "VacationPhoto94.jpg"}, "attrs": {}, "parents": [{ "type": "Album", "id": "jane_vacation" }] }, { "uid": { "type": "Photo", "id": "SecretPhoto94.jpg"}, "attrs": {}, "parents": [{ "type": "Album", "id": "jane_secrets" }] } ]許可されるべき認可リクエストを実行する。
bashcargo run --bin cedar authorize \ --policies policy.cedar \ --entities entities.json \ --principal 'User::"alice"' \ --action 'Action::"view"' \ --resource 'Photo::"VacationPhoto94.jpg"'期待される出力:
textALLOW
動作確認
別アルバムの写真に対して同じコマンドを実行する。拒否されるはずである (README:113-128):
bash
cargo run --bin cedar authorize \
--policies policy.cedar \
--entities entities.json \
--principal 'User::"alice"' \
--action 'Action::"view"' \
--resource 'Photo::"SecretPhoto94.jpg"'期待される出力:
text
DENY最初のリクエストが許可されるのは、VacationPhoto94.jpg がポリシーの許す Album::"jane_vacation" の子だからである。2 つ目が拒否されるのは、SecretPhoto94.jpg が Album::"jane_secrets" に属し、どのポリシーも許可しないため既定の deny が適用されるからである。
次に読むもの
- Cedar Policy Language Reference Guide はポリシー構文・スキーマ・検証の全体を扱う:
docs.cedarpolicy.com(src 7)。 cedar-examplesリポジトリ (TinyTodo アプリを含む) は、実際の Rust サービスに組み込まれた Cedar を示す (README:132)。- ポリシーの静的解析については、内部実装 で扱う記号コンパイラクレート
cedar-policy-symccを参照。