Chapter 5. User model
A messaging client connects using a MessagingUser. A MessagingUser specifies an authorization policy that controls which addresses may be used and the operations that may be performed on those addresses.
Users are configured as MessagingUser
resources. Users can be created, deleted, read, updated, and listed.
The following example shows the user-example1.yaml
file:
apiVersion: user.enmasse.io/v1beta1 kind: MessagingUser metadata: name: myspace.user1 spec: username: user1 authentication: type: password password: cGFzc3dvcmQ= # Base64 encoded authorization: - addresses: ["myqueue", "queue1", "queue2", "topic*"] operations: ["send", "recv"] - addresses: ["anycast1"] operations: ["send"]
The following fields are required:
-
metadata.name
-
metadata.namespace
-
spec.authentication
-
spec.authorization
The spec.authentication
object defines how the user is authenticated, whereas spec.authorization
defines the authorization policies for that user.
5.1. Authentication
The supported values for the authentication type are password
and serviceaccount
. When using the password
authentication type, you specify the username and password to be used by your messaging client when connecting. With the serviceaccount
authentication type, you use the special string @@serviceaccount@@
as the username, and a OpenShift service account token as the password.
5.1.1. Password authentication type
For the password
type, an additional field password
must be set to a base64-encoded value of the password for that user. The password will not be printed out when reading the resource.
A password can be base64-encoded on the command line. To encode my-password
, for example:
$ echo -n my-password | base64 bXktcGFzc3dvcmQ=
5.1.2. Serviceaccount authentication type
For the serviceaccount
type, the username
field must contain the OpenShift serviceaccount name that will be used to authenticate. When connecting with the messaging client, use the string @@serviceaccount@@
as the username, and the service account token as the password. The AMQP client used by the application must be configured to use the SASL mechanism type PLAIN
.
5.2. Authorization
In addition, authorization policies can be defined using operations and addresses. Valid operations are send
, recv
, view
, and manage
.
The manage
and view
operations apply to all addresses in the address space.
In the standard
address space, the asterisk wildcard can be used at the end of an address. The address top*
matches addresses topic
and topic/sub
.
In the brokered
address space, the plus sign and asterisk wildcards can be used at the end of an address to match a single word (plus sign) or all words (asterisk) after the forward slash delimiter. So, the address topic/+
matches topic/sub
but not topic/s/sub
. The address topic/*
matches topic/sub
and topic/s/sub
.
5.3. Managing users
AMQ Online user management is only supported when using the standard
authentication service. On OpenShift, users can be managed using the OpenShift command-line tools.
Prerequisites
- You must have already created an address space.
5.3.1. Creating users using the command line
In AMQ Online users can be created using standard command-line tools.
Prerequisites
- You must have already created an address space.
Procedure
To correctly base64 encode a password for the user definition file, run the following command:
echo -n password | base64 #cGFzc3dvcmQ=
NoteBe sure to use the
-n
parameter when running this command. Not specifying that parameter will result in an improperly coded password and cause log-in issues.Save the user definition to a file:
apiVersion: user.enmasse.io/v1beta1 kind: MessagingUser metadata: name: myspace.user1 spec: username: user1 authentication: type: password password: cGFzc3dvcmQ= # Base64 encoded authorization: - addresses: ["myqueue", "queue1", "queue2", "topic*"] operations: ["send", "recv"] - addresses: ["anycast1"] operations: ["send"]
Create the user and associated user permissions:
oc create -f user-example1.yaml
Confirm that the user was created:
oc get messagingusers
5.3.2. Deleting users using the command line
Users can be deleted using standard command-line tools.
Prerequisites
- An address space must have been created.
- A user must have been created.
Procedure
List the current users:
oc get messagingusers
Delete the desired user:
oc delete messaginguser myspace.user1
5.3.3. Managing user permissions using the command line
You can edit the permissions for an existing user using the command line.
Prerequisites
- You must have already created a user. For more information see Creating users using the command line.
Procedure
Retrieve the user whose permissions you want to edit:
oc get messaginguser myspace.user1 -o yaml > user-example1.yaml
- Make the desired permissions change and save the file.
From the command line, run the following command to apply the change:
oc apply -f user-example1.yaml
The new user permissions are applied.