| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2021-03-12 | |||
| 16:23:01 | lbragstad | for now though - a system-admin can explicitly give themselves access to a project and do whatever they need to | |
| 16:23:02 | dansmith | because it seems like there's maybe some confusion here (more than just my ignorance) | |
| 16:23:17 | sean-k-mooney | lbragstad: right but today they dont have too | |
| 16:23:34 | sean-k-mooney | lbragstad: i do not need to be a meber of a project as a system admin to stop a vm | |
| 16:23:42 | dansmith | lbragstad: ack, so cutting off resource create for them makes sense for the 500 case currently | |
| 16:24:06 | lbragstad | ok- so in that case | |
| 16:24:24 | lbragstad | if i'm an admin on project `admin` and i use my token to stop a vm in project `foo` | |
| 16:24:29 | lbragstad | what does nova do with my `admin` project id? | |
| 16:25:38 | sean-k-mooney | for vm stop we just need the vm uuid but if we look in the logs we likely will log the action as done by the admin project | |
| 16:25:53 | gmann | so it will be 403 right? | |
| 16:26:02 | sean-k-mooney | no it should be a 200 | |
| 16:26:04 | gmann | with new default project_id is compared for all | |
| 16:26:08 | dansmith | the action has a project_id, I'm looking to see where we get it from, but normally it's context | |
| 16:26:14 | dansmith | because it's the person doing the action | |
| 16:26:21 | dansmith | so that would mean system_admin has to be refused | |
| 16:26:49 | gmann | system admin case there is no proejct id so would not be compared | |
| 16:27:05 | gmann | i mean system admin power for all projects | |
| 16:27:05 | dansmith | which means they can't shut down an instance | |
| 16:27:12 | gmann | they can | |
| 16:27:45 | sean-k-mooney | im going to chefck it now | |
| 16:28:11 | gmann | i mean with our current default policy, system admin can stop any instance, project member/admin can stop their own instance | |
| 16:28:34 | dansmith | https://github.com/openstack/nova/blob/ab07507e5cfce6232fef373d07ff92ea704541da/nova/objects/instance_action.py#L56-L63 | |
| 16:28:36 | sean-k-mooney | gmann: that is what im expecting | |
| 16:28:37 | dansmith | gmann: they can't | |
| 16:28:55 | dansmith | gmann: if their project_id is going to be None, they will not be able to create an InstanceAction | |
| 16:29:05 | dansmith | which likely will fail before we even begin the call to stop the instance | |
| 16:29:55 | gmann | ah i see, they fail later even pass the policy... | |
| 16:30:00 | dansmith | right | |
| 16:30:06 | dansmith | this is what I'm saying, | |
| 16:30:15 | dansmith | looots of stuff in nova will not allow (or break) if project_id is None, | |
| 16:30:22 | dansmith | and fixing all of that seems silly to me | |
| 16:30:39 | sean-k-mooney | i just did it with horzon | |
| 16:30:41 | gmann | ah yeah, same case of "POST server" by system | |
| 16:30:42 | dansmith | I'd rather say "no tenant-isolated resource manip if you're a system_admin with no project" | |
| 16:30:46 | sean-k-mooney | it shut down fine | |
| 16:30:50 | dansmith | you have to get a project-scoped token to do those things | |
| 16:30:55 | melwitt | lyarwood++ thanks for getting that all fixed up. will go through and review | |
| 16:31:26 | sean-k-mooney | so i create a vm on my k8s project, remove my user form that proejct and then stoped it from the admin view in horizon | |
| 16:31:47 | lbragstad | sean-k-mooney are you using a system-scoped token though? | |
| 16:31:51 | dansmith | sean-k-mooney: is horizon using a system-scoped token where context.project_id is None? | |
| 16:31:58 | sean-k-mooney | no the old style ones | |
| 16:32:00 | dansmith | because that's the new thing here | |
| 16:32:04 | dansmith | right, so that's not the problem | |
| 16:32:08 | gmann | I do not think Horizon use system scope token | |
| 16:32:13 | gmann | yeah | |
| 16:32:18 | lbragstad | correct - they're still working on it | |
| 16:32:19 | sean-k-mooney | my point is system scoped tokens should work identiclaly to that | |
| 16:32:25 | dansmith | they don't | |
| 16:32:30 | sean-k-mooney | then that a problem | |
| 16:32:39 | dansmith | sean-k-mooney: did you look at the bug? | |
| 16:32:39 | gmann | dansmith: i agree on not putting project_id in all such APIs request body | |
| 16:32:53 | sean-k-mooney | yes and i suspect i know why it does not work | |
| 16:32:56 | dansmith | sean-k-mooney: it's pretty gruesomely obvious with the project_id=None being.. a big deal | |
| 16:33:02 | dansmith | gmann: ++ | |
| 16:33:34 | gmann | yeah, if API operate on project_id form context then system token is not useful | |
| 16:33:46 | sean-k-mooney | yep | |
| 16:33:49 | gmann | which is our most server APIs/action | |
| 16:33:59 | sean-k-mooney | unless we can populate the context in some way | |
| 16:34:17 | gmann | but some of them we might be able to make it work if we use 'id' itself instead of context | |
| 16:34:24 | gmann | like in stop sevrer case, | |
| 16:34:50 | gmann | except POST server, we should be able to fix those right? | |
| 16:34:53 | dansmith | well, I suggested one way is to have a default project id in config that we use for system-scoped tokens, but even still, that's pretty gross | |
| 16:35:13 | sean-k-mooney | i dont like that but maybe | |
| 16:35:18 | dansmith | I don't either | |
| 16:35:25 | gmann | yeah | |
| 16:35:29 | sean-k-mooney | i would prefer to have a midelware level populatie it | |
| 16:35:34 | dansmith | which is why I'd rather say that you can't dick with an instance as a system admin | |
| 16:35:36 | dansmith | you have to get a token | |
| 16:35:52 | sean-k-mooney | that is why i was suggesting the new token delegation flow | |
| 16:36:04 | dansmith | sean-k-mooney: populate it with what? doesn't matter where it comes from.. if the user doesn't have a project.. you need to fake it or reject | |
| 16:36:06 | sean-k-mooney | e.g. sudo give me a project token | |
| 16:36:11 | dansmith | right | |
| 16:36:21 | dansmith | that is what I think needs to happen | |
| 16:37:23 | gmann | lbragstad: when we said system_id things, does system)id means some project id? or some new logical system ids | |
| 16:37:34 | lbragstad | today? | |
| 16:37:49 | lbragstad | today system means a super special string 'all' | |
| 16:37:54 | gmann | i mean in old design when keystone thought on system_id | |
| 16:38:06 | gmann | instead of 'all' | |
| 16:38:20 | lbragstad | we never had the 'system' construct in the old days? | |
| 16:38:26 | lbragstad | if i'm understanding your question | |
| 16:38:52 | lbragstad | we just used the 'admin' role for everything and didn't evaluate tenancy | |
| 16:39:08 | sean-k-mooney | lbragstad: i think the direction gmann was going was coudl we stash a project id in it | |
| 16:39:14 | gmann | lbragstad: i mean if system_id is supported then what it will be like ? some new project id or a new system id generated | |
| 16:39:24 | lbragstad | oh- ok | |
| 16:39:34 | lbragstad | i *could* be a service ID, in the future | |
| 16:39:37 | gmann | sean-k-mooney: i was thinking like this - context.project_id or context.system_id way ? | |
| 16:39:49 | sean-k-mooney | lbragstad: its ment to be like compute, storage or networking | |
| 16:39:55 | lbragstad | so - i could do something like $ openstack role add --user sean-k-mooney --system compute admin | |
| 16:40:04 | lbragstad | right | |
| 16:40:22 | lbragstad | so - then sean-k-mooney can manage nova, but can't add users to keystone | |
| 16:40:26 | lbragstad | or create public images in glance | |
| 16:40:36 | lbragstad | it would allow us to implementing constrained RBAC | |
| 16:40:39 | dansmith | does that mean system_id holds an actual project, or is system_id something else? | |
| 16:40:47 | lbragstad | system_id could be a service ID | |
| 16:40:51 | lbragstad | but not a project ID | |
| 16:40:52 | dansmith | that seems bad to me, | |
| 16:41:01 | lbragstad | the service ID seems bad? | |
| 16:41:05 | lbragstad | or the project ID seems bad? | |
| 16:41:07 | gmann | yeah but then we lose the concept of system vs project in nova ight? at least if we end up asking giving project token a sysmte role | |
| 16:41:09 | dansmith | because then if I'm going to try to audit "who shut down my instance" and I query for a project matching that ID, there is no project, right? | |