Skip to content

Commit dd0e73b

Browse files
authored
Merge pull request #957 from rackerlabs/fix-perms
fix: keystone SSO group mappings were too broad
2 parents af78b63 + 0f58ce5 commit dd0e73b

File tree

4 files changed

+56
-33
lines changed

4 files changed

+56
-33
lines changed

ansible/roles/keystone_bootstrap/defaults/main.yml

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,44 @@ keystone_bootstrap_dex_url: "{{ dex_url | default('https://dex.' + lookup('ansib
44
keystone_bootstrap_groups:
55
- name: ucadmin
66
desc: 'Users Federated with Admin'
7-
roles:
8-
- member
9-
- admin
7+
domain_roles:
8+
# grants admin role to the infra domain and child projects like baremetal
9+
# this is for full access in ironic
10+
- domain: infra
11+
role: admin
12+
inherited: true
13+
# grants member role to the infra domain and child projects like baremetal
14+
# this allows manipulating resources like images and networks for ironic usage
15+
- domain: infra
16+
role: member
17+
inherited: true
18+
# grants manager role to the default domain so that projects can be created
19+
- domain: default
20+
role: manager
21+
# grants member role to the default domain and child projects where normal tenants live
22+
# TODO: remove this because admins might not be the same people touching tenants
23+
- domain: default
24+
role: member
25+
inherited: true
1026
- name: ucuser
1127
desc: 'Regular Federated Users'
12-
roles:
13-
- member
28+
domain_roles:
29+
# grants member role to the default domain and child projects where normal tenants live
30+
- domain: default
31+
role: member
32+
inherited: true
1433
- name: ucneteng
1534
desc: 'Federated Network Engineers'
16-
roles:
17-
- member
35+
domain_roles:
36+
# grants member role to the default domain and child projects where normal tenants live
37+
- domain: default
38+
role: member
39+
inherited: true
1840
- name: ucdctech
1941
desc: 'Federated DC Technicians'
20-
roles:
21-
- member
42+
domain_roles:
43+
# grants member role to the infra domain and child projects like baremetal
44+
# this allows manipulating resources like images and networks for ironic usage
45+
- domain: infra
46+
role: member
47+
inherited: true

ansible/roles/keystone_bootstrap/tasks/sso.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,7 @@
5757
mapping: sso_mapping
5858

5959
- name: Create federated group mappings
60-
ansible.builtin.include_tasks: sso_member_groups.yml
60+
ansible.builtin.include_tasks: sso_groups.yml
6161
loop: "{{ keystone_bootstrap_groups }}"
62-
63-
- name: Grant admin for groups
64-
ansible.builtin.include_tasks: sso_role_admin.yml
65-
loop:
66-
- ucadmin
62+
loop_control:
63+
loop_var: group_item

ansible/roles/keystone_bootstrap/tasks/sso_role_admin.yml renamed to ansible/roles/keystone_bootstrap/tasks/sso_domain_role.yml

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,15 @@
1313
# License for the specific language governing permissions and limitations
1414
# under the License.
1515
#
16-
- name: Find group
17-
openstack.cloud.identity_group_info:
18-
name: "{{ item }}"
19-
domain: "{{ _domain_sso.domain.id }}"
2016

2117
# role assignment module is lacking inherited and cross domain assignments
22-
- name: Assign member access
23-
ansible.builtin.command: openstack role add --group "{{ _group.group.id }}" --domain default --inherited admin
24-
when: dont_set_roles is not defined
25-
changed_when: false
26-
27-
# role assignment module is lacking inherited and cross domain assignments
28-
- name: Assign member access
29-
ansible.builtin.command: openstack role add --group "{{ _group.group.id }}" --domain infra --inherited admin
18+
# so need to do this manually
19+
- name: Assign role to group for domain
20+
ansible.builtin.command: >
21+
openstack role add --group "{{ group_id }}" --domain "{{ role_item.domain }}"
22+
{% if role_item.inherited | default(false) | bool %}
23+
--inherited
24+
{% endif %}
25+
"{{ role_item.role }}"
3026
when: dont_set_roles is not defined
3127
changed_when: false

ansible/roles/keystone_bootstrap/tasks/sso_member_groups.yml renamed to ansible/roles/keystone_bootstrap/tasks/sso_groups.yml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@
1515

1616
- name: Create group
1717
openstack.cloud.identity_group:
18-
name: "{{ item.name }}"
18+
name: "{{ group_item.name }}"
1919
domain_id: "{{ _domain_sso.domain.id }}"
20-
description: "{{ item.desc }}"
20+
description: "{{ group_item.desc }}"
2121
state: present
2222
register: _group
2323

2424
# role assignment module is lacking inherited and cross domain assignments
25-
- name: Assign member access
26-
ansible.builtin.command: openstack role add --group "{{ _group.group.id }}" --domain default --inherited member
27-
when: dont_set_roles is not defined
28-
changed_when: false
25+
# so need to do this manually done
26+
- name: Assign role to group for domain
27+
ansible.builtin.include_tasks: sso_domain_role.yml
28+
loop: "{{ group_item.domain_roles }}"
29+
loop_control:
30+
loop_var: role_item
31+
vars:
32+
group_id: "{{ _group.group.id }}"

0 commit comments

Comments
 (0)