207ee7e017
This commit aims to suggest a set of default policies for user management on stx-openstack. We suggest the creation of the project_admin and project_readonly roles and provide some policies to fine tune the access control over the Openstack services to those roles, as described on README.md. Also, we provide a set of tests to ensure the policies and permissions are all working as expected on site for the cloud administrators. Story: 2008910 Task: 42501 Signed-off-by: Heitor Matsui <heitorvieira.matsui@windriver.com> Signed-off-by: Thiago Brito <thiago.brito@windriver.com> Co-authored-by: Miriam Yumi Peixoto <miriam.yumipeixoto@windriver.com> Co-authored-by: Leonardo Zaccarias <leonardo.zaccarias@windriver.com> Co-authored-by: Rogerio Oliveira Ferraz <rogeriooliveira.ferraz@windriver.com> Change-Id: I4040fe9f7be94ea7e0eb208579b2d5aa7579a8b1
147 lines
5.8 KiB
Markdown
147 lines
5.8 KiB
Markdown
Enhanced Policies
|
|
==========================
|
|
|
|
This repository aims to provide enhanced policies for stx-openstack.
|
|
|
|
|
|
|Design|Roles|Permissions summary|
|
|
|:-------------|-------------|:-----|
|
|
|Default Role:|member|Users with 'member' can manage certain resources of the project.|
|
|
|New Role to add:|project_admin|Users with role 'project_admin' could manage all resources of the project|
|
|
|New Role to add:|project_readonly|Users with role 'project_readonly' can only get list and detail of resources of the project, and shared resources of other projects|
|
|
|
|
Setting up the environment
|
|
--------------------------
|
|
|
|
Make sure you have access to the Openstack CLI, follow the instructions on [this doc.](https://docs.starlingx.io/deploy_install_guides/r5_release/openstack/access.html#id4)
|
|
|
|
1. Transfer the policies to your cloud's controller:
|
|
```
|
|
rsync -avP *-policy-overrides.yml <user>@<controller-floating-ip>:~/rbac
|
|
```
|
|
2. Log into your active controller
|
|
3. Create your clouds.yaml file
|
|
```bash
|
|
cat <<EOF >clouds.yaml
|
|
clouds:
|
|
openstack:
|
|
region_name: RegionOne
|
|
identity_api_version: 3
|
|
endpoint_type: internalURL
|
|
auth:
|
|
username: 'admin'
|
|
password: '<PASSWORD FOR ADMIN>'
|
|
project_name: 'admin'
|
|
project_domain_name: 'default'
|
|
user_domain_name: 'default'
|
|
auth_url: 'http://keystone.openstack.svc.cluster.local/v3'
|
|
EOF
|
|
```
|
|
4. Create the custom roles:
|
|
```
|
|
# Assuming you are using method 1
|
|
export OS_CLOUD=openstack
|
|
|
|
openstack role create project_admin
|
|
openstack role create project_readonly
|
|
```
|
|
5. In order to enable the extensions required for some of the Neutron tests, include the following configuration to the Neutron helm override YML file:
|
|
```
|
|
conf:
|
|
neutron:
|
|
DEFAULT:
|
|
service_plugins:
|
|
- router
|
|
- network_segment_range
|
|
- qos
|
|
- segments
|
|
- port_forwarding
|
|
- trunk
|
|
plugins:
|
|
ml2_conf:
|
|
ml2:
|
|
extension_drivers:
|
|
- port_security
|
|
- qos
|
|
openvswitch_agent:
|
|
agent:
|
|
extensions:
|
|
- qos
|
|
- port_forwarding
|
|
```
|
|
6. Apply the policy overrides for each service to your cloud
|
|
```
|
|
source /etc/platform/openrc
|
|
|
|
system helm-override-update stx-openstack keystone openstack --values=rbac/keystone-policy-overrides.yml
|
|
system helm-override-update stx-openstack cinder openstack --values=rbac/cinder-policy-overrides.yml
|
|
system helm-override-update stx-openstack nova openstack --values=rbac/nova-policy-overrides.yml
|
|
system helm-override-update stx-openstack neutron openstack --values=rbac/neutron-policy-overrides.yml
|
|
system helm-override-update stx-openstack glance openstack --values=rbac/glance-policy-overrides.yml
|
|
system helm-override-update stx-openstack horizon openstack --values=rbac/horizon-policy-overrides.yml
|
|
|
|
system application-apply stx-openstack
|
|
```
|
|
7. Watch for application overrides to finish applying
|
|
```
|
|
watch system application-show stx-openstack
|
|
```
|
|
|
|
Running tests
|
|
-------------
|
|
|
|
Please follow the instructions below to test the enhanced policies on your system. We assume that the New Roles were created on you system and the overrides were successfully applied.
|
|
|
|
1. Get to the rbac folder you transfered into your controller node
|
|
```
|
|
cd ~/rbac
|
|
```
|
|
|
|
2. IMPORTANT: create a venv and install the test dependencies
|
|
```
|
|
if [ ! -d .venv ]; then
|
|
python3 -m venv .venv
|
|
fi
|
|
|
|
source .venv/bin/activate
|
|
pip install --upgrade pip
|
|
pip install -r test-requirements.txt
|
|
```
|
|
3. Download CirrOS image (dependency for nova and cinder tests)
|
|
```
|
|
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
|
|
```
|
|
4. Execute the tests
|
|
On StarlingX:
|
|
```
|
|
export OS_CLOUD=openstack
|
|
pytest tests/
|
|
```
|
|
|
|
On WindRiver Openstack:
|
|
```
|
|
export OS_CLOUD=openstack
|
|
pytest tests/ --env wro
|
|
```
|
|
|
|
If things go awry...
|
|
--------------------
|
|
|
|
**WARNING: The following script might DELETE some existing configuration if not used carefully!**
|
|
|
|
One can use the run-cleanup-all.sh script to remove any leftovers from the test
|
|
on the environment:
|
|
|
|
```bash
|
|
export OS_CLOUD=openstack
|
|
bash run-cleanup-all.sh
|
|
```
|
|
|
|
Role Permission Details
|
|
-----------------------
|
|
|
|
|Role Permissions|identity(keystone)|compute(nova)|networking(neutron)|image(glance)|volume(cinder)|
|
|
|---|:---|:---|:---|:---|:---|
|
|
|member|All operations that legacy role '_member_' can do|1 - Can get list and detail of instances<br>2 - Can create instance/Can open console of instances<br>3 - Can access log of instance<br>4 - Can manage keypairs of his/her own|1 - Can only create/update/delete port<br>2 - Can get list and detail of resources: subnetpool, address scope, networks, subnets, etc.|1,can create and update image, upload image content<br>|1 - Can create volume<br>2 - Can create volume from image<br>3 - Can create volume snapshot<br>4 - Can create volume-backup|
|
|
|project_admin|all operations that legacy role '_member_' can do;|all operations that legacy role '_member_' can do<br>|1 - All operations that legacy role '_member_' can do<br>2 - Can create/update/delete 'shared' subnetpool<br>3 - Can create/update/delete address scope<br>4 - Can create/update/delete shared network<br>|1 - All operations that legacy role '_member_' can do<br>2 - Can publicize_image<br>|1 - All operations that legacy role '_member_' can do|
|
|
|project_readonly|all operations that legacy role '_member_' can do<br>|1 - Can only get list and detail of instances<br>2 - Can manage key-pairs of his/her own|1 - Can only get list and detail of resources: subnetpool, address scopes, networks, subnets,etc.|1 - Can only get list and detail of images|1 - Can only get list and detail of volumes, backups, snapshots| |