Re: [Openstack] [Keystone] What exactly are we modeling with endpoints?

2012-04-25 Thread Yee, Guang
A service can have 0 to N endpoints. Why not? To the end users, what's the
difference between no endpoints and unreachable endpoints anyway. It should
be up to the client to return a more human-readable, actionable error
message.

An endpoint is basically consisted of an URI and a bunch of
characteristics/attributes about that URI right? Question is which
characteristics should be core and which characteristic are
vendor/deployment-specific.

As Liem mentioned, the schema does allow vendors to add arbitrary attributes
to the endpoints with having to use meta data.


Guang


-Original Message-
From: openstack-bounces+guang.yee=hp@lists.launchpad.net
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of
Nguyen, Liem Manh
Sent: Wednesday, April 25, 2012 10:14 AM
To: Joseph Heck
Cc: Adam Gandelman; openstack@lists.launchpad.net
(openstack@lists.launchpad.net)
Subject: Re: [Openstack] [Keystone] What exactly are we modeling with
endpoints?



From: Joseph Heck [mailto:he...@me.com] 
Sent: Wednesday, April 25, 2012 9:47 AM
To: Nguyen, Liem Manh
Cc: Joe Savak; openstack@lists.launchpad.net
(openstack@lists.launchpad.net); Adam Gandelman
Subject: Re: [Openstack] [Keystone] What exactly are we modeling with
endpoints?

This isn't about parsing the data structure - it's about what a "service"
represents so that we can model it appropriately. So what does the "service"
here represent? the collection of all possible services of that type? That's
what your example would seem to indicate.

In your example, the service is a pretty simple structure - just having a
type (driven by convention and API spec) and human readable name, and each
service is expected to have 1 to N endpoints.

Is it reasonable to have a service without any endpoints? Regardless of
reasonable, is it allowable?

> Liem:  Will we ever have a service that has no endpoints?  With no way to
contact the service, can one utilize the service?  If we answer no to those
questions, then I think we should have service 0..* <-> 1..* endpoint.
Also, can an endpoint have more than 1 services?  I think yes, because
service is just a logical concept, and endpoint API may decide to support
multiple services (for billing or whatever)...

What does an endpoint represent? The API's URI point, clearly. Is there a
uniqueness constraint of any kind on endpoints? Is it allowable (if strange)
to list 3 duplicate endpoints with exactly the same metadata on it?

> Liem: I like the fact that we are not enforcing unique constraints on
endpoints; so, services have the freedom to define what is needed.

-joe

On Apr 25, 2012, at 9:37 AM, Nguyen, Liem Manh wrote:
I would like to keep the service type  and name under the service and not
the endpoint, too.  Make it easier to parse for a given service.
 
One thing is that I am not sure if we need the metadata tag. In the Keystone
XSD, we have the construct , which allows any additional,
implementation-specific attribute to be added.  Those that do not support
the specific attribute can simply ignore it.   A couple of benefits I can
see with not using the metadata tag, and just use the custom element
directly like this:  http://paste.openstack.org/show/13832/, which the
anyAttribute supports, are:
 
. Simplier parsing, one level less.
. If that attribute becomes a core attribute later, no need to
change the parser.
 
Liem
 
From: openstack-bounces+liem_m_nguyen=hp@lists.launchpad.net
[mailto:openstack-bounces+liem_m_nguyen=hp@lists.launchpad.net] On
Behalf Of Joe Savak
Sent: Tuesday, April 24, 2012 1:04 PM
To: Joseph Heck; openstack@lists.launchpad.net
(openstack@lists.launchpad.net)
Cc: Adam Gandelman
Subject: Re: [Openstack] [Keystone] What exactly are we modeling with
endpoints?
 
Having endpoints under the service construct is supposed to make it easier
to programmatically find the endpoint(s) you are interested in.
 
For example - as nova client I can parse the service catalog and identity
nova by service-type "compute" in order to get the public, internal, and
admin endpoints for nova.
 
By having service type & name as attributes under the endpoint, I'll have a
harder time doing that (having to dive into each endpoint construct to
identify the ones with service-type "compute").
Maybe it would be better to have each endpoint have its own construct inside
of a service.
 
