Wednesday, 2016-11-23

*** tovin07 has joined #openstack-meeting-cp00:59
*** tovin07 has quit IRC00:59
*** tovin07 has joined #openstack-meeting-cp01:00
*** tovin07 has quit IRC01:01
*** tovin07 has joined #openstack-meeting-cp01:01
*** tovin07 has quit IRC01:02
*** tovin07 has joined #openstack-meeting-cp01:02
*** tovin07_ has joined #openstack-meeting-cp01:15
*** zhurong has joined #openstack-meeting-cp01:19
*** brault has quit IRC03:04
*** zhurong has quit IRC03:04
*** zhurong has joined #openstack-meeting-cp03:07
*** zhurong has quit IRC03:35
*** zhurong has joined #openstack-meeting-cp03:36
*** markvoelker has quit IRC04:02
*** jgriffith is now known as jgriffith_away04:10
*** prateek has joined #openstack-meeting-cp05:18
*** markvoelker has joined #openstack-meeting-cp06:02
*** markvoelker has quit IRC06:08
*** gouthamr has joined #openstack-meeting-cp07:30
*** brault has joined #openstack-meeting-cp07:39
*** gouthamr has quit IRC09:04
*** markvoelker has joined #openstack-meeting-cp09:32
*** markvoelker has quit IRC09:37
*** zhurong has quit IRC10:01
*** tovin07_ has quit IRC10:06
*** rakhmerov has quit IRC11:01
*** ativelkov has quit IRC11:01
*** IgorYozhikov has quit IRC11:03
*** ativelkov has joined #openstack-meeting-cp11:03
*** IgorYozhikov has joined #openstack-meeting-cp11:03
*** rakhmerov has joined #openstack-meeting-cp11:05
*** prateek has quit IRC11:37
*** prateek has joined #openstack-meeting-cp12:05
*** prateek has quit IRC12:07
*** prateek has joined #openstack-meeting-cp12:08
*** prateek has quit IRC12:10
*** prateek has joined #openstack-meeting-cp12:17
*** prateek has quit IRC12:17
*** prateek has joined #openstack-meeting-cp12:18
*** prateek has quit IRC12:24
*** prateek has joined #openstack-meeting-cp12:25
*** gouthamr has joined #openstack-meeting-cp12:32
*** prateek_ has joined #openstack-meeting-cp13:26
*** markvoelker has joined #openstack-meeting-cp13:28
*** prateek has quit IRC13:30
*** xyang1 has joined #openstack-meeting-cp13:36
*** lamt has joined #openstack-meeting-cp13:39
*** prateek_ has quit IRC13:46
*** prateek has joined #openstack-meeting-cp13:47
*** prateek_ has joined #openstack-meeting-cp13:57
*** prateek has quit IRC13:59
*** beisner has joined #openstack-meeting-cp14:04
*** parora has joined #openstack-meeting-cp14:18
*** prateek has joined #openstack-meeting-cp14:21
*** prateek_ has quit IRC14:22
*** parora has quit IRC14:24
*** prateek_ has joined #openstack-meeting-cp14:24
*** prateek has quit IRC14:27
*** linux_ has joined #openstack-meeting-cp15:05
*** danielaebert has joined #openstack-meeting-cp15:14
*** prateek_ has quit IRC15:46
*** prateek_ has joined #openstack-meeting-cp15:46
*** danielaebert has quit IRC15:47
*** spilla has joined #openstack-meeting-cp15:53
*** gagehugo has joined #openstack-meeting-cp15:58
*** ktychkova has joined #openstack-meeting-cp15:59
lbragstado/16:00
lbragstadping  lbragstad, raildo, ruan_04, ktychkova, dolphm, dstanek, rderose, htruta, atrmr, gagehugo, lamt, thinrichs, edmondsw16:00
gagehugoo/16:01
lamto/16:01
rderoseo/16:01
ktychkovao/16:01
spillao/16:01
lbragstad#startmeeting policy16:01
openstackMeeting started Wed Nov 23 16:01:23 2016 UTC and is due to finish in 60 minutes.  The chair is lbragstad. Information about MeetBot at http://wiki.debian.org/MeetBot.16:01
openstackUseful Commands: #action #agreed #help #info #idea #link #topic #startvote.16:01
*** openstack changes topic to " (Meeting topic: policy)"16:01
openstackThe meeting name has been set to 'policy'16:01
*** linux_ has left #openstack-meeting-cp16:01
lbragstadalright - i imagine this going to be a pretty light meeting, given it's US holiday tomorrow16:01
lbragstadwe'll give it until 4 after for others to show up16:02
lbragstad#topic action items from last week16:04
*** openstack changes topic to "action items from last week (Meeting topic: policy)"16:04
*** ayoung has joined #openstack-meeting-cp16:04
lbragstadACTION ITEM: ayoung to repropose https://review.openstack.org/#/c/391624/16:04
lbragstadlooks like he did - did anyone have a chance to look that spec over?16:04
ayoungCovered a bit of this in the meeting yesterday.  The biggest difference is the focus on not-breaking caching16:05
lbragstadayoung yeah - that would be significant16:05
lbragstadayoung you broke the proposed implementation into pieces16:05
ayoungthe RBAC check is going to be performed in the keystonemiddleware auth_token layer, after token validation, and before returning passing to the calling WSGI applicaion16:06
ayoungwe'll keep an option on the table to do the check as part of the token validation, but that will be prioritized after the out-of-band check16:06
ayounger...whatever  the middleware check is called16:06
ayoungwould like this to get in to Ocata, or at least the management API16:07
ayoungI am about ready to propose a WIP patch, just trying to sort the JSON home tests and get a  clean Tox run first16:07
lbragstadayoung can you take a step back and define management API for those who missed the keystone meeting yesterday?16:07
ayoungso, before you can enforce RBAC, you need to define the rules16:07
lbragstadwhich are currently defined in various policy.json files across the services16:08
ayoungthe API is going to be built on a new Database entity that I am right now calling url_pattern16:08
ayoungthe URL pattern object looks like this16:08
ayoung        sql.Column('id', sql.String(length=64), primary_key=True),16:08
ayoung        sql.Column('service', sql.String(length=64), nullable=False),16:08
ayoung        sql.Column('verb', sql.String(length=64)),16:08
ayoung        sql.Column('pattern', sql.Text, nullable=False),16:08
ayoung        sql.Column('role_id', sql.String(length=64), primary_key=True),16:08
ayoungwe had a discussion about the subtleties around the role_id yesterday that is worth recapping16:09
ayoungthe URL pattern here could also be called "operation"16:09
*** knikolla has joined #openstack-meeting-cp16:10
ayoungthe unique key is the URL + the Verb16:10
ayoungso GET /v3/users16:10
ayoungor PUT /v3/user/{user_id}16:10
ayoungthe service is the string name (not the ID) to be friendly to end deployers16:10
ayoungthey know about "compute" not about UUIDs16:10
*** thinrichs has joined #openstack-meeting-cp16:11
ayoungand this is purposely kept separate from the Service Catalog...a point we can debate later if so desired16:11
ayoungdo we have a quorum here?16:11
ayoungwant to make sure this is actually useful to people (beside lbragstad ) before carrying on?16:11
lbragstadayoung we have 7 folks here, including you16:12
rderoseI'm following16:12
ayoung++16:12
ayoungOK,  so the interesting part is the role_id16:12
thinrichsHi all.  Sorry I'm late.16:12
lbragstadthinrichs o/16:12
ayoungthat is limited to one role, but via implied roles, it can actually be many16:12
*** gouthamr has quit IRC16:12
*** gouthamr has joined #openstack-meeting-cp16:13
ayoungso if a user has member, and member implied reader, you could have the reader role_id mapped to the URL pattern GET /v3/users16:13
ayoungand so anyone with the Member role would be able to perform it.16:13
lbragstadthinrichs you should be able to get scrollback here in a few minutes - http://eavesdrop.openstack.org/irclogs/%23openstack-meeting-cp/%23openstack-meeting-cp.2016-11-23.log.html16:13
thinrichslbragstad: thanks!16:14
lbragstadthinrichs but right now we are addressing action items from last week16:14
lbragstadand i completely forgot to publish the agenda #link https://etherpad.openstack.org/p/keystone-policy-meeting16:14
thinrichslbragstad: great--looking at the agenda right now16:14
ayoungthe reason to focus on implied roles is to allow a path to delegating a subset of the roles required to just perform the operation16:15
lbragstadthinrichs ayoung is describing his spec right now... so if anyone has questions on it, now is the time16:15
ayounglets take a simplified view of computes create server16:15
ayoungthis is an API a user calls on Nova, but then nova has to call a few other services:16:16
ayoungglance, neutron, cinder16:16
ayoungso, we would want to have a consistent set of roles across the APIs to those other services that a user could do.  Lets call this role create_compute:16:16
ayoungmember->create_compute16:17
ayoungread -> as "implies" BTW16:17
*** ruan_06 has joined #openstack-meeting-cp16:17
ayoungso  if a user wants to delegat to a service user (say heat via the trust API) they can delegate create_compute even though they are only explicitly assigned member16:17
ayoungthe alternative was to say that each url_pattern had multiple roles assigned to it.16:18
ayoungso if we had a system where POST /v2/compute  creates a VM16:19
ayoungwe could assign multiple roles to that operation.  Member would be there for everyone16:19
ayoungbut to delegate something that could "only" do  POST /v2/compute  and not all of the other things that a member can do, we would have to explicitly assign that new role to all the users16:20
ayoungimplied roles make it possible to keep this manageable, and to do least privilege16:20
rderosehmm... so in this design, there isn't an admin role for ready and write; you'd have to have multiple roles to perform all operations, correct?16:20
rderose*read and write16:20
ayoungrderose, ok,  lets talk that through16:20
ayoungrderose, lets start where we are today16:21
ayoungmost of the admin operations would require the admin role16:21
ayoungif you wanted to split them into read and write, you would create two new roles: admin_read, admin_write16:21
ayoungand set admin->admin_read and admin->admin_write16:21
ayoungthen you would modify the url_pattern for an operation and explicitly make it admin_read or admin_write16:22
lbragstad(i.e. would POST /v3/domains/{domain_id} fall under a admin_write operation)16:22
ayoungthe end administrators would still be able to perform all the actions16:22
ayoungsure16:22
ayoungthat is a good example of one16:22
ayoungso that would now get admin_write16:22
ayoungand GET  /v3/domains/{domain_id}  would get admin_read16:22
ayoungnow, lets say that we decide  GET  /v3/domains/{domain_id}  should be world readable16:23
ayoungwe create a new role, reader16:23
ayoungadmin_read -> reader16:23
ayoungwe change  GET  /v3/domains/{domain_id}   so it is associated with reader, and anything to which  we delegated the admin_read role would still work16:24
ayoungIt allows you to roll-forward policy16:24
ruan_06don't you think we will toooo many roles to manage?16:24
ayoungruan_06, eventually, yes16:25
thinrichsImplied roles makes sense.  I'm assuming if role r1 implies roles r2 and r3 that r1 gets the union of r1, r2, r3 rights.  Correct?16:25
ayoungruan_06, to start with, no16:25
ayoungruan_06, as a follow on, however, we can make the following adjustments:16:25
*** jgriffith_away is now known as jgriffith16:25
ayoungtoday, we expand implied roles in the token validation response16:25
thinrichsagree with ruan_06 that people will almost immediately want tooling to understand what rights any given user  actually has.16:25
ayoungthinrichs, tooling is possible, and can be done manually to start, built in a supported tool as a second step16:26
ayoungok, back to too many rules:16:26
ruan_06I agree that this can be a short term solution, better than the current solution16:26
ayounglets talk about validation for a moment16:26
ayoungassuming this is all done in middleware, ithe flow will be like this:16:26
thinrichsayoung: keystone has implied roles today?  I thought this was part of the spec.16:27
rderoseruan_06: but we want a long term solution; not something that is just better than what we have16:27
ayoungafter the middleware has validate the token (or fetched the token data from cache)  the  middleware will fetch the url_patterns from the Keystone server16:27
lbragstadthinrichs implied roles exists today - but i'm not sure what it's current usage distribution is16:27
lbragstadrderose ++16:27
ayoungthat will be done based on the "service" string that middleware will read out of the config file16:27
ayounglbragstad, I'd assume none, as the CLI is still up for review16:28
ayoung#link https://review.openstack.org/#/c/290253/16:28
ayoungok, so it fetches the url_patterns, and matches the one the user requested16:28
ruan_06redrobot: if you want a real one, we should switch from RBAC to ABAC16:28
ayoungfrom there it looks at the "role" attribute and does a match with the set of roles in the auth_data16:29
ayoungruan_06, different conversation16:29
ayounglet's table that for now, as it is important, but will take much longer16:29
lbragstadayoung so from a performance perspective - i have concerns16:29
ayounglbragstad, hold on for a moment16:29
ayounglet me finish talking through the validation and too many roles concern16:30
ayoungwhat we can do when we have more roles is switch to *not* expanding the roles in the token validation response, and instead add those to a "roles" attribute of the url_opattern16:30
ayoungthis would be a calculated value, with the implied-roles data used to generate a set.  The generation would be backwards from the implied roles;  for each implied-role, get the list of prior roles16:31
ayoungshould be a small subset per URL pattern16:31
ayoungand it will have to be calculated once per- url pattern list16:32
*** thinrichs has quit IRC16:32
*** thinrichs has joined #openstack-meeting-cp16:32
ayoungthe URL pattern list is itself a JSON document, and would be stored in the same Memcache that is used for the tokens16:32
ayoungit would be refetched based on cache timeout, just like the tokens are16:32
ayoungand would not be fetched from Keystone on each token16:33
ayoungOK... lbragstad you had a question about performance?16:33
lbragstadayoung we currently have each service validate two tokens (the subject token and the auth token) for an operation16:33
lbragstadnow we are going to be adding another round trip to the equation to get the list of url_patterns16:34
lbragstadhow long would the cache be valid for?16:34
lbragstadif we set invalidation too long we're going to start running into revocation cases16:34
lbragstadif we choose to get a fresh list of url_patterns on every token validation, we're going to be drastically increasing traffic to keystone16:36
ayoungNo revocations16:37
ayoungWe cache as long as the user is comfortable with holding the data16:37
lbragstad(this is essentially fore-shadowing my concern about the third step in the process that pulls the RBAC decision and url_pattern matching into keystone token validation check)16:37
ayoung1 minute?16:37
ayoungthe url Data will be longer, probably16:37
ayoung10 minutes, whatever they are comfortable with for a change to RBAC policy16:38
ayoungtoken validation does not change16:38
lbragstadso what happens if a user does something and the policy or url_patterns change in that time/16:38
ayounglbragstad, its an eventual consistency approach.  Either the operation has the old behavior or the new16:38
ruan_06this is the drawback of the token-based approach16:39
ayoungyeah, but this is all trade off for perf16:39
ayoungif we sent each request to the Keystone server, as in the original proposal, we get immediate enforcement, at the cost of perf16:39
ayoungCAP theorem stuff still applies too.16:39
ayoungif you want to create some way to automatically flush the caches, go for it, but it really is outside the scope and control of Keystone16:40
ayoungwe've discussed that before, and it just is too invasive16:40
ayoungWe could do something in the future where we put a checksum in both the RBAC file and in the tokem, and if they don't match, refetch, but I am not goimng to try and implement that in the context of this review16:41
ayoungtoo muich16:41
ayoungtoo little benefit16:41
dstanekayoung: that could be bolted on later. i don't see that changing your design16:42
dstanekayoung: tbh, i meant to reread the spec again last night, but ran out of time.16:42
thinrichsTime check: 20min left.  Seems we understand the design and tradeoffs for this proposal.  Are there other agenda items we want to fit into this meeting?16:42
lbragstadyeah - we had a few more action items from last week16:43
lbragstadI wanted to give ktychkova some time to explain what she has been able to accomplish with Apache Fortress16:43
lbragstad(if she want to)16:44
lbragstadwants*16:44
ktychkovaYes16:44
ktychkovaApache Fortress is a java implementation of RBAC16:44
ayoungIt is essentially an external PDP16:44
ayoungmore than just RBAC, right?16:44
lbragstadok - so now that ayoung has filled us in on his spec - i'll leave the action item for folks to go back and continue looking at it.16:44
lbragstadlet's carry the discussion about RBAC and url_patterns there16:45
ayoungWe'd consider the APache fortress approach full ABAC16:45
ayounglbragstad, ++16:45
ktychkovaIt is possible to integrate it with OpenStack16:45
lbragstad#topic ktychkova to summarize work with Apache Fortress and keystone16:45
*** openstack changes topic to "ktychkova to summarize work with Apache Fortress and keystone (Meeting topic: policy)"16:45
lbragstad#link http://directory.apache.org/fortress/16:45
lbragstad#link http://xuctarine.blogspot.ru/2016/08/apache-fortress-easiest-way-to-get-full.html16:45
ktychkovaok16:45
ktychkovaso Apache Fortress is RBAC implementation with a web interface to manage policies16:45
ktychkovaThe point is: Apache Fortress should not be some default thing in the OpenStack16:46
ktychkovaBut it would be nice to support 3rd party apps for the RBAC16:46
ktychkovaIt doesn't require any changes in Keystone, only in oslo.policy16:46
ayoungktychkova, so oslo.policy is doing more than just RBAC16:46
ayoungmost important, it is doing the scope check16:47
ruan_06ktychkova:  you mean externalize authorization to Fortress?16:47
ayoungis that to be done in Fortress, or left in a static file?16:47
ktychkovaruan_06: yes16:47
ayounghttps://blueprints.launchpad.net/keystone/+spec/assignments-in-fortress  was posted about a year ago16:47
ayoung#link more recent http://xuctarine.blogspot.com/2016/06/apache-fortress-instead-of-policyjson.html16:48
ayoung#link http://xuctarine.blogspot.com/2016/06/apache-fortress-instead-of-policyjson.html16:48
ayoungmore recent doc explaining a POC16:48
ayoungktychkova, is that your blog?16:49
ktychkovaayoung: yes16:49
ruan_06that's a good idea to externalize authorization16:50
lbragstadktychkova it looks like the changes you made to keystone were minimal - most of the work was in oslo.policy, right?16:51
ktychkovaright16:51
ktychkovano changes in Keystone16:51
lbragstadjust configuration16:51
ruan_06ktychkova:  where to store role-assignment information?16:52
lbragstadktychkova i assume you had to duplicate all of the policy from policy.json into AF16:52
ktychkovayes, AF stores everything in OpenLDAP16:52
ayoungktychkova, is it using RFC schemas, or something custom?16:53
ktychkovacustom, i guess16:53
ayoungIs this something we could describe to someone with a different LDAP server and say that the implementation would be done the same way?16:53
*** stvnoyes has quit IRC16:53
thinrichsIs every request sent to oslo.policy hopping over the network to ask Fortress?  Or is there some caching going on?16:53
ayoung ktychkova not necessarily custom. I did the initial LDAP work and there is a scheme in the RFS to do RVBAC16:54
ayoungRBAC16:54
ayoungorganizationalRole IIRC16:54
*** Kiall has joined #openstack-meeting-cp16:54
*** stvnoyes has joined #openstack-meeting-cp16:54
lbragstadktychkova is https://review.openstack.org/#/c/237521/ the only patch you needed to get things working with oslo.policy?16:54
ktychkovayes16:54
lbragstadwell - that's cool16:55
ktychkovaayoung: I'm not sure about schemas, it was out of the scope of my research16:56
ktychkovaI used Apache  Fortress as is16:56
thinrichsktychkova: Is every request sent to oslo.policy hopping over the network to ask Fortress?  Or is there some caching going on?16:56
ayoungSo, I have a couple concerns16:57
lbragstadso - i guess if we wanted to do this today, we'd need to go through the following. 1.) propose a spec to oslo.policy for https://review.openstack.org/#/c/237521/ 2.) formally document AF process in keystone16:57
ayoungthe biggest one is how Fortrass treats roles16:57
ayoungare they global, or does it have the concept of a scope?16:57
ktychkovano caching in my patch, but it is PoC16:57
lbragstadtwo minute warning16:58
ayoungquestion is whether it is possible to cache.16:58
ktychkovaayoung: what do you mean "scope"?16:58
ayoungktychkova, a role is assigned to a user "on a project" in openstackl16:58
ayoungso the member role is not a global role16:58
thinrichsayoung: right question: can we cache?16:58
thinrichsktychkova: To be clear I think that's a cool POC!16:59
ayoungthinrichs, I think the answer is No.  Only identical request  can be cached16:59
ayoungeach request for a different user or a different operation requires its own decision16:59
lbragstadalright - let's continue our discussion in #openstack-keystone16:59
lbragstad#endmeeting16:59
*** openstack changes topic to "OpenStack Meetings || https://wiki.openstack.org/wiki/Meetings"16:59
openstackMeeting ended Wed Nov 23 16:59:55 2016 UTC.  Information about MeetBot at http://wiki.debian.org/MeetBot . (v 0.1.4)16:59
openstackMinutes:        http://eavesdrop.openstack.org/meetings/policy/2016/policy.2016-11-23-16.01.html16:59
openstackMinutes (text): http://eavesdrop.openstack.org/meetings/policy/2016/policy.2016-11-23-16.01.txt17:00
openstackLog:            http://eavesdrop.openstack.org/meetings/policy/2016/policy.2016-11-23-16.01.log.html17:00
*** gagehugo has left #openstack-meeting-cp17:00
*** spilla has left #openstack-meeting-cp17:01
*** thinrichs has quit IRC17:01
*** hogepodge has joined #openstack-meeting-cp17:28
*** hogepodge has quit IRC17:33
*** hogepodge has joined #openstack-meeting-cp17:43
*** parora has joined #openstack-meeting-cp18:13
*** prateek_ has quit IRC18:16
*** prateek_ has joined #openstack-meeting-cp18:24
*** parora has quit IRC18:27
*** markvoelker has quit IRC18:35
*** prateek_ has quit IRC18:38
*** jgriffith is now known as jgriffith_away18:42
*** jgriffith_away is now known as jgriffith19:14
*** gouthamr has quit IRC20:50
*** flaper87 has quit IRC20:52
*** xyang1 has quit IRC22:59
*** lamt has quit IRC23:43

Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!