docs/doc/source/security/kubernetes/create-end-users-359693b84854.rst
Suzana Fernandes 4b0d6f789e Fix index Security guide
[EAG] - Fix toctrees in wrong place
[RS]  - escape sample URLs

Change-Id: I3972bac7a0637bedfdca70a523851439d3b7ce42
Signed-off-by: Suzana Fernandes <Suzana.Fernandes@windriver.com>
2024-11-29 18:18:33 +00:00

198 lines
7.2 KiB
ReStructuredText

.. WARNING: Add no lines of text between the label immediately following
.. and the title.
.. _create-end-users-359693b84854:
================
Create End Users
================
After setting up your system administrators, use a ``Level1SystemAdmin``
system administrator to configure 'end users'.
In the following example, creating end users consists of:
- Create a general end user kubernetes ``ClusterRole`` with restricted
kubernetes capabilities.
- For one or more specific end user groups:
- Create an |LDAP| group;
- You can disable the |SSH| access for this |LDAP| group (i.e.,
restricting these end users to only use remote CLIs / APIs / GUIs);
- Create a Kubernetes namespace for the group;
- Bind the general end user kubernetes cluster role to the |LDAP| group
for this kubernetes namespace,
- Create one or more |LDAP| users in this |LDAP| group.
.. rubric:: |prereq|
- You should already have created a system administrator.
- You need to perform this procedure using the ``Level1SystemAdmin`` system administrator.
.. rubric:: |proc|
#. Login to the active controller as a ``Level1SystemAdmin`` system administrator,
``joefulladmin`` in this example.
Use either a local console or |SSH|.
#. Use the ``local_starlingxrc`` to setup |prod| environment variables
and to setup your keystone user's authentication credentials.
.. code-block::
$ source local_starlingxrc
Enter the password to be used with keystone user joefulladmin:
Created file /home/joefulladmin/joefulladmin-openrc
#. Use the ``oidc-auth`` to authenticate via |OIDC|/|LDAP| for kubernetes CLI.
.. code-block::
$ oidc-auth
Using "joefulladmin" as username.
Password:
Successful authentication.
Updated /home/joefulladmin/.kube/config.
#. Create a directory for temporary files for setting up users and groups.
.. code-block::
$ mkdir /home/joefulladmin/users
#. Create a general end user kubernetes ``ClusterRole`` with restricted
kubernetes authorization privileges.
.. code-block::
$ cat << EOF > /home/joefulladmin/users/GeneralEndUser-ClusterRole.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: GeneralEndUser
rules:
# For the core API group (""), allow full access to all resource types
# EXCEPT for resource policies (limitranges and resourcequotas) only allow read access
- apiGroups: [""]
resources: ["bindings", "configmaps", "endpoints", "events", "persistentvolumeclaims", "pods", "podtemplates", "replicationcontrollers", "secrets", "serviceaccounts", "services"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: [ "limitranges", "resourcequotas" ]
verbs: ["get", "list"]
# Allow full access to all resource types of the following explicit list of apiGroups.
# Notable exceptions here are:
# ApiGroup ResourceTypes
# ------- -------------
# policy podsecuritypolicies, poddisruptionbudgets
# networking.k8s.io networkpolicies
# admissionregistration.k8s.io mutatingwebhookconfigurations, validatingwebhookconfigurations
#
- apiGroups: ["apps", "batch", "extensions", "autoscaling", "apiextensions.k8s.io", "rbac.authorization.k8s.io"]
resources: ["*"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
# Cert Manager API access
- apiGroups: ["cert-manager.io", "acme.cert-manager.io"]
resources: ["*"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
EOF
$ kubectl apply -f /home/joefulladmin/users/GeneralEndUser-ClusterRole.yml
#. For one or more specific end user groups, create an |LDAP| group, Kubernetes
namespace and one or more |LDAP| users.
#. Create a new local |LDAP| group for the end user group.
.. code-block::
$ sudo ldapaddgroup ABC-EndUsers
#. |Optional| Disallow this local |LDAP| group from using |SSH|.
Users of this |LDAP| group can only use the remote kubernetes
API/CLI/GUI. Update the ``/etc/security/group.conf`` with |LDAP| group
mappings.
.. note::
If it is |AIO-DX| controller configuration, disallow this local
|LDAP| group on both controllers.
.. code-block::
$ sudo sed -i '$ a\\\*;\*;%ABC-EndUsers;Al0000-2400;denyssh' /etc/security/group.conf
#. Create a kubernetes namespace for the end user group.
.. code-block::
$ kubectl create namespace abc-ns
#. Bind the ``GeneralEndUser`` role to this |LDAP| group for this
kubernetes namespace.
.. code-block::
$ cat << EOF > /home/joefulladmin/users/ABC-EndUsers-rolebinding.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ABC-EndUsers
namespace: abc-ns
subjects:
- kind: Group
name: ABC-EndUsers
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: GeneralEndUser
apiGroup: rbac.authorization.k8s.io
EOF
$ kubectl apply -f /home/joefulladmin/users/ABC-EndUsers-rolebinding.yml
#. Create one or more |LDAP| users for the end user group.
.. code-block::
$ sudo ldapusersetup -u steveenduser
Password:
Successfully added user steveenduser to LDAP
Successfully set password for user steveenduser
Warning : password is reset, user will be asked to change password at login
Successfully modified user entry uid=steveenduser,ou=People,dc=cgcs,dc=local in LDAP
Updating password expiry to 90 days
Successfully modified user entry uid=steveenduser,ou=People,dc=cgcs,dc=local in LDAP
Updating password expiry to 2 days
$ sudo ldapaddusertogroup steveenduser ABC-EndUsers
#. Repeat the ``Create one or more LDAP users for the end user group`` step
for the next user in this end user group.
#. Repeat the ``For one or more specific end user groups, create an LDAP group, kubernetes
namespace and one or more LDAP users`` step for the next end user group.
.. rubric:: |postreq|
The end user created is able to, optionally, use SSH on the system to execute
kubernetes |CLI| commands to manage the hosted containerized application and
execute Linux commands. See section: :ref:`end-users-local-access-using-ssh-or-k8s-cli-2b88b1235671`.
.. note::
More setup is required for end user to use remote CLIs/GUIs, see section
:ref:`remote-access-2209661be417`.