So instead of http://paste.openstack.org/show/13678/
Maybe http://paste.openstack.org/show/13682/
 
 
From: openstack-bounces+joe.savak=rackspace@lists.launchpad.net
[mailto:openstack-bounces+joe.savak=rackspace@lists.launchpad.net] On
Behalf Of Joseph Heck
Sent: Friday, April 20, 2012 4:16 PM
To: openstack@lists.launchpad.net (openstack@lists.launchpad.net)
Cc: Adam Gandelman
Subject: [Openstack] [Keystone] What exactly are we modeling with endpoints?
 
While I've been roaming about the summit and conference, I've been trying to
figure out exactly what we're modeling with the current "service" and

Re: [Openstack] Keystone client, user belongs to many tenants?

2012-05-09 Thread Yee, Guang
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  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=4$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

[Openstack] Keystone: is revoke token API "officially" supported

2012-01-26 Thread Yee, Guang
I see it implemented in the code as

 

DELETE /v2.0/tokens/{tokenId}

 

But it doesn't appear to be documented in any of the WADLs.

 

 

Thanks!

 

Guang

 



smime.p7s
Description: S/MIME cryptographic signature
___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp


Re: [Openstack] Capture of the Keystone/LDAP Role discussion

2012-02-02 Thread Yee, Guang
Sorry I am a little late to this thread.

" When we talk about Roles,  we mean the permissions a given user has in a
given tenant.  As such,  it is a three way relationship, and LDAP does not
handle those well."

Have we also consider services and global roles? There was security bug
regarding tenant role conflicts/overlaps.

https://bugs.launchpad.net/keystone/+bug/890411

How are they being handled in your LDAP design?



Guang



-Original Message-
From: openstack-bounces+guang.yee=hp@lists.launchpad.net
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of
Adam Young
Sent: Thursday, February 02, 2012 12:55 PM
To: Ryan Lane; openstack@lists.launchpad.net
Subject: Re: [Openstack] Capture of the Keystone/LDAP Role discussion

On 02/02/2012 11:50 AM, Ryan Lane wrote:
>> Based on discussions with numerous people,  It seems that the subtree
>> approach (as done by nova deprecated)  is the norm.
>>
> It's a normal approach taken by a number of applications, yes. It's
> not a bad way to handle this, and we are already doing it in nova. The
> plus of doing it this way, rather than key-value pairs on users, is
> that when a tenant is deleted, all of the roles are deleted with it.
> Also, referential integrity plugins can remove userdns from tenants
> and roles when a user is deleted.
>
> It'll still be necessary for admins to remove users from roles when
> removed from tenants, and we can't depend on that, so we should handle
> that case.

I'll make sure that gets in.

>
>> What seems to vary the most amongst LDAP servers is not the schema,  but
the
>> method used to query for membership in nested groups.   In OpenLDAP,  the
>> syntax involves sets
>>
>> http://www.openldap.org/faq/data/cache/1133.html
>> http://www.openldap.org/faq/data/cache/1134.html
>>
>> Whereas in Active directory,  it involves  using
LDAP_MATCHING_RULE_IN_CHAIN
>> rule OID.
>>
>> In the 389 (Fedora) Directory Server as well as OpenLDAP it is also
possible
>> to use   the deference control in conjunction with the  memberof plugin.
>>
>>
>> However,  we might not need to query for nested group membership.  For
>> example, lets assume a tenant has 3 administrative roles:  user
management,
>> network management, VM management. In addition,  users that do not have
an
>> explicit admin role get read only access to the resources of that tenant.
>> So a user that has the right to manage networks for that tenant would
have
>> to appear in both the members list of that tenant as well as in the
>> networkMgmt role.  The first is provided for read only access, and the
>> second for the ability to modify the network.  It is a little redundant.
We
>> could perhaps put a constraint on the roles that they will only allow
users
>> that are listed in the general membership for that tenancy.
>>
> It shouldn't be necessary to do nested searching. When searching for
> tenant roles for a user, it should be enough to search for the user as
> a member of roles using the tenant as a base.
>
> Even if nested group searching is necessary, it's possible to do
> nested searching without support for it on the LDAP server side. A
> recursive search works here. memberOf is also a possibility, but it
> needs to be supported on the server side; also, some servers use
> memberOf, and some use isMemberOf, so we'd have to make that
> configurable.

