Bug 1041920

Summary: [RFE][keystone]: Attribute access privilege based on role
Product: Red Hat OpenStack Reporter: RHOS Integration <rhos-integ>
Component: RFEsAssignee: RHOS Maint <rhos-maint>
Status: CLOSED UPSTREAM QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: unspecifiedCC: markmc, yeylon
Target Milestone: ---Keywords: FutureFeature
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
URL: https://blueprints.launchpad.net/keystone/+spec/attribute-access-privilege-based-on-role
Whiteboard: upstream_milestone_none upstream_status_unknown upstream_definition_new
Fixed In Version: Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-19 16:52:00 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description RHOS Integration 2013-12-12 20:04:58 UTC
Cloned from launchpad blueprint https://blueprints.launchpad.net/keystone/+spec/attribute-access-privilege-based-on-role.

Description:

The current implementation of Keystone supports RBAC on identity APIs; once the subject is authorized on a particular API (get/update) he/she is then able to access/modify all the attributes of the target (or object) which is being operated by the API. This approach is OK as long as the cloud provider does not want to enforce any restrictions on attribute(s) of the API's target -- but that is not the case with most of cloud providers.

Below are some of the example which need "Attribute Access Privilege Based on Role":

1. Cloud superadmin (most privileged identity role in a cloud system) should allowed to get/update all attributes from Domain/Project/User object but they should not be allowed modify the attributes which are system generated.

2. Domain admin (designated admin role for a domain) should only allowed to get/update certain attributes from Domain/Project/User object.

3. Domain user (without any privileged role) should only be allowed to get certain attributes from Domain/Project and should be allowed to update certain attributes (e.g. only the self service attributes) on his own User object.

For a more concrete example suppose there are following attributes of domain object:

    Name
    Status
    billing_credit_card
    system_generated_id

The cloud provider wants to impose following restrictions on attributes of domain object:

on identity:get_domain API

* "superadmin" should be allowed to get all attributes of domains.
* "domainadmin" should only be allowed to get Name, Status and billing_credit_card of their own domain.
* "domainuser" should only be allowed to get Name and Status of their own domain.

on identity:update_domain API

* "superadmin" should allowed to update all the attributes of domains except system_generated_id.
* "domainadmin" should only allowed to update Name and billing_credit_card of their own domain.

For user Self Service Example suppose there are following attributes of user object

    Name
    email_address
    password
    hmac_salt
    Status
    system_generated_id

The cloud provider wants to impose following restrictions on attributes of user object:

on identity:get_user API

* "superadmin" should allowed to get all the attributes of users except password and salt.
* "domainadmin" should only allowed to see Name, email_address and Status of users of their own domain.
* "domainuser" should only allowed to see Name, email_address of their own user object.

on identity:update_user API

* "superadmin" should allowed to update all the attributes of user except system_generated_id and hmac_salt.
* "domainadmin" should only allowed to update Name, email and status of user object.
* "domainuser" should allowed to update all attributes of his own object except hmac_salt, Status and system_generated_id.

As per the requirements outlined above, we need

- An ability to defined certain class of attributes for different objects.
- An ability to associate those attribute classes with roles.
- Enforce policy on certain API (mostly get and update) based on role Vs attribute class defined in #2.

Specification URL (additional information):

None