Dolph: Thanks, this was tremendously helpful in understanding how things work. Putting this information into the docs is on my todo list.
Take care, Lorin -- Lorin Hochstein Lead Architect - Cloud Services Nimbis Services, Inc. www.nimbisservices.com On May 10, 2012, at 10:25 AM, Dolph Mathews wrote: > > > On Thu, May 10, 2012 at 9:00 AM, Lorin Hochstein <lo...@nimbisservices.com> > wrote: > Are there any documented examples out there of how to use roles? I still have > a hard time building a mental model of how the system works. In particular: > > Do I need to create a new role for every user-tenant pair? Or can I reuse > the same role? > > You can recycle roles. Role names are also unique. A "member" role is > frequently used in the docs, where you can grant membership to a user on a > specific tenant. > > Creating and granting this role to two users on different tenants using > keystoneclient looks something like: > > # create two tenants > $ keystone tenant-create --name="Tenant A" > <tenant-id-a> > $ keystone tenant-create --name="Tenant B" > <tenant-id-b> > > # create two users > $ keystone user-create --name="User A" > <user-id-a> > $ keystone user-create --name="User B" > <user-id-b> > > # create a membership role > $ keystone role-create --name=member > <role-id> > > # (Neither user can access either tenant at this point.) > > # grant User A membership on Tenant A > $ keystone user-role-add --role_id=<role-id> --tenant_id=<tenant-id-a> > --user_id=<user-id-a> > # User A is now a "member" of Tenant A. > # (User B still has access to nothing at this point.) > > # grant User B membership on Tenant B > $ keystone user-role-add --role_id=<role-id> --tenant_id=<tenant-id-b> > --user_id=<user-id-b> > # User B is now a "member" of Tenant B, but not Tenant A. > # (and User A is still a "member" of Tenant A, but not Tenant B.) > > > Where are the semantics of roles specified? What I mean is, what determines > what a role allows a user to do with a specific service? > > Right now, that's entirely managed by each service's policy.json -- keystone > does nothing but provide the role names to each OpenStack service. > > This will change a bit during folsom, with the introduction of RBAC (bp > https://blueprints.launchpad.net/keystone/+spec/rbac-keystone). The contents > of each service's policy.json will be centrally managed in keystone, and the > "meaning" of the roles a user has (the user's set of capabilities in the > current authentication context) will be provided to OpenStack services -- so > service's will no longer need to "understand" role names. > > The examples I see always create a magical "admin" role, but how does, say, > nova, know that this role is associated with admin privileges? Is it because > the label is "admin"? > > Today, this is configurable via Nova's policy.json: > https://github.com/openstack/nova/blob/master/etc/nova/policy.json > > What if I want to create a role that allows users in a tenant to have regular > access to nova, but not to swift? How do I do that? Do I need to create a > "novaUser" role? Where do I describe what a "novaUser" role means? In nova? > In keystone? How? > > See above; not sure about swift's status, though. > > > Pointer to an example here would be really helpful, would love to add this to > the docs. > > Let me know if you find the above useful; or feel free to revise and submit :) > > > > Take care, > > Lorin > -- > Lorin Hochstein > Lead Architect - Cloud Services > Nimbis Services, Inc. > www.nimbisservices.com > > > > > > On May 10, 2012, at 3:50 AM, Dolph Mathews wrote: > >> +1 >> >> The second "way to accomplish this" is exactly what keystone currently >> supports (explicit role grants), which didn't change between diablo and >> essex at all. >> >> The first method (using global unscopedness) was dropped because its just as >> confusing as you describe it. >> >> -Dolph Mathews >> >> On May 10, 2012, at 2:35 AM, Joseph Heck <he...@mac.com> wrote: >> >>> Guang, >>> >>> I think you need to re-read the code. The association between a user and >>> tenant is what the role represents, and its inaccurate to assert that a >>> user is aligned only with a single tenant ever, that is not the case. >>> >>> A role is no longer global, specifically to avoid the tremendous confusion >>> and inaccuracy of implementation about how to apply a role that relates a >>> tenant and user along with a potential "global" role concept that was in >>> the earliest implementations of Keystone. The current implementation is >>> simpler and far more specific and clear in it's implementation. >>> >>> -joe >>> >>> On May 9, 2012, at 10:22 PM, Yee, Guang wrote: >>>> I think this use case underscores one of the key differences between the >>>> fat Keystone (Diablo - E3) and KSL (Essex final). In fat Keystone, users >>>> and tenants are loosely coupled. They are bind together by role >>>> assignments. In KSL, users and tenants are tightly coupled, and IMHO very >>>> inflexible. Maybe the following example would further clarify this … >>>> >>>> Suppose you have tenants Dodgers, Giants, and Brewers, user Bud Selid, >>>> roles Commissioner and Minority Owner, and service MLB. And you want Bud >>>> Selid to have the Commissioner role for Dodgers, Giants, and Brewers, but >>>> Minority Owner role for Brewers only. >>>> >>>> In fat Keystone, there a couple of ways you can accomplish this. >>>> >>>> 1) Make Commissioner a “global role” (unscoped) and assign it to user >>>> Bud Selid. Assign the Minority Owner role to Bud Selid for tenant Brewers >>>> by creating a role reference. When Bud Selid tries to access MLB with his >>>> unscoped token, MLB will get his Commissioner role back from Keystone. >>>> When Bud Selid tries to access MLB with his token scoped to Brewers, MLB >>>> will get both his Commissioner and Minority Owner roles back from >>>> Keystone. When Bud Selid tries to acess MLB with his token scoped to >>>> Giants or Dodgers, MLB will only get his Commissioner role back from >>>> Keystone. >>>> 2) Assign the Commissioner role to Bud Selid to tenants Giants, >>>> Dodgers, and Brewers individually by creating the respective role >>>> references. Assign the Minority Owner role to Bud Selid for tenant Brewers >>>> by creating another role reference. In this scenario, Bud Selid will >>>> always need a scoped token to access MLB. >>>> >>>> In KSL, there really aren’t any effective ways to accomplish the same >>>> thing. Global roles are no longer supported. A given user must assign to >>>> exactly one tenant. I suppose you can have Bud Selid under the “Default >>>> Tenant”, and assign both Commissioner and Minority Owner roles to him. But >>>> there are two major side effects. >>>> >>>> 1) Bud Selid must access MLB with the token scoped to the “Default >>>> Tenant” in order for MLB to recognize him as Commissioner. Which means he >>>> IS ALSO the Minority Owner for Dodgers, Giants, and Brewers. J >>>> 2) If Bud Selid tries to access MLB with the token scoped to either >>>> Giants, Dodgers, or Brewers, his a NOBODY. J >>>> >>>> The upcoming Domains blueprint (to be implemented for Folsom), which >>>> offers true multitenancy, should support these types of use cases. >>>> >>>> https://blueprints.launchpad.net/keystone/+spec/keystone-domains >>>> >>>> With Domains, you can create a MLB domain with tenants Dodgers, Giants, >>>> and Brewers. And have Bud Selid under the MLB domain. Notice that users >>>> will no longer be assigned to tenants. They will be under a domain. Create >>>> roles Commissioner and Minority Owner in the MLB domain. Assign the >>>> Commissioner role to Bud Selid, and the Minority Owner role scoped to >>>> Brewers. Suppose you have another domain NFL, Bud Selid will not be able >>>> to access any tenants in the NFL domain, unless the NFL domain >>>> administrator explicitly assign NFL roles to Bud Selid. >>>> >>>> >>>> Guang >>>> >>>> >>>> >>>> >>>> From: openstack-bounces+guang.yee=hp....@lists.launchpad.net >>>> [mailto:openstack-bounces+guang.yee=hp....@lists.launchpad.net] On Behalf >>>> Of Dolph Mathews >>>> Sent: Wednesday, May 09, 2012 4:34 PM >>>> To: Joshua Harlow >>>> Cc: openstack >>>> Subject: Re: [Openstack] Keystone client, user belongs to many tenants? >>>> >>>> The user create command is actually creating discrete users, each with a >>>> "default tenant" reference. >>>> >>>> While that's fine for a lot of simple use cases, it doesn't directly >>>> support a user accessing multiple tenants at all. >>>> >>>> Instead, create a role, and grant that role to a user-tenant pair, >>>> creating an explicit relationship between the two. Using default tenants >>>> is optional with this method, but will affect how users must auth. >>>> >>>> -Dolph Mathews >>>> >>>> On May 9, 2012, at 3:46 PM, Joshua Harlow <harlo...@yahoo-inc.com> wrote: >>>> >>>> A question, >>>> >>>> I am using anvil to setup the keystone roles/users/tenants. >>>> >>>> It seems like the python keystone client has the following command: >>>> >>>> client.users.create >>>> >>>> Which seems to take in the following: >>>> >>>> create(self, name, password, email, tenant_id=None, enabled=True): >>>> >>>> I would assume a user name can be used in multiple tenants but when I am >>>> trying to create a user that spans tenants and it seems like it borks. >>>> >>>> ClientException: Conflict occurred attempting to store user. >>>> (IntegrityError) (1062, "Duplicate entry 'admin' for key 'name'") 'INSERT >>>> INTO user (id, name, extra) VALUES (%s, %s, %s)' >>>> ('3e14a9c1fd404c7e81c0dba8bd640575', 'admin', '{"password": >>>> "$6$rounds=40000$yX5fL51OyGKjuPjr$8yv.S3GpqsKeaHv4GjNY4YW2vvykWzrEV7RX.qJpyy3CjmyXrZMRRJifEzfa7xv1l.NzoggQBXUAESn3Oqm0x/", >>>> "enabled": true, "email": "ad...@example.com", "tenantId": >>>> "d1506184877a449a91fc6adcb553ad97"}') (HTTP 409) >>>> >>>> Is this supposed to happen? Is the client supposed to send back this much >>>> info also (hashed password??) :-P >>>> >>>> Any ideas? >>>> _______________________________________________ >>>> Mailing list: https://launchpad.net/~openstack >>>> Post to : openstack@lists.launchpad.net >>>> Unsubscribe : https://launchpad.net/~openstack >>>> More help : https://help.launchpad.net/ListHelp >>>> _______________________________________________ >>>> Mailing list: https://launchpad.net/~openstack >>>> Post to : openstack@lists.launchpad.net >>>> Unsubscribe : https://launchpad.net/~openstack >>>> More help : https://help.launchpad.net/ListHelp >>> >> _______________________________________________ >> Mailing list: https://launchpad.net/~openstack >> Post to : openstack@lists.launchpad.net >> Unsubscribe : https://launchpad.net/~openstack >> More help : https://help.launchpad.net/ListHelp > >
_______________________________________________ Mailing list: https://launchpad.net/~openstack Post to : openstack@lists.launchpad.net Unsubscribe : https://launchpad.net/~openstack More help : https://help.launchpad.net/ListHelp