On Oct 30, 2007, at 9:22 AM, Alex Karasulu wrote:

Hi Emmanuel,

On 10/29/07, Emmanuel Lecharny <[EMAIL PROTECTED]> wrote:
Hi David, Alex,

I just read a dozen of mails about TSec and very high level discussion
about what is a Role, User, Permission, Group, etc...

Those mails are really interesting, but there is some things that bugs me :
- I don't see any alignement coming from those mails

We're trying hard. I had a conversation with David over Skype the other day. I think we have some fundamental differences regarding how we will use Roles
and Groups.

I can't tell if we have fundamental differences because I think we are nearly completely failing to communicate our ideas to each other. I'm pretty sure I'm not getting my ideas across to you, and I suspect I'm misinterpreting your ideas. To me it seems like I am thinking in terms of an abstract model that can be implemented in several ways including using existing concepts such as AD groups and that you are thinking that the model has to have the same concepts as existing systems, which seems to me to be a lower level of abstraction. Anyway instead of trying to write an essay that perhaps no one will understand let me see if I can respond to what you've written here.


David:
    Summary: Groups should be modeled as Roles.

Users will be added to roles which only have users, i.e. Roles<Users>, and roles with only permissions Role<Permission> are assigned to Roles<Users> to make them obtain the permissions associated with the Role<Permission> through Role
    hierarchy.

I don't know what you mean by Roles<Users> and Role<Permission>. I'm proposing that we think of a role as a named thingy that has permissions associated with it, users associated with it, and "sub- roles" associated with it. The "sub-roles" set up an inheritance relationship among the roles. It is possible for roles to have no users associated with them, no permissions associated with them, or no sub- or super-roles associated with them; however unless they have at least 2 of these they won't be useful for connecting users with permissions. I'm not saying anything about how the data store behind this is set up or how much of it is in a tsec schema or editable through tsec. I'm also not saying anything about how roles are presented in any UI tsec may have. For instance, I have no problem with calling roles groups whenever you are associating users and roles.


Alex:
Summary: Groups are distinct from Roles. Roles should not contain Users and are merely a set of permissions or permissions and other roles.

User can be added to groups: Group<Users>. A user or a Group<User> can be associated with something called a RoleAssignment which assigns one or more Role<Permissions> to that user or group. Roles only contain permissions. Groups
    contain users with clear separation.

The last time we talked I thought you were proposing allowing user- role assignments as well.

To me there are 2 separate questions that we should consider separately:
1. as abstract models, which one is simpler and more flexible?
2. how hard is it to implement each model so it interoperates with existing systems such as AD and existing admins will be willing to use it?

It seems to me that after we have some ideas about answers to both these questions we will be better able to pick what to do. For instance, if we decide one model is simpler, more flexible, and easier to implement, its the obvious choice. If one model is more complicated and limited but easier to implement in a way acceptable to admins, we have a harder choice.

1. I think its pretty clear the roles-only model is simpler. It has one fewer kind of entity (no groups) and depending on whether the group model has group hierarchies and direct user-role associations one, two, or three fewer kinds of association. (group-role associations, group-group containment, and user-role association). Next, here's how to convert a group-roles model to a roles-only model:

- all the groups become roles. user-group associations thus turn into user-role associations.
- the group-role associations become role-role inheritance relations.
- the (optional?) group containment relations turn into role-role inheritance. Note that the relationships might appear to go the other way now :-). The more users, the fewer permissions, and the more permissions, the fewer users.

So, I think this means that any group-roles model setup can be thought of in terms of the roles-only model without losing capabilities.

Furthermore, all these setups from groups-roles have a constraint on them: some of the roles don't have any permissions (the ones that used to be groups). By at least conceptually allowing for any role to have permissions associated to it we've made the model more flexible.

