X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=website%2Fsimplerpc%2Fauthorization.md;fp=website%2Fsimplerpc%2Fauthorization.md;h=b2521ed2720cf8a3fa124172bb4022bdcca21eb1;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/website/simplerpc/authorization.md b/website/simplerpc/authorization.md new file mode 100644 index 0000000..b2521ed --- /dev/null +++ b/website/simplerpc/authorization.md @@ -0,0 +1,61 @@ +--- +layout: default +title: SimpleRPC Authorization +toc: false +--- +[SimpleRPCIntroduction]: index.html +[SecurityWithActiveMQ]: /mcollective/reference/integration/activemq_security.html +[SimpleRPCAuditing]: /mcollective/simplerpc/auditing.html +[ActionPolicy]: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AuthorizationActionPolicy + +As part of the [SimpleRPC][SimpleRPCIntroduction] framework we've added an authorization system that you can use to exert fine grained control over who can call agents and actions. + +Combined with [Connection Security][SecurityWithActiveMQ], [Centralized Auditing][SimpleRPCAuditing] and Crypto signed messages this rounds out a series of extremely important features for large companies that in combination allow for very precise control over your MCollective Cluster. + +The clients will include the _uid_ of the process running the client library in the requests and the authorization function will have access to that on the requests. + +There is a sample full featured plugin called [ActionPolicy] that you can use or get some inspiration from. + +## Writing Authorization Plugins + +Writing an Authorization plugin is pretty simple, the below example will only allow RPC calls from Unix UID 500. + +{% highlight ruby linenos %} +module MCollective::Util + class AuthorizeIt + def self.authorize(request) + if request.caller != "uid=500" + raise("Not authorized") + end + end + end +end +{% endhighlight %} + +Any exception thrown by your class will just result in the message not being processed or audited. + +You'd install this in your libdir where you should already have a Util directory for these kinds of classes. + +To use your authorization plugin in an agent simply do something like this: + +{% highlight ruby linenos %} +module MCollective::Agent + class Service