>
> It's likely best to assume some server in use won't support plugins or
> extensions. We can discover capabilities from the server and use a
> more efficient method if it's available, while falling back to the
> less efficient method. Short-lived caches of the results can also
> alleviate performance problems due to inefficient queries.

Right.   First step is getting something to function, and then we can 
performance tune.
>
>> There was some talk about nesting tenancies for resellers.  This is
somewhat
>> different from nested group member ship, as entry in the lower level
tenant
>> should *not* provide access to all resources of the containing tenancy.
>> Permissions go the other way around:  if I am an admin of the container,
I
>> can manage elements of the contained.  It does mean that the Keystone
server
>> needs to be smart enough to check all of the levels of nesting from
lowest
>> to highest to see if a user has the appropriate role for the requested
>> operation.
>>
>> So,  to summarize:  Roles will be entites under tenants,  with a member
>> field that indicates the users that have that role.
>>
>>
> We still need some way to differentiate between roles and tenants,
> otherwise subtree searches will cause problems.
>
> In nova we handled this by assigning the owner attribute on tenants,
> but no owner on roles. This allowed tenants to be found via a search
> like this:
>
>(&(objectclass=groupofnames)(owner=*))
>
> Roles are then discovered by a search like this, using the tenant as a
base:
>
>(objectclass=groupofnames)
>
> Alternatively, we could add schema for roles and pr

Re: [Openstack] "Admin"-ness in Keystone, Nova, et. al.

2012-03-30 Thread Yee, Guang
Does this look familiar? J

 

https://bugs.launchpad.net/keystone/+bug/890411

 

 

Guang

 

 

From: openstack-bounces+guang.yee=hp@lists.launchpad.net 
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of 
Andy Smith
Sent: Friday, March 30, 2012 10:27 AM
To: Julien Danjou
Cc: openstack@lists.launchpad.net
Subject: Re: [Openstack] "Admin"-ness in Keystone, Nova, et. al.

 

Commented on the first bug. 

On Fri, Mar 30, 2012 at 7:41 AM, Julien Danjou  
wrote:

On Fri, Mar 30 2012, Gabriel Hurley wrote:

> In practice today, Keystone no longer has global roles, and RBAC
> implementation isn't fully there yet across the ecosystem. So projects have
> adopted inconsistent means of determining when and how to grant
> "admin"-level privileges to that user. This isn't something individual
> projects can decide, though. It has to be agreed upon and consistent.
>
> I don't have a great solution for this problem since it's so very late in
> the Essex release cycle. However, I'm hoping we can perhaps do *something*
> other than to simply document that "users with admin-level permissions
> should only ever be granted admin permissions on a single admin tenant, and
> no other users should be granted an admin role anywhere."
>
> All that said, I'm deeply concerned about the security implications of
> real deployments being unaware of the unintended consequences of
> granting what appears to be a scoped "admin" role.

Correct me if I'm wrong, but it seems to me that the problem is simply
that the default policy used in keystone and nova says that "admin is
anybody with role `admin' on any tenant", as you can see in their
respective policy.json files.

I think that this rule should probably be set to something else by
default, like the user is admin if "it has role admin on a specific
tenant (like a tenant named `admin')". Tthat would allow to emulate the
old "global" admin role, just by using a specific tenant.

--
Julien Danjou
// eNovance  http://enovance.com
// ✉ julien.dan...@enovance.com  ☎ +33 1 49 70 99 81 
 


___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

 



smime.p7s
Description: S/MIME cryptographic signature
___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp


Re: [Openstack] "Admin"-ness in Keystone, Nova, et. al.

2012-03-30 Thread Yee, Guang
I think the fat Keystone implemented this naming hack. But why place a 
constraint on the names (i.e. may not be i18n friend) where we can do it right 
at once?


Guang


-Original Message-
From: openstack-bounces+guang.yee=hp@lists.launchpad.net 
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of 
Jay Pipes
Sent: Friday, March 30, 2012 11:33 AM
To: openstack@lists.launchpad.net
Subject: Re: [Openstack] "Admin"-ness in Keystone, Nova, et. al.

