Skip to content

Commit beb6557

Browse files
Update standard to reflect latest changes in SCS and upstream
Signed-off-by: Markus Hentsch <[email protected]>
1 parent 0fde99f commit beb6557

File tree

1 file changed

+28
-100
lines changed

1 file changed

+28
-100
lines changed

Standards/scs-03XX-v1-standard-roles.md

Lines changed: 28 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,8 @@ Careful evaluation of benefits as well as implications of adopting these changes
5353
The new options are not adopted equally across all OpenStack services yet in context of the ongoing rework.
5454

5555
Some service-specific role sets currently found in OpenStack services can only be eliminated and streamlined with the general roles (reader, member etc.) when those new options are enabled.
56-
Due to their currently unresolved compatibility issues, they cannot be freely adopted without consequences.
57-
If adoption proves to be unfeasible, role models dependent on the those oslo.policy options could not be considered and the service-specific role sets would need to be preserved for the time being.
58-
The affected services and roles are documented below.
56+
57+
[^2]: [OpenStack Technical Committee Governance Documents: Consistent and Secure Default RBAC](https://governance.openstack.org/tc/goals/selected/consistent-and-secure-rbac.html)
5958

6059
#### Core Role Set
6160

@@ -78,7 +77,7 @@ The Key Manager component Barbican [established a set of dedicated roles](https:
7877
- audit
7978

8079
This set of roles is Barbican-specific and not used by any other API.
81-
It became deprecated during the RBAC rework of OpenStack[^2] but is still included per default in recent OpenStack releases (as of the 2024.1 release).
80+
It became deprecated during the RBAC rework of OpenStack[^2].
8281

8382
Due to its deprecation it is possible to enable Barbican's use of the already established reader, member and admin roles instead.
8483
This however requires the olso.policy options `enforce_scope` and `enforce_new_default` to be enabled.
@@ -108,90 +107,34 @@ Unless the new scoping defaults (`enforce_new_defaults`) are used, this leads to
108107
This in turn renders encryption features like the volume encryption of OpenStack's volume service unusable for customers unless the corresponding users are assigned the Barbican-specific "creator" role in projects additionally.
109108
This creates unnecessary management overhead on the CSP side and ambiguity for users since the role is only useful in Barbican but its name does not communicate this.
110109

111-
To improve user experience and make the encryption features easily accessible, this standard should adjust the Key Manager API policies to extend permissions referencing the Barbican-specific "creator" role by the "member" role.
112-
This offers users easy access to the Key Manager API and aligns the permission set with the future rework (as per `enforce_new_defaults`), because it will later replace the "creator" role by the "member" role entirely.
110+
To improve user experience and make the encryption features easily accessible, this standard should demand using the new role model and scoping defaults for the Key Manager API.
113111

114-
The "creator" role will be kept for compatibility reasons concerning service integration.
115-
For example, the block storage service Cinder usually has a technical user in Keystone possessing the "creator" role in the "service" project.
116-
Moving such service accounts to the "member" role could introduce undesired access patterns in other APIs that otherwise don't accept the "creator" role but offer a lot of functionality to the "member" role by default.
112+
### Inclusion of the "manager" role
117113

118-
### Classification of the "manager" role
119-
120-
The current RBAC rework in upstream OpenStack[^2] describes a "project-manager" persona utilizing a "manager" role on project scope to perform more privileged operations than "member" (see "Phase 3" of the document).
114+
The current RBAC rework in upstream OpenStack[^2] describes a "project-manager" persona utilizing a new "manager" role on project scope to perform more privileged operations than "member" (see "Phase 3" of the document).
121115
This role is intended to be used across various OpenStack services.
122-
As of the OpenStack release 2024.1 this role is not implemented in any of the core services yet, only in Ironic with `enforce_new_defaults` enabled[^4].
116+
As of the OpenStack release 2024.1 this role is not implemented in any of the core services yet, only in Ironic with `enforce_new_defaults` enabled[^3].
123117

124118
On the other hand, the SCS project is making use of this role to implement a Domain Manager persona (see the [SCS Domain Manager standard under "Related Documents"](#scs-domain-manager-standard)).
119+
This persona will be available as a native upstream feature in Keystone starting with the 2024.2 release of OpenStack.
125120

126-
As a result, the "manager" role has no effect outside of the Keystone Identity API until phase 3 of the RBAC rework is implemented upstream and this standard is migrated to the proper use of `enforce_new_defaults`.
127-
As such, it will be handled as a service-specific role for Keystone in this standard, not as a core role.
128-
This is to ensure that the effective scope of the role in SCS clouds is clearly documented and communicated to users.
129-
It might be elevated to a core role in future iterations of the standard when it is implemented in other services.
130-
131-
[^4]: [Implementation of the "manager" role in Ironic for the 2024.1 release](https://github.com/openstack/ironic/blob/stable/2024.1/ironic/common/policy.py#L76-L82)
132-
133-
### Open questions
134-
135-
#### Incorporating future upstream defaults into this standard
136-
137-
Due to the ongoing RBAC rework in upstream OpenStack[^2], not all changes which are to be introduced by it will be included in the first iteration of this standard to avoid prematurely adopting role and policy definitions which might still change before being stabilized or have unresolved compatibility issues with certain services.
138-
139-
This results in a need of keeping this standard in sync once the upstream rework finishes.
140-
It is currently unknown when the upstream rework will conclude exactly and how this standard will need to be adjusted as a result.
141-
142-
This primarily concerns the new scoping and defaults in `oslo.policy`:
143-
144-
```ini
145-
[oslo_policy]
146-
enforce_new_defaults = True
147-
enforce_scope = True
148-
```
121+
As a result, the "manager" role has no effect outside of the Keystone Identity API until phase 3 of the RBAC rework is implemented upstream but can be used for identity-related functionality in Keystone.
149122

150-
Not all OpenStack services enable these options yet.
151-
Once those options default to `True` for additional services in a future OpenStack release, this standard must be updated to properly account for the resulting changes in policy and role defaults.
152-
Due to the fact that the details on how the remaining compatibility issues will be addressed upstream are still unknown, the full implications on when and how this standard will need to be updated specifically remains an open question.
153-
However, at the very least this will most likely result in the following changes to this standard:
154-
155-
- mandate the use of the new olso.policy options in all APIs
156-
- remove the service-specific roles of Barbican and Octavia from the standard
157-
- add the reader role to the core roles of this standard
158-
- move the manager role from service-specific roles to core roles
159-
- remove the design considerations sections related to the above
160-
- if applicable, update any policy generation workflows to use the new role model
161-
162-
[^2]: [OpenStack Technical Committee Governance Documents: Consistent and Secure Default RBAC](https://governance.openstack.org/tc/goals/selected/consistent-and-secure-rbac.html)
163-
164-
[^3]: [Current parameter defaults in `oslo_policy/opts.py` (2023-12-11)](https://github.com/openstack/oslo.policy/blob/a1e76258180002b288e64532676ba2bc2d1ec800/oslo_policy/opts.py#L26-L51)
123+
[^3]: [Implementation of the "manager" role in Ironic for the 2024.1 release](https://github.com/openstack/ironic/blob/stable/2024.1/ironic/common/policy.py#L76-L82)
165124

166125
## Standard
167126

168127
### Roles
169128

170-
This standard establishes the following roles in SCS clouds.
171-
**Core Roles** MUST be present in the Identity API at all times.
172-
**Service-specific Roles** MUST be present in the Identity API as long as the corresponding service (denoted in parentheses) is part of the infrastructure.
173-
174-
**Core Roles:**
129+
This standard establishes the following default roles in SCS clouds.
130+
The roles mentioned below MUST be present in the Identity API at all times.
175131

132+
- reader
176133
- member
134+
- manager
177135
- admin
178136
- service
179137

180-
**Service-specific Roles:**
181-
182-
- manager (Keystone)
183-
- key-manager:service-admin (Barbican)
184-
- creator (Barbican)
185-
- observer (Barbican)
186-
- audit (Barbican)
187-
- load-balancer_observer (Octavia)
188-
- load-balancer_global_observer (Octavia)
189-
- load-balancer_member (Octavia)
190-
- load-balancer_quota_admin (Octavia)
191-
- load-balancer_admin (Octavia)
192-
- ResellerAdmin (Swift + Ceilometer)
193-
- heat_stack_user (Heat)
194-
195138
#### Role Definitions
196139

197140
The following overview will explain the roles' purposes and target scopes.
@@ -201,49 +144,34 @@ Core Roles:
201144

202145
| Role | Primary Target(s) | Purpose |
203146
|---|---|---|
147+
| reader | customer | read-only access to resources in the scope of authentication (e.g. project) |
204148
| member | customer | read and write access to resources in the scope of authentication (e.g. project) |
149+
| manager | customer | identity self-service capability within a domain, to assign/revoke roles between users, groups and projects |
205150
| admin | CSP | cloud-level global administrative access to all resources (cross-domain, cross-project) |
206151
| service | internal | internal technical user role for service communication |
207152

208-
Service-specific Roles:
209-
210-
| Service | Role | Primary Target(s) | Purpose |
211-
|---|---|---|---|
212-
| Keystone | manager | customer, CSP | slightly more elevated privileges than *member*, able to manage core resources or settings of a project or domain; currently this is limited to managing identity resources within a domain |
213-
| Barbican | audit | customer | allows read-only access to metadata of secrets within a project; does not allow secret retrieval or decryption |
214-
| Barbican | observer | customer | allows read-only access to secrets within a project, including retrieval and decryption |
215-
| Barbican | creator | customer | allows access to, creation and deletion of secrets within a project, including retrieval and decryption, equal to the member role |
216-
| Barbican | key-manager:service-admin | CSP | management API access for the cloud administrator, e.g. for project quota settings |
217-
| Octavia | load-balancer_observer | customer | access to read-only APIs |
218-
| Octavia | load-balancer_global_observer | CSP | access to read-only APIs including resources owned by others |
219-
| Octavia | load-balancer_member | customer | access to read and write APIs |
220-
| Octavia | load-balancer_quota_admin | CSP | admin access to quota APIs only, including quota resources owned by others |
221-
| Octavia | load-balancer_admin | CSP | admin access to all LB APIs including resources owned by others |
222-
| Swift | ResellerAdmin | Ceilometer (internal) | assigned to technical users of Ceilometer to integrate with Swift for access privileges in the object storage API to store statistics for metering |
223-
| Heat | heat_stack_user | internal | assigned to technical user accounts resulting from other resources' creation in Heat templates |
224-
225-
### API Policies
226-
227-
TODO: what does the CSP need to adhere to when it comes to API policy configuration?
153+
### API configuration
228154

229-
#### Key Manager API
155+
All API services MUST be configured to use the Secure RBAC role model by enabling `enforce_new_defaults` and `enforce_scope` of the oslo.policy library.
230156

231-
For the Key Manager API, the policy rule called "creator" MUST be adjusted to incorporate the "member" role as shown below.
232-
This can be achieved by adding the following entry to a `policy.yaml` for Barbican (usually located at "`/etc/barbican/policy.yaml`"):
157+
If custom policy rules to any API by a CSP, the following MUST be adhered to:
233158

234-
```yaml
235-
"creator": "role:creator or role:member"
236-
```
159+
1. The `policy_file` option of the oslo.policy library MUST be set to the name of the policy override file and not rely on default paths.
160+
2. The custom policy rules MUST NOT extend the privileges of the roles mentioned in this standard.
237161

238-
Exemplary contents of a "`/etc/barbican/barbican.conf`":
162+
Example configuration entries:
239163

240164
```ini
241165
[oslo_policy]
242-
enforce_new_defaults = False
243-
enforce_scope = False
166+
enforce_new_defaults = True
167+
enforce_scope = True
244168
policy_file = policy.yaml
245169
```
246170

171+
#### API Policies
172+
173+
TODO: what does the CSP need to adhere to when it comes to API policy configuration?
174+
247175
## Related Documents
248176

249177
### SCS Mandatory and Supported IaaS Services

0 commit comments

Comments
 (0)