18:01:12 #startmeeting keystone 18:01:13 Meeting started Tue May 27 18:01:12 2014 UTC and is due to finish in 60 minutes. The chair is morganfainberg. Information about MeetBot at http://wiki.debian.org/MeetBot. 18:01:15 Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 18:01:17 The meeting name has been set to 'keystone' 18:01:35 #topic identity-specs repo 18:01:45 morganfainberg, you running things today? 18:01:45 dolphm, o/ 18:01:50 morganfainberg: this is yours 18:01:50 I'm working on a spec 18:01:59 ayoung, yeah. 18:02:09 ok so we offically have a specs repo now! 18:02:11 * ayoung thinks all of the power of being on monty's team is headed ot morganfainberg 's head 18:02:14 yay 18:02:18 haha 18:02:29 ayoung, LOL 18:02:31 #link https://github.com/openstack/keystone-specs 18:02:52 this new spec is for v3 extension advertisement 18:02:59 the repo is keystone-specs (after much deliberation every program is using the code names) 18:03:00 morganfainberg, already updated. Should be able to just modify the link in .git/config to point to the new repo 18:03:07 juno 1 is june 12, so basically anything not about to land will need a spec https://wiki.openstack.org/wiki/Juno_Release_Schedule 18:03:13 dolphm, ++ 18:03:59 is there a template of a spec for us to follow (I see a template.rst in there, but not sure it has anything in it)? 18:04:00 keystone core members are responsible for reviewing specs as well now (we don't have a separate team like some other projects do) 18:04:07 docs also asked that we move all our specs from identity-api into keystone-specs - which would also make it easier for us to propose API changes as part of spec proposals 18:04:27 henrynash, hmmm, there was a lengthy template, i'll see if i can find it 18:04:28 ahh, sorry, I see it is one level up 18:04:29 henrynash: the template has the sections to fill in 18:04:30 dolphm, does the doc team mind if we don't give them commit rights? 18:04:30 henrynash: the template seems to provide a good overiew 18:04:35 dolphm, right now they have commit rights to identity-api 18:04:36 henrynash, ++ 18:04:37 erm... approval 18:04:39 henrynash: there are two - the empty one needs to nuked? 18:05:01 it's a symlink 18:05:01 morganfainberg: i think that might have been the point - they don't want our API specs :) 18:05:03 dolphm, the templates that are empty are symlinks so docs will build until we have a actual spec 18:05:13 cc henrynash ^ 18:05:30 once we have a real spec we can remove the symlink 18:05:31 don't try checking it out on windows 18:05:36 morganfainberg: right, ok got it 18:05:50 bknudson, so, i hear we need to not do symlinks next time and maybe just a copy? 18:06:02 are we having a J2 cutoff for all features that aren't extensions again? 18:06:05 or just fix it now as well so we don't break people. 18:06:11 bknudson: this is going to break my workflow then 18:07:04 definitely will break windows 8.1 18:07:17 seems like we should fix the doc build so that it doesn't break if there's no files in a directory 18:07:27 gyee: windows 8.0 4 life, yo 18:07:32 heh 18:07:47 :( i think i'm in the wrong meeting 18:07:50 bknudson, sure. 18:08:17 bknudson, i think it's just how the index base is built, not sure we can "fix" it though 18:08:41 morganfainberg: the symlink dies as soon as we have a real spec, correct? 18:08:47 (is there only one?) 18:08:47 dolphm, that is the plan 18:08:58 maybe we could have a spec for the release... e.g., there's some work to do for every release 18:09:05 dolphm, there is a symlink for each directory (e.g. ksc, juno, etc) 18:09:10 for example, removing stuff that's deprecated. 18:09:13 bknudson: deprecations and removals and whatnot? 18:09:18 release notes? 18:09:29 dolphm, pre-development notes? 18:09:36 dolphm, summit summary? 18:09:51 i'd like release note contributions to be an artifact produced by the -specs repo anyway 18:11:12 dolphm, what about a doc about work that was bumped from the previous release? 18:13:00 ayoung, i think a summit summary (even if it's just a link to the etherpads) would be a solid start. anything bumped from previous release would need to be re-proposed (might be a summary approval, but still needs reproposal) 18:13:23 ayoung: that'll basically be tracked by blueprints that are unmerged, the specs will have to be proposed as a move to the next release 18:13:38 morganfainberg: ++ 18:13:52 s/unmerged/not "Implemented"/ 18:14:19 dolphm, you have a great summary (i saw you taking tons of notes) mind replacing the symlink with that? or something derived from that? 18:14:34 and future releases we'll do the same 18:14:54 morganfainberg: my summit summary thing? 18:15:00 dolphm, yeah 18:15:15 morganfainberg: i'm not clear on what do you want me to do with it? 18:15:17 #link http://dolphm.com/openstack-juno-design-summit-outcomes-for-keystone/ 18:15:25 morganfainberg: even with real docs won't it still be broken on windows because of the specs symlink? 18:15:45 dolphm, aha, i was thinking of just taking that and stick it in the repo as the "juno targets" 18:16:08 dolphm, instead of the symlink to the template 18:16:34 morganfainberg: not all of them are *targets* for juno (like Centralized quota-management), nor specific to keystone (like TC-blessed API conventions) 18:16:37 ah 18:17:29 dstanek, probably same issue :( 18:18:03 morganfainberg: i don't know that we need to care too much about -specs + windows 18:18:11 dolphm, probably not. 18:18:38 client seems to be the only place where windows users seem to appear 18:18:51 and they're few and far between 18:19:01 will client run on windows 3.1 for workgroups? 18:19:04 another lame joke that went terribly awry. 18:19:07 cause... 18:19:30 bknudson, legitimately my previous company many people contributed from windows systems (did checkouts etc) 18:19:59 most converted to a non-windows OS eventually 18:20:03 morganfainberg: we only support two stable releases back, so windows 98se & windows XP 18:20:08 dolphm, ++ 18:20:48 Win2k was never considered stable? 18:20:59 morganfainberg: #topic 18:21:04 anyway back on topic 18:21:07 Excuse me ME 18:21:13 Win ME 18:21:18 i think we're done on specs 18:21:20 next topic 18:21:30 #topic Hackathon information 18:21:33 dolphm, this one is you. 18:21:50 #link http://dolphm.com/openstack-keystone-hackathon-for-juno/ 18:21:53 i have no new information to report since last week :( haven't heard back from geekdom but i sent them another ping today 18:22:24 if you are eager to book something, do flights but not hotels yet 18:22:57 rackspace is not close to geekdome? 18:23:05 dates are firm right? 18:23:08 bknudson: geekdom is middle of downtown 18:23:33 dstanek: yes, let's say dates are firm. if geekdom somehow falls through, we'll do rackspace castle again 18:24:03 ok, on the security lists there were telling folks to get approval for those dates 18:24:17 cool 18:24:25 I understand there's an OSSG meeting before keystone meeting 18:24:26 dstanek: the security team is likely going to move things to a different date 18:24:45 nkinder: not the same week anymore? 18:24:45 nkinder: significantly later in the cycle, or? 18:24:51 there are some date conflicts for a number of OSSG members, so something else will likely be set up 18:25:01 The exact dates aren't clear yet. 18:25:10 ah, i didn't see that follow up 18:25:11 nkinder: and barbican is still planning on July 7, 8, 9, correct? 18:25:21 dolphm: that is my understanding, yes 18:25:30 nkinder, thats unfortunate would have been good to have all the security minded folks/teams (OSSG, barbican, keystone) around 18:25:33 good, because i'm pursuing space for them on those dates :P 18:25:37 dstanek: it was sent out privately 18:26:37 nkinder: that would explain it then..that's too bad - i was looking forward to seeing how you guys operate 18:26:50 morganfainberg, security is a mindset anyway :) 18:26:59 gyee, hehe 18:27:12 since we've got the OSSG we don't have to think about security for ourselves 18:27:27 :o 18:27:44 bknudson: that's a good point! we can just mark everything as having a security impact 18:27:45 Shall we talk plugins? 18:28:00 #info Dates are set for meetup July 9-11th, 2014 18:28:07 #topic Open Discussion 18:28:22 I added a topic to the agenda about auth plugins 18:28:31 nkinder, hm i didn't see it 18:28:38 nkinder, aha 18:28:41 ok 18:28:42 well then 18:28:50 #topic Auth plugin method signature changes 18:28:59 nkinder, all you 18:29:04 Break all the old clients! 18:29:05 I'm working on hardening how unscoped/scoped tokens work when using a token for auth 18:29:26 This requires scope information from the request to be available inside of the auth plugins 18:29:29 ayoung, you break the clients, somebody will wait for you at the parking lot 18:29:30 nkinder, specifically from Horizon, which is the nasty use case.... 18:29:43 Unfortunately, we don't pass that info right now. 18:30:02 nkinder, auth plugins are mistnamed 18:30:10 this on the server, you mean? 18:30:22 on the server, auth plugins should be authentication only 18:30:23 I would like to pass the entire AuthInfo object (or a copy) to the auth plugins, but this requires changing the public method signature 18:30:46 forget horizon. I'm talking about the keystone server 18:30:58 there's other ways to pass it in... for example could have a setter 18:31:03 nkinder, so you want to entire payload 18:31:05 bknudson, nope 18:31:16 we need the token creation to be a pipeline 18:31:25 this is not a job for the auth plugins, 18:31:32 this is for the Token Provider 18:31:33 could provide a new method 18:31:49 ayoung: well, this is specific to token authentication 18:31:59 bknudson, ReallySecureTokenAuthNoWeMeanItThisTime? 18:32:10 nkinder, doesn't matter...the user is still authenticated, just not authorized for that new service 18:32:11 if I authenticate with an existing token, I want to disallow changing project scope 18:32:22 morganfainberg: authenticate2() 18:32:23 nkinder, that is fine, but it should not be auth plugin that does that 18:32:26 its in 18:32:35 the monolith 18:32:37 bknudson, ++ yeah or conditional with a decorator or something. 18:32:39 I thought authentication and scoping are two separate deal 18:32:49 why can't we change project scope? 18:32:50 scoping is controlled by policies 18:33:04 ayoung: ok, so we would need a whole new method that an authn/authz plugin would have to deal with. 18:33:05 does the plugin have access to the request object? 18:33:05 http://git.openstack.org/cgit/openstack/keystone/tree/keystone/token/providers/common.py#n414 18:33:07 if I request a token with no scope and the user has a default project then it'll be scoped to the project 18:33:13 ok, let me step back to talk about scoping 18:33:18 bknudson, isn't that a v2.0 ism? 18:33:21 this seems like that that belongs on the request itself 18:33:22 so I'd have to get an unscoped token 18:33:25 nkinder, I don't think so....I think that we need logic in that provider... 18:33:32 but we need to make the token pipeline easier to work with 18:33:39 The idea is that an unscoped token is like a TGT in Kerberos 18:33:43 right now the logic for v3 is like this: 18:33:47 It can be used to fetch scoped tokens 18:33:56 ayoung: wait and let me explain the motivation first 18:34:05 aut.controller->pluging->token.provider 18:34:14 a scoped token should only be allowed to be used for the project it is scoped to 18:34:36 Currently, you can take a scoped token and authenticate with it to get a new token for another project (or even a new unscoped token) 18:35:14 nkinder, oh, I agree with you that it is broken as is 18:35:16 morganfainberg: not sure what you mean about v2.0ism -- v3 has default_project and v2 has tenantId (or tenant_id??) 18:35:16 This means that a scoped token has no security properties, as a service that obtains the token can be used to get another token to perform other operations. 18:35:22 and Horizon is what has caused that brokenness 18:35:29 jamielennox, how much breakage would that cause in the session object(s)? ^ or how hard would that be? 18:35:39 nkinder, you can rescope if you don't have roles on that project 18:35:42 you can't 18:35:47 I would like scoped tokens to be used to allow a user to create a restricted token 18:35:47 nkinder, an unscoped token should not be used to do anything but talk to keystone 18:35:59 ayoung, ++ 18:36:05 horizon should hold on to an unscoped token and use it to get scoped tokens for the current project 18:36:16 asking them to hold on to two tokens per user should not be too dire 18:36:21 gyee: I know, but what if you are an admin on one project and have low level rights on another project? 18:36:24 morganfainberg: i've always known i need a way to handle rescoping auth plugins, i just haven't got to the point where someone asked for it - beyond that idon't see why it would cause many problems 18:36:41 then when a user changes project, they revoke the scoped token and used the unscoped to get a new scoped token 18:36:45 ayoung, that's essentially how horizon operates today, trade in an unscoped token for a scoped token 18:36:52 gyee: in that case, your "low-level" token can be intercepted and reused during it's validity period to get your admin privileges on the other project. 18:36:53 morganfainberg: although an unscoped token doesn't have any catalog - i would like to change that so an unscoped token at least contains a catalog with keystone it in 18:37:07 and the code to enforce that you can only go from unscoped->scoped would be enforced in the token provider 18:37:09 jamielennox, nod. 18:37:15 jamielennox, ++ 18:37:39 gyee: I created a writeup with my proposal... 18:37:42 jamielennox, not unreasonable. actually i think that works well into the id-only stuff down the line 18:37:42 #link https://blog-nkinder.rhcloud.com/?p=101 18:37:43 jamielennox, gyee that is not how Horizon operates 18:38:07 its how horizon should operate, but they instead keep one, scoped token around, and expect to be able to transfer that to another scoped token 18:38:08 ayoung: ? 18:38:19 horizon also does explicit token revocations now. 18:38:29 ayoung, i think we have to work with them in either case on this front 18:38:33 morganfainberg, I know. I broke that at one point, too 18:38:39 nkinder, ahh, escalated privilege 18:38:42 right, this will cause problems for horizon and mean that we need to remove the concept of default_project_id - these are things i'm in favour of but it's a tough transition 18:38:42 and I think we should break that rule to work like this: 18:38:51 gyee: yes 18:38:57 1. Unscoped tokens are for Horizon. An unscoped has an origin 18:39:09 jamielennox, default_project_id has been painful over many releases 18:39:13 an unscoped token must come fromthat origin and will time out in 10 minutes 18:39:22 basically, make unscoped tokens a session 18:39:29 so, sliding windo 18:39:31 w 18:39:32 ayoung, with a refresh timer perhaps? 18:39:47 if they refresh unscoped within 10 minutes, they get a new unscoped 18:39:55 lets call them session tokens 18:40:06 nkinder, in that case, any rescoping is bad then? 18:40:22 gyee: yes, which is the patch I was working on 18:40:24 gyee, session token to scoped token 18:40:30 gyee, it's less secure overall. 18:40:31 gyee: unscoped->scoped should be allowed 18:40:32 only thing that should be allowed 18:40:41 gyee: projA -> projB should not be allowed 18:40:50 nkinder, and only from the same origin as the unscoped was requested from 18:41:01 but unscoped->scoped would have the same effect right? 18:41:16 ayoung, or would you accept a unscoped token w/ say x509 binding vs strict origin? 18:41:17 gyee: unscoped is a privileged token. 18:41:22 ideally, unscoped session tokens would be bound to a Kerberos principal or an x509 18:41:24 nkinder: i like that, it's how i thought unscoped tokens worked originally and then i found the default_project mess 18:41:48 it gives an actual purpose to unscoped tokens 18:41:51 morganfainberg, if Horizon used an X509 to talk to Keystone, that would be what the token gets bound to 18:42:00 nkinder, what I mean is if I intercept an unscoped token, its go-time too right? 18:42:03 ayoung, i was thinking of unscoped from non-horizon clients 18:42:05 gyee: you hang onto it and use it to fetch scoped tokens as needed. You only use the unscoped token to talk to Keystone and get scoped tokens. 18:42:13 gyee: yes, which is why you only ever send it to keystone 18:42:15 morganfainberg, bind to an X509 or Kerberos principal 18:42:28 gyee: over SSL/TLS... 18:42:29 ayoung, ++ 18:42:38 nkinder: ayoung: what do you mean by origin? 18:42:45 helll yeah, I am all for x.509 18:42:59 dstanek I want to guard against stolen tokens 18:43:03 so I would say: 18:43:20 if Kerberos or X509 is in use, then "origin" means "same authentication doc" 18:43:33 dstanek, but if not...look at the requestor IP Address? 18:43:50 I don;t know if there really is a way to limit the damage done there, but we should at least try 18:44:02 ayoung: so horizon (and other services) would be passing that through to keystone? 18:44:05 dstanek, ayoung or something like csrf from the horizon 18:44:16 dstanek, yeah 18:44:19 dstanek, just some kind of binding to try and ensure authenticity of the requestor 18:44:22 dstanek, wait...no 18:44:32 dstanek, I mean that Horizon requests the token 18:44:39 Horizon would not pass it through. 18:44:57 ayoung: and then only horizon can use the token? 18:44:58 So If I get an unscoped from Horizon, only Horizon can use it to get a scoped from Keystone 18:45:04 ++ 18:45:19 nkinder, how close are we aiming to re-implementing kerberos ? [not a bad thing] 18:45:21 does that only apply for unscoped? 18:45:40 re-implementing kerberos? 18:45:59 gyee, token-granting-tokens, etc. 18:46:08 morganfainberg: it's similar conceptually 18:46:14 morganfainberg, this is not Kerberos 18:46:21 morganfainberg: it's still quite different though 18:46:24 Kerberos is authentication. THis is authorization 18:46:40 i’d say just making unscoped tokens shortlived plus only allowing unscoped->scoped (and not scoped->scoped) would in itslef me a major step fowrard 18:46:49 so we have kite, and this thing? 18:46:57 both based on Kerberos? 18:46:58 henrynash, ++ 18:47:08 nkinder, ok making sure we weren't just going too far down a path of reimplementing 18:47:35 nkinder, figured we were fairly diverged still 18:47:40 ayoung, ++ 18:47:52 do we have a way to force an unscoped token even if user has a defualt project? 18:47:56 morganfainberg: yeah, it's very different in other areas (revocation abilities, etc.) 18:47:59 morganfainberg, now....SAML is a different question 18:48:03 bknudson: it didn't look like it to me 18:48:03 bknudson: no 18:48:10 bknudson, I am afraid not 18:48:15 seems like we'd just scope: {} 18:48:18 bknudson: I had to unset the default project to get an unscoped token 18:48:20 bknudson, yeah, we could return both? 18:48:29 so what is the advantage of shortening unscoped tokens? currently you can't get a token with a longer lifetime than the one that was used to authenticate it 18:48:37 bknudson: once you specify the defaul_project in the user entity, no unscoped tokens from then pb 18:48:40 jamielennox, we need to change that 18:48:45 (then on) 18:48:46 jamielennox: ayoung wants that for the horizon session case really 18:48:51 we need to let a session be a session and have a sliding windo 18:48:52 w 18:48:58 jamielennox: time out an inactive user 18:49:00 we would actually need unscoped tokens to live longer than scoped 18:49:02 10 minutes 18:49:08 morganfainberg, nope 18:49:21 we need them to live a very short time, but be renewable 18:49:31 do we revoke unscoped tokens when the password changes? 18:49:58 bknudson: I’d hope so…. 18:50:01 bknudson: hopefully you're not using passwords in the first place... :) 18:50:14 ayoung, so scoped tokens would no longer be revoked if the parent unscoped token was? 18:50:22 bknudson, I'd say so, yes 18:50:28 ayoung: for long running operations would the calling service have to renew the token? 18:50:33 I guess it only applies to sql users anyways, so really doesn't work anyways 18:50:34 ayoung, or just the validity of the scoped token would extend beyond the unscoped (depending on config) 18:50:36 ? 18:50:38 morganfainberg, correct: but we should support the opposite 18:50:43 ayoung, right. ok 18:50:48 I think the short lived unscoped token idea is really a second step 18:50:50 revoke unscoped->revoke all scoped... 18:51:03 ayoung, truely a session token 18:51:10 nkinder: ++, i'm not sold on that yet 18:51:20 The first step would be to just lock down the unscoped->scoped idea 18:51:30 nkinder, i'd probably make it configurable: default is the same TTL as normal tokens 18:51:43 With the current code, the scoped token inherits the expiration time from the scoped token 18:52:03 nkinder: ..from the unscoped one 18:52:15 henrynash, from any token, expiry is the same 18:52:29 henrynash: whoops, correct (though you currently CAN go scoped->scoped) 18:52:29 nkinder, we need to solve these other issues too 18:52:29 morganfainberg: yep 18:52:29 as it's parent 18:52:40 we would need some other unique identifier to solve the unscoped inheritance then 18:52:41 ayoung: yes, but it's not a pre-requisite 18:52:43 I don't think we want to do this in two jumps 18:52:48 nkinder, it kindof it 18:52:49 is 18:53:10 nkinder, the whole "whoops we just loggged you out" thing in Horizon is going to be a problem 18:53:15 nkinder: is your blog post going to be turned into a spec? 18:53:25 dstanek: yes, I'm going to write one 18:53:28 i'm very curious to read about all of these cases 18:53:29 nkinder, we can implement in steps 18:53:40 ayoung: how is that different than now? 18:53:41 but lets figure out the whole design, 18:53:53 nkinder, we shortened the token length to an hour 18:53:58 beforer it was the whole day 18:53:59 ayoung, e.g. a spec proposed? :P 18:54:30 ayoung, i think we can solve the design in the spec. 18:54:35 ok, so my question was really about where the scope change should be implemented, as I was trying to put it in the token auth plugin 18:54:38 nkinder, we will have puppet resetting the default back to 24 hours or whatever 18:54:46 morganfainberg, ++ 18:54:58 It sounds like I should look at the token provider and deal with it there if the 'token' method is listed 18:55:03 morganfainberg, just so long as this is understood in context 18:55:17 nkinder, No, we need to deal with it in Horizon first 18:55:29 I already had that "fix" yanked about 18 months ago 18:55:59 ayoung: Well, that brings the second part of this... Should the behavior be configurable? 18:55:59 nkinder, i think the answer is yes it goes in the provider, but it blocks on getting horizon to solve some issues. 18:56:12 nkinder, Oh god, no 18:56:25 We can't lock this down until Horizon knows how to deal with it 18:56:28 how much does horizon really have to do? it must already handle the case where it gets either an unscoped token or a scoped one on first auth 18:56:49 nkinder, would you want to ever be able to hand in a kerberos service ticket to get another service ticket? Should that be configurable? 18:56:52 lets just fix it 18:56:59 jamielennox, minor changes really, but we couldn't make this hard and fast unless horizon had those changes. 18:57:05 I'd expect Horizon doesn't care if it gets a scoped token or unscoped, treats them as unscoped either way 18:57:08 I think Horizon would need to get the unscoped token and just use it to get a scoped token when you select a project 18:57:14 nkinder, yes 18:57:22 nkinder, and...funny you should mention that 18:57:29 dolphm, do we support the concept of keystone across different versions of other services? 18:57:34 if I might remind morganfainberg about his request for Kerberos help 18:57:36 dolphm, don't think that is a real OS requirement... but. 18:57:40 morganfainberg: that's one of my worries too 18:57:40 morganfainberg, bknudson: right, so lets get something proposed and I don't think horizon will have the problems we thing 18:57:56 There is a pattern here: Horizon work to talk to Keystone is something that is going to require some design 18:58:02 morganfainberg: ...which would be an argument for making it configurable (even though I'd prefer not to) 18:58:30 nkinder, i don't know how many people don't deploy lock-step 18:58:40 nkinder, i think this impacts orgs that track master much more though 18:58:47 nkinder, it probably needs to be configurable 18:58:48 nkinder, OK, so I kind of agree, in that I want to break the token provider up into a pipeline 18:59:00 ~1min 18:59:01 and the "token to token" portion could be swapped out then 18:59:24 nkinder, I'd like to have a separate paste pipeline where its like: 18:59:26 morganfainberg: that's the same conclusion I was arriving at. Leave the default behavior as it is today, change horizon, then switch the default down the road 18:59:30 ok lets take this back to -keystone 18:59:42 thanks everyone! 18:59:46 auth_plugins biz_rule1 2 3 4 sign_token _persist 18:59:47 #endmeeting