FWIW, it is possible in Glance to set the configuration option 
admin_role value to something other than "admin" -- for instance 
"glance:admin" -- to use a different role than "admin" to indicate a 
role that should only be able to admin Glance and not other endpoints.

https://github.com/openstack/glance/blob/master/etc/glance-api.conf#L33

Perhaps an immediate "solution" to this bug/feature request would be to 
add similar functionality to Keystone, Nova and Quantum?

Best,
-jay

On 03/30/2012 02:10 PM, Yee, Guang wrote:
> Does this look familiar? J
>
> https://bugs.launchpad.net/keystone/+bug/890411
>
> Guang
>
> *From:*openstack-bounces+guang.yee=hp@lists.launchpad.net
> [mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] *On
> Behalf Of *Andy Smith
> *Sent:* Friday, March 30, 2012 10:27 AM
> *To:* Julien Danjou
> *Cc:* openstack@lists.launchpad.net
> *Subject:* Re: [Openstack] "Admin"-ness in Keystone, Nova, etc
>
> Commented on the first bug.
>
> On Fri, Mar 30, 2012 at 7:41 AM, Julien Danjou
> mailto:julien.dan...@enovance.com>> wrote:
>
> On Fri, Mar 30 2012, Gabriel Hurley wrote:
>
>  > In practice today, Keystone no longer has global roles, and RBAC
>  > implementation isn't fully there yet across the ecosystem. So
> projects have
>  > adopted inconsistent means of determining when and how to grant
>  > "admin"-level privileges to that user. This isn't something individual
>  > projects can decide, though. It has to be agreed upon and consistent.
>  >
>  > I don't have a great solution for this problem since it's so very late in
>  > the Essex release cycle. However, I'm hoping we can perhaps do
> *something*
>  > other than to simply document that "users with admin-level permissions
>  > should only ever be granted admin permissions on a single admin
> tenant, and
>  > no other users should be granted an admin role anywhere."
>  >
>  > All that said, I'm deeply concerned about the security implications of
>  > real deployments being unaware of the unintended consequences of
>  > granting what appears to be a scoped "admin" role.
>
> Correct me if I'm wrong, but it seems to me that the problem is simply
> that the default policy used in keystone and nova says that "admin is
> anybody with role `admin' on any tenant", as you can see in their
> respective policy.json files.
>
> I think that this rule should probably be set to something else by
> default, like the user is admin if "it has role admin on a specific
> tenant (like a tenant named `admin')". Tthat would allow to emulate the
> old "global" admin role, just by using a specific tenant.
>
> --
> Julien Danjou
> // eNovance http://enovance.com
> // ✉julien.dan...@enovance.com <mailto:julien.dan...@enovance.com> ☎+33
> 1 49 70 99 81 
>
>
> ___
> Mailing list: https://launchpad.net/~openstack
> Post to : openstack@lists.launchpad.net
> <mailto: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


smime.p7s
Description: S/MIME cryptographic signature
___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp


Re: [Openstack] [openstack-dev] Fwd: [keystone] Tokens representing authorization to projects/tenants in the Keystone V3 API

2012-11-13 Thread Yee, Guang
An unscoped token is basically implicitly scoped to Keystone service right?
One should be able to use an unscoped token to reset his password, and ask
Keystone for information pertaining to himself, such as what are his roles,
what services/endpoints are available to him, and what are his tenants, etc.
This is helpful for administration UIs such as MC.

There's a blueprint to address the need to scope the token down to the
service or endpoint level. Basically, service and endpoint isolation.

https://blueprints.launchpad.net/keystone/+spec/service-isolation-and-roles-
delegation
http://wiki.openstack.org/Keystone/Service-Isolation-And-Roles-Delegation

It also addresses the intricacies of role delegation, which should be very
beneficial for cloud services.



Guang



-Original Message-
From: openstack-bounces+guang.yee=hp@lists.launchpad.net
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of
David Chadwick
Sent: Tuesday, November 13, 2012 7:32 AM
To: Adam Young
Cc: OpenStack Development Mailing List; openstack@lists.launchpad.net
Subject: Re: [Openstack] [openstack-dev] Fwd: [keystone] Tokens representing
authorization to projects/tenants in the Keystone V3 API

