RBAC Permissions for Fission CLI

RBAC permission in Fisson CLI is available from Fission version-1.18.0

Fission CLI supports Kubernetes RBAC through which we can decide specific action the user can perform. Fission Admin can create user’s account and provide them with the permission that fits the user role.

Setup & pre-requisites for RBAC permission in Fission CLI

You will need a Kubernetes cluster with Fission installed (Please check installation page for details). You should have a account - in this tutorial we have named it as - fission-user

Creating Role for Fission CLI User

User can perform mutliple actions using Fission CLI. And below is the clusterrole which allows user to perform all task which Fission CLI provides.

In the below file comments describe the use of each permission in format-

# <fission CLI command1> <subcommand1>,<subcommand2>; <fission CLI command 1> <subcommand1>,<subcommand2>;

eg,

# function- create,delete means the resource permission is required for Fission CLI in,

  • fission function create &
  • fission function delete commands

fission-user-role.yaml file

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fission-user rules: # Function - create,update, run-container,update-container # Spec -apply, destroy - apiGroups: - "" resources: - configmaps - secrets verbs: - get # functions - log, pod - apiGroups: - "" resources: - pods - pods/log verbs: - list - get - apiGroups: - "" resources: - services verbs: - list # Fission -version # function - test, create, update # archive - download, geturl, list, upload, delete # package - create, update # timetrigger - create, update, test - apiGroups: - "" resources: - pods/portforward verbs: - list - create - apiGroups: - fission.io resources: - canaryconfigs verbs: - list # canary -list - get # canary - get, update - create # canary - create - update # canary - update - delete #canary - delete - apiGroups: - fission.io resources: - environments verbs: - list # environments -list, create;spec-list,apply,destroy ;fission dump - get # environments - get, update, pod; function - create - create # environments - create;spec-apply,destroy - update # environments - update;spec-apply,destroy - delete # environments - delete;spec-apply,destroy - apiGroups: - fission.io resources: - functions verbs: - list # function- list, update; environement - delete;package-list, update, delete;spec-list,apply,destroy ;fission dump - get # function- get, create, getmeta, log, pod, run-container, update-container, update; httptrigger- create, update; mqtrigger - create, update - create # function - create, run-container; spec-apply,destroy - update # function- update-container, update; package-update;spec-apply,destroy - delete # function -delete; spec-apply,destroy - apiGroups: - fission.io resources: - packages verbs: - list # canary -list; package-delete,list; spec-list,apply,destroy; fission dump - get # function - create, get,update; package-delete,get,info,rebuild,update; spec-apply,destroy - create # canary - create;function-create; package-create;spec-apply,destroy - update # canary - update; function - update; package- rebuild,update;spec-apply,destroy - delete #canary - delete;package-delete;spec-apply,destroy - apiGroups: - fission.io resources: - httptriggers verbs: - list # httptrigger- create,delete,list,update; spec-list,apply,destroy; fission dump - get # canary - get; httptrigger- create,get,list,update, - create # function -create;httptrigger- create; spec-apply,destroy - update # httptrigger- update; spec-apply,destroy - delete # httptrigger-delete; spec-apply,destroy - apiGroups: - fission.io resources: - kuberneteswatchtriggers verbs: - list # watch -list; spec-list,apply,destroy; fission dump - create # watch - create; spec-apply,destroy - delete # watch - delete; spec-apply,destroy - apiGroups: - fission.io resources: - messagequeuetriggers verbs: - list # mqtrigger -list; spec-list, apply, destroy; fission dump - get # mqtrigger - get, update - create # mqtrigger - create; spec-apply,destroy - update # mqtrigger - update; spec-apply,destroy - delete # mqtrigger - delete; spec-apply,destroy - apiGroups: - fission.io resources: - timetriggers verbs: - list # timetrigger -list; spec-list, apply, destroy; fission dump - get # timetrigger - get, update; spec-list, apply, destroy - create # timetrigger - create; spec-list, apply, destroy - update # timetrigger - update; spec-list, apply, destroy - delete #timetrigger - delete; spec-list, apply, destroy

We also need to create corresponding rolebinding to create binding for the account and user.

fission-user-rolebinding.yaml

kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fission-user1 subjects: - kind: ServiceAccount name: fission-user roleRef: kind: ClusterRole name: fission-user apiGroup: rbac.authorization.k8s.io

Implementing Role on Fission CLI User

Lets create a role using above mentioned fission-user-role.yaml

kubectl apply -f fission-user-role.yaml clusterrole.rbac.authorization.k8s.io/fission-user configured

Similarly we create a rolebinding.yaml

kubectl apply -f charts/fission-all/templates/serviceAccount/rolebinding.yaml clusterrolebinding.rbac.authorization.k8s.io/fission-user created

Now we need to set our current-context to use the service account. In the example we have used a kind cluster.

kubectl config set-credentials fission-user \ --client-certificate=/path/to/certificate.crt \ --client-key=/path/to/key.key
kubectl config set-context fission-user-context --cluster=kind-kind --user=fission-user Context "fission-user" created. kubectl config use-context fission-user Switched to context "fission-user".

Testing Fission CLI commands using fission-user

With the above setting Fission CLI will use fission-user to perform all actions. Let’s create an environment and a Fission function using create function-

$ fission env create --name node --image ghcr.io/fission/node-env -n default poolsize setting default to 3 environment 'node' created $ fission fn create --name hello --code hello.js --env node Package 'hello-a2318569-0d2d-4b63-826d-6d4d2665be50' created function 'hello' created

Conclusion

The above mentioned fission-user-role.yaml file clearly mentions which commands uses what permission. Depending on the users we can create different Cluster Roles and assign it to users and provide specific accesses to them.