I know I haven't been expressing myself very well but this is most of what I've been trying to talk to alex about. I must be leaving out some big background about my presuppositions since this much seems fairly clear to me. Remembering that at this point I am explicitly not talking about how the data might be stored or where or how any management UIs might look or refer to concepts here I wonder what people think of this reasoning.

2. So, I think the role-only model is conceptually simpler and more flexible, but I really don't know how practical it is to implement so e.g. AD groups appear as (read-only) roles in tsec and any UIs are similar enough to what admins are used to so they are happy using them. I have a lot of ideas, but there's no point discussing them if no one else is willing to consider the possibility that considering implementing a roles-only model partly on top of say AD is a reasonable idea.

Lets look for a moment at one possible integration of AD with Tsec. All the users are in AD, and they are organized into (hierarchical?) AD groups. Tsec will need to store a AD group- tsec Role association, and an AD user - tsec Role association (at least for roles-only tsec). When we write code to deal with this data, in the role-only model the ldap AD-groups and tsec-roles would all go into role objects, the AD-group to AD-group containment, the AD-group to tsec- role and tsec-role to tsec-role inheritance would all go into the role-role graph, and the AD-user to AD-groups and AD-user to tsec- roles would both go into the user-roles association. In the group- role model, we'd have more kinds of objects but simpler ldap-code mapping.

On the other hand, if someone wants to use tsec without any integration to an existing system, in the role-only model the tsec- ldap to object mapping would be completely straightforward and, having fewer things to deal with, simpler than the group-role tsec model.

I don't know which approach would be better, but I do think it is worth considering.



- we do have a working version of TSec, but it only works with ADS 1.0,
so I think that the urgence is to get TSec migrated to fit ADS 2.0

Yes this would be a good path and this is what I originally suggested we do with
David. I don't think this interested him very much.

I've been working on and off for almost a year on my sandbox branch and it works with ADS trunk and implements a lot of features I think we want such as hierarchical roles. I'd prefer that my work get reviewed and considered before being thrown out.


- I'm not sure that changing a hell lot of code in a branch will help a
lot, unless if used as a proof of concept.

+1

I understand that some of use need to code to expose their ideas, and
that other really like to write doco before coding, we are all
different. The problem is that at some point, there is an existing
project, called Tsec, which is stalling. If there is no alignement of
ideas, no common agenda, no baby steps done, then there is no way to get
the job doen, as it will end as a battle of ego.

I agree with everything up to the ego part :). I don't care how (my or another person's
way) we do this as long as we get it relatively right.

We're trying to settle a disagreement in how to proceed. Again it's less about doing it my way than really screwing up Triplesec. David IMHO is a bit myopic but I don't blame him since there is a lot of material that makes it hard to see the big picture especially to validate what we're doing at lower levels. However what disappoints me is his reluctance to see some basics to push in a certain direction. I think he thinks I'm myopic because I resisted the XBean changes initially but I don't think he realizes that this was just due to a lack of time to evaluate his proposal. He has insufficient data yet by
forcing himself to make conclusions now he's coming to the wrong ones.

I know without a doubt that if we go with David's approach we're going to shoot ourselves in the foot. From the administration point of view no organization is going to manage users in Roles instead of Groups. Then merge those Role<User> objects with Role<Permission> objects to grant users roles. This is just suicide from a product viability standpoint.

Plus this creates serious issues when integrating with external systems which serve as the credential store and database of record for the enterprise. Active Directory is used 90+% of the time and we need to allow for Triplesec to refer to the groups and users defined there. We simply cannot model our groups as Roles without lots of unnecessary work to migrate
Active Directory (LDAP) Groups into our internal Role representation.

To me it seems like you are assuming some implementation decisions and ruling out the possibility of a point of view or model based on those assumed decisions. There are lots and lots of possible implementations and some may be more appropriate in different situations. I implemented one possibility that seems reasonably appropriate for a tsec-only system or when its used as a jacc provider with external group data replicated into a local tsec- adapted copy. I outlined another possibility above.


