Authorization Policy
Introduction
An authorization decision consists of deciding if an authenticated entity should be allowed to perform some action on a controlled resource. In OSCARS an authenticated entity may be a bandwidth user or a bandwidth reservation service from another domain; the fundamental resource is bandwidth though the domain, and the fundamental permission is right to reserve some fraction of the available bandwidth. Since available bandwidth is a limited resource, some finer control is needed such as the maximum allowed bandwidth and duration. In addition, some users of the system needed to request or suggest possible internal routing for the data path.
OSCARS chose to do attribute-based authorization primarily as a way of consolidating authorization policy to make it more understandable to users and OSCARS administrators and partly in anticipation of integrating with an external attribute provider such as Shibboleth or VOMS. An attribute is some characteristic of a user, such as being a member of some project, a holder of some role, or just his identity as expressed as a registered user name or x.509 identity certificate. A user gets the maximum of all the privileges granted to all of the attributes that he has.
OSCARS is currently a self-contained system that defines who its registered users are and what attributes each one has. As a result, it needs to control who may manage users and their permissions, so users become a controlled resource in addition to bandwidth. Another resource is the internal topology, since we want control who may view the or reload the topology tables that are used in pathfinding. In addition, there is a notification service running as part of OSCARS, and the right to publish events there or subscribe to events is controlled.
The underlying guideline of our design and implementation is to keep authorization policy and implementation as simple as possible. We have tried to make the granularity of access decisions no finer than is actually required, and have defined roles to consolidate sets of authorizations into roles that will accommodate the use cases we anticipate. Some of our underlying assumptions are: Most users will get their permissions by being members of a role, rather than by individual grants. The number of roles will be small. The number of resources and permissions will be small. While the implementation may scale to larger numbers, the ability of the users and administrators to understand it will not.
We are currently intending to authorize a reservation that has been forwarded to ESnet from an adjacent domain based on the attributes assigned to that domain rather than the end user who is requesting the reservation. Thus the number of users that must be registered with the system can remain manageable. The name of the user is included in the forwarded request, so it can be used for auditing purposes or can later be used for authorization.
Authorization policy requirements
The following paragraphs list the various actions that we want to control with respect to the resources that OSCARS controls.
Permissions with respect to users and institutions
- see own profile
- modify own profile
- list all users
- see all user profiles
- add/delete a user
- modify any user profile
- grant or remove attributes for any user
- add, edit or delete institutions
Permissions with respect to bandwidth and reservations
- make unlimited reservation
- make reservation with bandwidth constraint
- make reservation with duration constraint
- make reservation with topology constraint
- list own reservations
- query own reservations
- cancel, modify own reservations
- signal own reservations
- list all reservations starting or terminating at a site
- query any reservations starting or terminating at a site
- cancel, modify any reservations starting or terminating at a site
- list all reservations
- query any reservations
(signaling instantiates a reservation or tears down an established circuit by causing the appropriate commands to be sent to the routers involved)
Permissions with respect to topology
- view topology
- modify the topology
Permission with respect to authorizations
- view all attributes and authorizations
- create, modify or delete attributes
- modify authorizations associated with attributes
Permission with respect to notification server
- register to publish events
- remove publisher registrations
- subscribe to events
- renew or cancel a subscription
Policy Tables
All access decisions are made by one of two methods which are called from each place in the code that is about to grant some access. Access policy is stored in a database, and an access decision is made by doing table lookups based on the requester, the action requested and the resource. Authorizations may have constraints attached, in which case the parameters of the request must meet the constraints.
Table summary
The following tables define the components for authorization:
users – contains an entry for each registered user, containing among other things, user loginId, institution to which the user belongs, certSubject and certIssuer
resources – contains an entry for each resource that needs to be controlled:
- reservations - all information about reservations
- topology - the description of the network topology
- users - all information about users
- AA - the attributes, institutions and authorizations
- subscriptions - receiving notifications of OSCARS events
- publishers - publish OSCARS events
permissions – actions that can be performed on a resource
- list – shows minimum information about a reservation or user, shows the authorization tables
- query – shows all information about a reservation, user or the topology
- create – allows a new user to added, a reservation to be created, a new subscription to be made, or to register as a publisher
- modify – allows deletion of a user and modification to a user profile or cancellation or modification of a reservation. Allows modification of the institutions, attributes and authorizations tables. Allows reloading of the topology tables. Also allows renewal and cancellation of subscriptions and deletion of a publisher registration
- signal – allows a circuit for reservation to be instantiated or torn down
Attributes – has entries for attributes on which authorization is based. The default attributes are:
- OSCARS-user
- OSCARS-engineer
- OSCARS-admin
- OSCARS-service
- OSCARS-operator
- OSCARS-site-administrator
- OSCARS-publisher
There is an attribute-type field which is set to role for all these attributes. There is currently one privilege attribute: specify-path-elements, which is intended to be an additional attribute for some non-privileged users. It is possible to define explicit user attributes for users with specific permissions, e.g. user-david with the attribute type user. So far we have not found the need for any user attributes. For a more detailed description of the attributes see here.
UserAttributes - maps userIds to the attributes they possess
Constraints - The current constraints that are supported are:
- none applies to everything, place holder in tables indicating there is no constraint
- max-bandwidth (int), applies to create and modify reservation
- max-duration (int), applies to create and modify reservation
- specify-path-elements (boolean), applies to create and modify reservation
- specify-gri (boolean) can a Global Reservation Identifier be specified on create reservation
- all-users (boolean), applies to everything except create reservation.
- my-site (boolean) currently applies only to list, query, cancel and modify reservations
- unsafe-allowed (boolean) allows state changes to a reservation regardless of whether it is an acceptable change. e.g. allows FINISHED->CANCELLED rather than just ACTIVE or PENDING -> CANCELLED. Intended for use by a network engineer trying to correct errors in the OSCARS tables.
authorizations - combines these elements into a row for each action that each user is permitted. Each row consists of an attribute id, a resource id, a permission id, a constraint id and value.
Users may have one or more attributes although the role attributes, except for administrator are designed to be used alone. Attributes and authorizations are arbitrary strings and while there is a default set defined, it is expected that sites may redefine or add new ones to meet their needs. On the other hand, resources, permissions, and constraints are strings that are used by the code and changing them must be accompanied by code changes that enforce the semantics desired.
Using attributes to grant authorizations, rather than just the user identity, allows a set of authorizations to be crafted which can then be applied to a class of users. Otherwise, each time a new user registers, he must be given the correct and complete set of permissions for whatever he wants to do. Currently the OSCARS AA system registers users and assigns them attributes. In the future, user identities and attributes may be available from multiple external identity or attributes providers.
Default behaviors
If a user has no entry in the user table or has no attributes in the userAttribute table, any attempted OSCARS access will be rejected immediately by Oscars:OscarsSkeleton:checkUser or Servlets:AuthenticateUser
If no attribute that the user possesses has an entry for the required resource/permission pair in the authorization table, the request is denied.
The constraint defaults are intended to be the most common cases, not the most restricted.
If there is no max bandwidth constraint specified, there is no limit on the bandwidth that may be requested.
If there is no duration constraint, unlimited duration and persistent reservations are allowed.
If no all-users constraint is specified, the default is false (only access to own information is allowed).
If a my-site constraint is specified access to information that is site specific is allowed.
If specify-path-elements is not specified, the default is false and no routers or hops may be input.
If an unsafe-allowed constraint is specified any reservation state change will be accepted e.g. FINISHED -> ACTIVE. Otherwise only reasonable state changes will be made, e.g. PENDING or ACTIVE to CANCELLED (cancel reservation), ACTIVE to PENDING (signal a teardown), PENDING to ACTIVE (signal a setup)
If specify-gri is not specified, a GlobalResourceId may not be specified by the user, but will be automatically generated by the CreateReservation code. This is should be used only by OSCARS-service.
Mapping of requirements to authorizations
The following tables describe the possible actions and the authorizations that they require:
Permissions with respect to users and institutions
|
desired action |
permission resource, constraint |
|
see own profile |
query users |
|
modify own profile |
modify users |
|
list all users |
list users |
|
see all user profiles |
query users, all-users |
|
add a user |
create users, all-users |
|
delete a user |
modify users, all-users |
|
modify any user profile |
modify users, all-users |
|
grant or remove attributes for any user |
modify users, all-users |
|
add, edit or delete institutions |
modify AA |
Permissions with respect to bandwidth and reservations
|
desired action |
permission resource, constraint |
|
make unlimited reservation |
create reservations |
|
make reservation with bandwidth constraint |
create reservations, max-bandwidth= <upper-limit> |
|
make reservation with duration constraint |
create reservations, max-duration=<upper-limit> |
|
make reservation with topology constraint |
create reservations, specify-path-elements |
|
list own reservations |
list reservations |
|
query own reservations |
query reservations |
|
cancel, modify own reservation |
modify reservations |
|
signal own reservation |
signal reservations |
|
list all reservations starting or terminating at a site |
list reservations, my-site |
|
query any reservations starting or terminating at a site |
query reservations, my-site |
|
cancel, modify any reservations starting or terminating at a site |
modify reservations, my-site |
|
signal any reservations starting or terminating at a site |
signal reservations, my-site |
|
list all reservations |
list reservations, all-users |
|
query any reservations |
query reservations, all-users |
|
cancel, modify any reservations |
modify reservations, all-users |
|
signal any reservations |
signal reservations, all-users |
|
cancel, modify and signal any reservations regardless of state |
signal reservations, unsafe-allowed |
(signaling instantiates a reservation or tears down an established circuit by causing the appropriate commands to be sent to the routers involved)
Permissions with respect to topology
|
desired action |
permission resource, constraint |
|
view topology |
query domains |
|
modify the topology |
modify domains |
Permission with respect to authorizations
|
desired action |
permission resource, constraint |
|
view all attributes and authorizations |
list AAA |
|
create or delete attributes |
modify AAA |
|
add/modify authorizations associated with attributes |
modify AAA |
Permission with respect to notification server
|
desired action |
permission resource, constraint |
|
register to publish events |
create publishers |
|
remove publishers registration |
modify publishers |
|
subscribe to events |
create subscriptions |
|
renew or cancel a subscription |
modify subscriptions |
Default Tables
The distribution includes scripts (sql/aaa/populateDefaults.sql) to set up the roles described above. The standard attributes are entered into the Attributes table.
Attributes table
|
attribute name (string) |
attribute type (int) |
|
OSCARS-user |
role |
|
OSCARS-engineer |
role |
|
OSCARS-administrator |
role |
|
OSCARS-service |
role |
|
OSCARS-operator |
role |
|
OSCARS-site-administrator |
role |
|
OSCARS-publisher |
role |
|
OSCARS-may-specify-path |
privilege |
Default authorizations table
|
attributeId (int) |
resource |
permission |
constraint name (string) |
value (string) |
|
<OSCARS-user> |
users |
query |
none [1] |
|
|
<OSCARS-user> |
users |
modify |
none [1] |
|
|
<OSCARS-user> |
reservations |
list |
none [2] |
|
|
<OSCARS-user> |
reservations |
query |
none [2] |
|
|
<OSCARS-user> |
reservations |
create |
none [2] |
|
|
<OSCARS-user> |
reservations |
modify |
none [2] |
|
|
<OSCARS-user> |
reservations |
signal |
none [2] |
|
|
<OSCARS-user> |
subscriptions |
create |
|
|
|
<OSCARS-user> |
subscriptions |
modify |
|
|
|
<OSCARS-engineer> |
users |
query |
none [1] |
|
|
<OSCARS-engineer> |
users |
modify |
none [1] |
|
|
<OSCARS-engineer> |
reservations |
list |
all-users |
true |
|
<OSCARS-engineer> |
reservations |
query |
all-users |
true |
|
<OSCARS-engineer> |
reservations |
create |
specify-path-elements |
true |
|
<OSCARS-engineer> |
reservations |
modify |
all-users |
true |
|
<OSCARS-engineer> |
reservations |
modify |
specify-path-elements |
true |
|
<OSCARS-engineer> |
reservations |
signal |
all-users |
true |
|
<OSCARS-engineer> |
reservations |
signal |
unsafe-allowed |
true |
|
<OSCARS-engineer> |
subscriptions |
create |
|
|
|
<OSCARS-engineer> |
subscriptions |
modify |
|
|
|
<OSCARS-engineer> |
domains |
view |
|
|
|
<OSCARS-engineer> |
domains |
modify |
|
|
|
<OSCARS-service> |
reservations |
list |
|
|
|
<OSCARS-service> |
reservations |
query |
my-site |
true |
|
<OSCARS-service> |
reservations |
create |
specify-path-elements |
true |
|
<OSCARS-service> |
reservations |
create |
specify-gri |
true |
|
<OSCARS-service> |
reservations |
modify |
specify-path-elements |
true |
|
<OSCARS-service> |
reservations |
modify |
specify-gri |
true |
|
<OSCARS-service> |
reservations |
signal |
|
|
|
<OSCARS-service> |
domains |
view |
|
|
|
<OSCARS-service> |
domains |
modify |
|
|
|
<OSCARS-service> |
subscriptions |
create |
|
|
|
<OSCARS-service> |
subscriptions |
modify |
|
|
|
<OSCARS-service> |
publishers |
create |
|
|
|
<OSCARS-servicer> |
publishers |
modify |
|
|
|
<OSCARS-operator> |
users |
list |
all-users |
true |
|
<OSCARS-operator> |
users |
query |
none [1] |
|
|
<OSCARS-operator> |
users |
modify |
none [1] |
|
|
<OSCARS-operator> |
reservations |
list |
all-users |
true |
|
<OSCARS-operator> |
reservations |
query |
all-users |
true |
|
<OSCARS-operator> |
subscriptions |
create |
|
|
|
<OSCARS-operator> |
subscriptions |
modify |
|
|
|
<OSCARS-site-administrator> |
reservations |
list |
my-site |
true |
|
<OSCARS-site-administrator> |
reservations |
query |
my-site |
true |
|
<OSCARS-site-administrator> |
reservations |
modify |
my-site |
true |
|
<OSCARS-site-administrator> |
reservations |
create |
my-site |
true |
|
<OSCARS-site-administrator> |
reservations |
signal |
my-site |
true |
|
<OSCARS-site-administrator> |
subscriptions |
create |
|
|
|
<OSCARS-site-administrator> |
subscriptions |
modify |
|
|
|
<OSCARS-administrator> |
users |
list |
all-users |
true |
|
<OSCARS-administrator> |
users |
query |
all-users |
true |
|
<OSCARS-administrator> |
users |
modify |
all-users |
true |
|
<OSCARS-administrator> |
users |
create |
|
|
|
<OSCARS-administrator> |
AAA |
list |
|
|
|
<OSCARS-administrator> |
AAA |
modify |
|
|
|
<OSCARS-administrator> |
subscriptions |
modify |
|
|
|
<OSCARS-administrator> |
publishers |
modify |
|
|
|
<OSCARS-publisher> |
publishers |
create |
|
|
|
<OSCARS-publisher> |
publishers |
modify |
|
|
Defaults
[1] manage and view only his own user info
[2] unlimited bandwidth and duration, only modify, list, query and signal own reservations, not input path components.
An OSCARS engineer can make reservations, see, modify and signal all reservations, including correcting potential errors in the reservation tables, can only see and modify his own user information, and has free rein over the topology. An OSCARS operator can view everybody's reservations and can see and modify only his own user information. An OSCARS user can make reservations of unlimited bandwidth and duration, view, modify and signal his own reservations and see and modify his own user information. An OSCARS admin can manage all user information, but not see or modify reservations.
API for access checks
CheckAccess Implementation
The preferred way to implement access control is to isolate the access checking in one place, called the PolicyDecisionPoint that returns a permit or deny response and is called by all access control points (aka Policy Enforcement Points/ PEP) to see if an action is authorized. The AAA/UserManager class provides two methods for access checking. The first is called any place where a reservation is not being modified and the second by createReservation and modifyReservation.
Standard method
AuthValue UserManager.checkAccess(String user, String resource, String permission);
Initialize the return value to DENIED Lookup user in userAttribute table to get list of all attributes For each attribute lookup (attrId,resource,permission) in authorization table.
If deny is returned, continue
If there is no constraint, remember SELFONLY and continue
If all-users=true is returned, return ALLUSERS
If all-users=false is returned, remember SELFONLY and continue
If my-site constraint is found remember SITEONLY and continue
At end of loop check for SELFONLY and/or MYSITE
Return DENIED, SELFONLY, SITEONLY
Method for create and modify reservations
AuthValue UserManager.checkModResAccess(String user,String resource, String permission, int ReqBandWidth, int ReqDuration, Boolean specify-path-elements);
Start out with
ReturnValue = DENIED
bandwidthOK = false
maxdurationOK = false
specPathElemsOK = false.
Look up user in userAttributes table and get a list of attributes for this user.
For each attribute look up Authorization(AttrId,resource,permission)
if an authorization returned
if the constraint is null
mark bandwidthOK=true and durationOK=true,
and returnValue=SELFONLY
if the constraint is max-bandwidth
mark bandwidthOK= true if reqBandwidth < constraintValue
if constraint is max-duration
mark durationOK if reqDuration < constraintValue
if constraint is specify-path-elements
mark specPathElemsOK = true
if constraint is all-users
if value == 1 set returnValue = ALLUSERS
if value == 0 set returnValue = SELFONLY
At the end of the attribute list
if bandwidthOK == false or maxdurationOK == false
return DENIED
if specify-path-element= true and specPathElemsOK == false
return DENIED
otherwise return ReturnValue