Hi Adam

you have pointed out an important difference between an unscoped token 
and a scoped one. The former can only be used with keystone, the latter 
with a cloud service. This also implies that a scoped token can only 
have the scope of a single service, and not multiple services. The user 
must swap the unscoped token for a set of scoped tokens if he wishes to 
access a set of cloud services.

This model is clean and consistent.

Concerning your attack scenario, then the best point of attack is either 
the client (steal his token(s)) or Keystone (get access to any service)

regards

David

On 13/11/2012 14:38, Adam Young wrote:
> On 11/10/2012 10:58 AM, David Chadwick wrote:
>> I agree with the vast majority of what Jorge says below. The idea I
>> would like to bounce around is that of the unscoped token.
>>
>> What does it mean conceptually? What is its purpose? Why do we need
>> it? Why should a user be given an unscoped token to exchange at a
>> later time for a scoped token?
>>
>> My view is as follows:
>> i) a user is authenticated and identified, and from this, keystone can
>> see that the user has access to a number of different tenants and
>> services. Keystone creates an unscoped token to encapsulate this. Note
>> that the unscoped token is scoped to the services/tenants available to
>> this user, and consequently it is different for each identified user.
>> Thus it does have some scope i.e. it cannot be swapped for access to
>> any service by any tenant.
>> ii) the user must choose which service/tenant he wishes to activate.
>> This is in line with the principle of least privileges.
>> iii) the user informs keystone which service(s) and tenant(s) he
>> wishes to access and Keystone swaps the unscoped token for one that is
>> scoped to the choice of the user.
>>
>> The issue then becomes, what is the allowable scope of a scoped token?
>> Jorge below believes it should cover multiple
>> services/endpoints/tenants. So one must then ask, what is the
>> difference between the most widely scoped scoped-token and the
>> unscoped token? Surely they will have the same scope won't they? In
>> which case there is no need for both concepts.
>
> let's compare with Kerberos:  In my view an unscoped token is
> comparaable with a ticket granting ticket:  it cannot be used with any
> service other than the KDC, and it can only be used to get service
> tickets. A service ticket can only be used with a specific service.  If
> that service gets compromised, any tickets it has are useless for access
> to other resources.
>
>
> If an unscoped token can be used against a wide array of services, we
> have just provided a path for an elevation of privileges attack. If I
> know that a service consumes tokens which can be used on a wide number
> of other services, I can target my attacks against that service in order
> to get access everywhere.
>
> If we are going to provide this functionality, it should be turned off
> by default.
>
>>
>> Comments please
>>
>> regards
>>
>> David
>>
>> On 23/10/2012 06:25, Jorge Williams wrote:
>>> Here's my view:
>>>
>>> On making the default token a configuration option:  Like the idea.
>>>   Disabling the option by default.  That's fine too.
>>>
>>> On scoping a token to a specific endpoint:  That's fine, though I
>>> believe that that's in the API today.  Currently, the way that we scope
>>> tokens to endpoints is by validating against the service catalog. I'm
>>> not sure if the default middleware checks for this yet, but the Repose
>>> middleware does.  If you try to use a token in an endpoint that's not in
>>> the service catalog the request fails -- well, if the check is turned
>>> on.
>>>
>>> Obviously, I'd like the idea of scoping a single token to multiple
>>> tenants / endpo

Re: [Openstack] [openstack-dev] Fwd: [keystone] Tokens representing authorization to projects/tenants in the Keystone V3 API

2012-11-14 Thread Yee, Guang
Is "belongsTo" mandatory? If not, what will token validation API return?

{"access": [list of tokens]}

?


Guang


-Original Message-
From: Jorge Williams [mailto:jorge.willi...@rackspace.com] 
Sent: Wednesday, November 14, 2012 2:47 PM
To: OpenStack Development Mailing List
Cc: openstack@lists.launchpad.net (openstack@lists.launchpad.net)
Subject: Re: [openstack-dev] [Openstack] Fwd: [keystone] Tokens representing
authorization to projects/tenants in the Keystone V3 API