In my new approach, which I have modified from studying 3 other commercial systems, I found that referring to groups and users in a RoleAssignment is the best option. In the
end we have 3 kinds of actors:

(1) operators/administrators
     - add, remove users
     - add, remove users from groups
- often use tools for external systems (mainly ActiveDirectory in enterprise) to do this
Can these people assign any user to any group or are there permissions they need for some groups? For instance, is there ever a situation where there's a "distribute executive bonus" group, and joe peon the admin can't assign the new mailroom employee to that group?

In the role-only model this would be
- add, remove users
- add, remove users to roles (which might be called groups whenever you see a user and role together; this is a UI question) - if AD groups are viewed in tsec as roles, the AD tools would still work on their portion of the data.


(2) policy makers (technical security officers??)
     - determine which groups are assigned to specific roles
       (will make the RoleAssignments)

In the role-only model this would correspond to setting up the role inheritance hierarchy.

(3) developers/app architects
     - determine the roles and permissions in their applications
makes sense to me.

This is the division of labor most commonly encountered. I've seen it repeatedly across the enterprise. Together these folks manage the aspects of authorization policy in moderate to
large scale companies.

Triplesec must not force operators (1), to use Triplesec when they use AD.

I surely never meant to say they did. I do think we ought to support tsec-only systems as well, which I think means we need to supply tools for user admin and user-[role-or-group] assignment as well.

This and other
requirements are not even on David's radar. He's thinking in a vacuum when he needs to look at the big picture. He thinks users can be forced to change. This is not a philosophy
that works well.

May I suggest that we start porting TSec to get a ADS-trunk
compatinbility right now, and then trying to make it work smoothly as
is? I would also appreciate that before doing any change in this code,
there is at least a minimal agreement reached, otherwise it will end
with 3 or 4 different incompatible versions...

Yes I agree with this approach.

So far, this is the way we have successfully worked in the past 3 years, without any single argument, and I wish it is possible to continue like
this...

Yes indeed we've done well.

I've concluded I am wasting too much time now. I could have fixed Triplesec in trunk and corrected some of it's known flaws by now. However this is
important from a community standpoint.

I would add that Tsec has been written by Alex, and so far, as he also
started ADS, which is quite a pretty smart piece of software, I'm
inclined to think that Alex is trustable... Alex also is good at
considering other people's view points giving them a chance to
participate and drive development, and he knows he makes mistakes and
listens to others, which is one of the reasons why we stand by him.

Unfortunately I don't think this will factor into David's decision regarding Roles and Groups being one and the same. David is very convinced about his approach. Let me point out he is very polite but just very stubborn :). I like him
a lot though so I keep trying to understand his view points.

But at some point I'm going to have to stop because it's consuming too much
time.

Bottom line, there is nothing personnal about it.

+1 not at all. Actually our discussions are fun and we laugh about the differences. We're still having fun and that's the indicator that there is no issue at all. Well besides
the fact that we're all bound by time.

It's just that we have
an agenda, which is pretty heavy, and we need to keep some focus. I'm
afraid that losing time discussing on the very basis of Tsec just make
Alex losing a lot of time, and this harms the whole project. This is
pretty much more a priority issue...

Yes as you know I could not help a couple of you guys because of the time lost just debating
the same things back and fourth.

At this point we need some feedback from others to help us get out of this deadlock. David promised to just discuss the problem within my threads on the topic in clear language not intended to be a specification without being biased by the NIST paper. We're just going to discuss the problem and the entities that exists to manage authorization policy today using
the IT vernacular.

I will keep looking at his branch while we (off line) review the NIST paper together paragraph by paragraph to settle our misaligned interpretations. I think this is the best I can do at this point.

Input from you and others will also help us. What people's thoughts regarding Roles and
Groups?

More input would be great. In particular I really want to know if I've missed something in my arguments.

thanks
david jencks


Alex






Reply via email to