11. User and Role
User and Role design for App Mesh.
11.1. Supported Features
App Mesh REST API supports user permission control.
App Mesh CLI (based on REST API) supports user permission control.
Permission keys are defined for each REST API.
Role list is configurable.
Each user can define a password and roles.
All user/role/permissions can be defined in a local YAML file or central Consul service.
User/role configuration supports dynamic updates via
systemctl reload appmesh, WebGUI, and CLI.Users support metadata attributes for extra usage.
User groups are defined for users.
App ownership permissions can define group permissions and other group permissions.
11.2. Unsupported Features
One user can only belong to one user group.
11.3. User and Role Configuration JSON Sample
{
"Security": {
"EncryptKey": false,
"Roles": {
"manage": [
"app-control",
"app-delete",
"app-reg",
"config-set",
"file-download",
"file-upload",
"label-delete",
"label-set"
],
"usermgr": [
"user-add",
"passwd-change-self",
"passwd-change-user",
"user-delete",
"user-lock",
"role-delete",
"role-set",
"user-unlock"
],
"shell": [
"app-run-async",
"app-run-sync",
"app-run-task"
],
"view": [
"config-view",
"label-view",
"role-view",
"user-list",
"permission-list",
"app-view-all",
"app-view",
"app-output-view",
"host-resource-view"
]
},
"Users": {
"admin": {
"key": "admin123",
"group": "admin",
"exec_user": "root",
"locked": false,
"roles": [
"manage",
"view",
"shell",
"usermgr"
]
},
"test": {
"key": "test123",
"group": "user",
"exec_user": "appmesh",
"locked": false,
"roles": []
},
"mesh": {
"key": "mesh123",
"group": "user",
"exec_user": "appmesh",
"locked": false,
"roles": [
"view",
"shell"
]
}
}
}
}
11.4. Permission List
| REST Method | PATH | Permission Key |
|---|---|---|
| GET | /appmesh/app/app-name | view-app |
| GET | /appmesh/app/app-name/output | view-app-output |
| GET | /appmesh/applications | view-all-app |
| GET | /appmesh/resources | view-host-resource |
| PUT | /appmesh/app/app-name | app-reg |
| POST | /appmesh/app/app-name/enable | app-control |
| POST | /appmesh/app/app-name/disable | app-control |
| DEL | /appmesh/app/app-name | app-delete |
| POST | /appmesh/app/syncrun?timeout=5 | run-app-sync |
| POST | /appmesh/app/run?timeout=5 | run-app-async |
| GET | /appmesh/download | file-download |
| POST | /appmesh/upload | file-upload |
| GET | /appmesh/labels | label-view |
| PUT | /appmesh/label/abc?value=123 | label-set |
| DEL | /appmesh/label/abc | label-delete |
| POST | /appmesh/config | config-view |
| GET | /appmesh/config | config-set |
| POST | /appmesh/user/admin/passwd | change-passwd |
| POST | /appmesh/user/usera/lock | lock-user |
| POST | /appmesh/user/usera/unlock | unlock-user |
| DEL | /appmesh/user/usera | delete-user |
| PUT | /appmesh/user/usera | add-user |
| POST | /appmesh/totp/secret | user-totp-active |
| POST | /appmesh/totp/setup | user-totp-active |
| POST | /appmesh/token/renew | user-token-renew |
| POST | /appmesh/totp/usera/disable | user-totp-disable |
| GET | /appmesh/users | get-users |
11.5. Command Line Authentication
Invalid authentication will stop command line:
$ appc ls
login failed : Incorrect user password
invalid token supplied
Use
appc logonto authenticate from App Mesh:
$ appc logon
User: admin
Password: *********
User <admin> logon to localhost success.
$ appc ls
id name user status return pid memory start_time command
1 sleep root enabled 0 32646 812 K 2019-10-10 19:25:38 /bin/sleep 60
Use
appc logoffto clear authentication information:
$ appc logoff
User <admin> logoff from localhost success.
$ appc ls
login failed : Incorrect user password
invalid token supplied
11.6. REST API Authentication
Get token from API
/appmesh/login:
$ curl -X POST -k https://127.0.0.1:6060/appmesh/login -H "Authorization:Basic `echo -n admin:admin123 | base64`"
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzA3MDc3NzYsImlhdCI6MTU3MDcwNzE3NiwiaXNzIjoiYXBwbWdyLWF1dGgwIiwibmFtZSI6ImFkbWluIn0.CF_jXy4IrGpl0HKvM8Vh_T7LsGTGO-K73OkRxQ-BFF8","expire_time":1570707176508714400,"profile":{"auth_time":1570707176508711100,"name":"admin"},"token_type":"Bearer"}
All other APIs should add the token in the header
Authorization:Bearer <JWT_TOKEN>. UsePOST/appmesh/authto verify the token:
$ curl -X POST -k -i -H "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDE4MTM1NzQsImdyb3VwIjoiYWRtaW4iLCJpYXQiOjE2NDEyMDg3NzQsImlzcyI6ImFwcG1lc2gtYXV0aDAiLCJuYW1lIjoiYWRtaW4ifQ.BfiNR2JOk8lB_q3pwwfl8j3PlA3Jxhccrbq2cx-HHtE" https://127.0.0.1:6060/appmesh/auth
HTTP/1.1 200 OK
Content-Length: 7
Content-Type: text/plain; charset=utf-8
11.7. Application Permission
Each application can define access permissions for other users (optional). By default, a registered application can be accessed by any user with the specific role permission. Application permission is different from role permission; it defines accessibility for users who did not register the application. The permission is a two-digit integer value:
Unit Place: defines the same group users’ permissions. 1=deny, 2=read, 3=write.
Tenth Place: defines other group users’ permissions. 1=deny, 2=read, 3=write.
For example, 11 indicates all other users cannot access this application, 21 indicates only same group users can read this application.