>From an API perspective the changes required are the following:

1.  The validate call returns a list of tenants instead of a single
tenant.

If the tenant id is in the URI of the API, then the validation middleware
can assert that the tenant id is in the list of IDs.

Not sure if there's any additional changes, but I don't think so.

An alternative approach is to use the belongsTo query parameter in the
validate call.  So if you know the tenantId of the resource, you can issue a
validate with ?belongsTo="tenatId"  and validation if the tenant is not in
the list of tenatIds for the token.  The belongsTo query parameter is in the
validate token call in the API today

http://docs.openstack.org/api/openstack-identity-service/2.0/content/GET_val
idateToken_v2.0_tokens__tokenId__Admin_API_Service_Developer_Operations-d1e1
356.html

And we use it quite a bit in our implementation, when we validate tokens --
that is in the case where a token may have access to multiple tenants.

Thoughts?

-jOrGe W.


On Nov 14, 2012, at 3:53 PM, heckj wrote:

> If we're going to assert it's supported, we're doing an incredible
dis-service to writing a spec to not implement that aspect of the spec, as
that kind of set up just leads to incompatibilities and confusion when
asserting how the spec should be used to provide interoperability.
> 
> If we accept this as a spec addition, then we MUST have an implementation
that makes it clear how we expect to interoperate with that aspect of the
specification, even if it's a configuration option that we don't normally
enable. If we don't test and validate it to prove interoperability, then the
spec is a worthless digital "piece of paper".
> 
> So under that pretext, I welcome suggestions on how to interpret the spec
you're proposing to some concrete implementations that can be verified for
interoperability, and that are compatible with the existing and/or upcoming
implementations for V3 API.
> 
> -joe
> 
> On Nov 14, 2012, at 1:35 PM, Joe Savak  wrote:
>> Hi Joe,
>>  If I'm working across multiple tenants, I'd prefer one token that I
can securely handle that proves access rights to the tenants I'm working
with. Handling multiple tokens increases the complexity of clients needing
to provide multi-tenancy access to an authenticated identity. It also adds
more calls to keystone. 
>> 
>> Again, I think that having the keystone reference implementation restrict
tokens to 1 tenant is fine. We shouldn't have such arbitrary restrictions in
the API contract though. It needs to be extensible and flexible to allow for
the all sorts of use cases that are likely to occur.
>> 
>> Thanks,
>> joe
>> 
>> -Original Message-
>> From: heckj [mailto:he...@mac.com] 
>> Sent: Tuesday, November 13, 2012 3:59 PM
>> To: Joe Savak
>> Cc: OpenStack Development Mailing List; openstack@lists.launchpad.net
(openstack@lists.launchpad.net)
>> Subject: Re: [Openstack] [openstack-dev] Fwd: [keystone] Tokens
representing authorization to projects/tenants in the Keystone V3 API
>> 
>> Hey Joe:
>> 
>> Currently a user scoped token doesn't include a service catalog - mostly
because I think the service catalog generally requires tenant_id's to
interpolate into the values to provide it. That doesn't mean we can't put
in/include service catalog endpoints where that value doesn't need to be
determined.
>> 
>> I'm also questioning the value of providing a token scoped to all tenants
associated with a user - that seems to have the same value as just using a
user token. 
>> 
>> In fact, even if we allow some arbitrary set of tenants to be scoped into
a token along with a user, what on earth should be in the service catalog?
Endpoints relevant to every possible tenant?
>> 
>> This just seems to be a potential explosion of data that is poorly scoped
from a security perspective.
>> 
>> -joe
>> 
>> On Nov 13, 2012, at 1:42 PM, Joe Savak  wrote:
>>> Will user-scoped token include the full service catalog? 
>>> 
>>> Also, I thought the consensus was to allow the API contract to be
flexible on how many tenants we can scope the token to. The ref impl can
enforce 1 tenant-scoped token. Are we diverging from this?
>>> 
>>> Thanks,
>>> joe
>>> 
>>> -Original Message-
>>> From: openstack-bounces+joe.savak=rackspace@lists.launchpad.net
[mailto:openstack-bounces+joe.savak=rackspace@lists.launchpad.net] On
Behalf Of heckj
>>> Sent: Tuesday, November 13, 2012 1:34 PM
>>> To: OpenStack Development Mailing List
>>> Cc: openstack@lists.lau

