Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenStack Congress & Datalog

OpenStack Congress & Datalog

OpenStack Congress およびそこで使われているポリシー言語 Datalog についての解説

More Decks by Motonori Shindo / 進藤資訓

Other Decks in Technology

Transcript

  1. © 2015 VMware Inc. All rights reserved. OpenStack Congress &

    Datalog Motonori Shindo (@motonori_shindo) CTO Ambassador / Technical Leader VMware
  2. OpenStack Congress とは? • OpenStack の中で Policy as a Service

    を担うプロジェクト • なぜ “Congress” ? – “ポリシー”が作られるところだから J 3
  3. なぜ Congress は OpenStack Project なの? • Congress は汎用的なポリシーエンジンなので、Standalone でも動作する

    • ポリシーを定義するにはデータソースが必要 • OpenStack は豊富なデータソースを提供してくれるので、Congress にとっては非常に都合が良い場 所である! 4
  4. Datalog • 一階述語論理にもとづいた宣言的論プログラミング言語 – しばしば Query Language として使われる • 文法的には

    Prolog に似ているが、Prolog と違い – Function symbolがない – 停止することが保証されている – 節の順序は無関係 – リストの概念がない – カット(!)や fail オペレータがない 6
  5. Safety Properties of Datalog • ルール中のヘッドに現れる変数は、非算術かつ肯定形のリテラル中に現れなければいけない。 • ボディの否定形リテラル中に現れる変数はすべて、他の肯定形リテラルの中に現れなければらなない。 • Safety

    でない例 – q(X, Y, Z) :- r1(X,Y), X < Z. – q(X, Y, Z) :- r1(X,Y), not r2(X, Y, Z). • Safety な例 – q(X, Y, Z) :- r1(X, Y), r2(Y, Z), X < Z. – q(X, Y, Z) :- r1(X,Y), not r2(X, Y, Z), r3(Y, Z). 8
  6. Datalog (Prolog) の例1 9 parent(motonori, manzo). parent(motonori, keiko). male(manzo). male(motonori).

    female(keiko). father(X, Y) :- parent(X,Y), male(Y). mother(X, Y) :- parent(X,Y), female(Y). ?- father(motonori, X). father(motonori, manzo).
  7. Datalog (Prolog) の例2 10 adjacent(a, b). adjacent(b, c). adjacent(c, d).

    adjacent(a, d). adjacent(e, f). reachable(X, Y) :- adjacent(X, Y). reachable(X, Y) :- adjacent(X, Z), reachable(Z, Y). ?- reachable(b, d). reachable(b, d). ?- reachable(a, f). a b d f c e
  8. Congress でできる(予定の)こと • Monitoring – クラウドの現在の状態とポリシーを照らし合わせ、もしミスマッチがあればレポートする • Enforcement – Policy

    違反を回避するためになにか「アクション」を取る – Proactively / Reactively / Interactively • Auditing – Policy や Policy 違反の履歴管理 11
  9. Congress における Datalog • 文法 • 制限 – 再帰は(今のところ)サポートしていない 12

    <policy> ::= <rule>* <rule> ::= <head> COLONMINUS <literal> (COMMA <literal>)* <head> ::= <atom> <head> ::= EXECUTE[<atom>] <literal> ::= <atom> <literal> ::= NOT <atom> <atom> ::= TABLENAME LPAREN <arg> (COMMA <arg>)* RPAREN <arg> ::= <term> <arg> ::= COLUMNNAME=<term> <term> ::= INTEGER | FLOAT | STRING | VARIABLE
  10. 現在サポートされている Congress 用ドライバ • OpenStack Ceilometer • OpenStack Cinder •

    OpenStack Glance (v2) • OpenStack Ironic • OpenStack Keystone • OpenStack Murano • OpenStack Neutron (v2) • OpenStack Nova • OpenStack Switft • Cloud Foundry • Plexxi • vCenter 14
  11. Congress の Policy 例 (monitoring) 15 error(vm, network) :- nova:virtual_machine(vm)

    nova:network(vm, network) nova:owner(vm, vm_owner) neutron:owner(network, network_owner) not neutron:public_network(network) not same_group(vm_owner, network_owner) same_group(user1, user2) :- ad:group(user1, group) ad:group(user2, group)
  12. Congress の Policy 例 (enforcement) 16 Execute[neutron:disconnectNetwork(vm, network)] :- error(vm,

    network) Execute[nova:pause(x)] :- nova:servers(id=x, status=“ACTIVE”)