Re: [Openstack] [keystone] Encryption based user authentication in keystone

2013-01-28 Thread Yee, Guang
Only password and token authentications are natively supported (by default)
at the moment. There are also signature-based authentication APIs like ec2
and s3 available as extensions. Other mechanisms such as two-way SSL and
external authentication via a web frontend is also possible?

In v3, we should like to introduce authn plugin capability as well. Do you
want to share your use case so we can discuss possible solutions?


Guang


-Original Message-
From: openstack-bounces+guang.yee=hp@lists.launchpad.net
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of
Koert van der Veer
Sent: Monday, January 28, 2013 1:36 AM
To: openstack@lists.launchpad.net
Subject: [Openstack] [keystone] Encryption based user authentication in
keystone

I vaguely remember some chatter on the last summit about using something
other than passwords for user authentication in keystone. However, looking
at the sourcecode and blueprints I can't seem to find this feature. I see a
lot of encryption-based in tokens, but not between the end-user and
keystone.

Are there any plans in that direction, or should I be rolling my own
solution?



smime.p7s
Description: S/MIME cryptographic signature
___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp


Re: [Openstack] [Keystone] Policy settings not working correctly

2013-06-06 Thread Yee, Guang
I think keystone client is still V2 by default, which is enforcing
admin_required. 

 

Try this

 

"admin_required": [["role:KeystoneAdmin"], ["role:admin"], ["is_admin:1"]],

 

 

Guang

 

 

From: Openstack
[mailto:openstack-bounces+guang.yee=hp@lists.launchpad.net] On Behalf Of
Adam Young
Sent: Thursday, June 06, 2013 7:28 PM
To: Heiko Krämer; openstack
Subject: Re: [Openstack] [Keystone] Policy settings not working correctly

 

What is the actualy question here?  Is it "why is this failing" or "why was
it done that way?"


On 06/04/2013 07:47 AM, Heiko Krämer wrote:

Heyho guys :)

I've a little problem with policy settings in keystone. I've create a new
rule in my policy-file and restarts keystone but keystone i don't have
privileges. 


What is the rule?




Example:


keystone user-create --name kadmin --pw lala 
keystone user-role-add --

keystone role-list --user kadmin --role KeystoneAdmin --tenant admin

+--+--+
|id| name |
+--+--+
| 3f5c0af585db46aeaec49da28900de28 |KeystoneAdmin |
| dccfed0bd790420bbf1982686cbf7e31 | KeystoneServiceAdmin |


cat /etc/keystone/policy.json

{
"admin_required": [["role:admin"], ["is_admin:1"]],
"owner" : [["user_id:%(user_id)s"]],
"admin_or_owner": [["rule:admin_required"], ["rule:owner"]],
"admin_or_kadmin": [["rule:admin_required"], ["role:KeystoneAdmin"]],

"default": [["rule:admin_required"]],
[.]
"identity:list_users": [["rule:admin_or_kadmin"]],
[]



keystone user-list
Unable to communicate with identity service: {"error": {"message": "You are
not authorized to perform the requested action: admin_required", "code":
403, "title": "Not Authorized"}}. (HTTP 403)


In log file i see:
DEBUG [keystone.policy.backends.rules] enforce admin_required: {'tenant_id':
u'b33bf3927d4e449a98cec4a883148110', 'user_id':
u'46a6a9e429db483f8346f0259e99d6a5', u'roles': [u'KeystoneAdmin']}




Why does keystone enforce admin_required rule instead of the defined rule
(admin_or_kadmin).


Historical reasons.  We are trying to clean this up.  







Keystone conf:
[...]

# Path to your policy definition containing identity actions
policy_file = policy.json
[..]
[policy]
driver = keystone.policy.backends.rules.Policy




Any have an idea ?

Thx and greetings
Heiko






___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

 



smime.p7s
Description: S/MIME cryptographic signature
___
Mailing list: https://launchpad.net/~openstack
Post to : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp