To check whether a user has the necessary permissions, run the following command, which includes:

  • resourceAttributes (as in RBAC): Permission checking target.
  • user: User name.
  • groups: User groups.

If you’re using the user-authn module, you can see the user’s name and groups in the Dex logs (only logged during authorization) by running:

d8 k -n d8-user-authn logs -l app=dex
cat  <<EOF | 2>&1 d8 k create --raw  /apis/authorization.k8s.io/v1/subjectaccessreviews -f - | jq .status
{
  "apiVersion": "authorization.k8s.io/v1",
  "kind": "SubjectAccessReview",
  "spec": {
    "resourceAttributes": {
      "namespace": "",
      "verb": "watch",
      "version": "v1",
      "resource": "pods"
    },
    "user": "system:kube-controller-manager",
    "groups": [
      "Admins"
    ]
  }
}
EOF

The response will show whether access is allowed and which role grants it.

Example response if the user has access permissions:

{
  "allowed": true,
  "reason": "RBAC: allowed by ClusterRoleBinding \"system:kube-controller-manager\" of ClusterRole \"system:kube-controller-manager\" to User \"system:kube-controller-manager\""
}

Example response if the user does not have access permissions:

{
  "allowed": false
}

If multitenancy mode is enabled in the cluster, run an additional check to verify that the user has access to the namespace:

cat  <<EOF | 2>&1 d8 k --kubeconfig /etc/kubernetes/deckhouse/extra-files/webhook-config.yaml create --raw / -f - | jq .status
{
  "apiVersion": "authorization.k8s.io/v1",
  "kind": "SubjectAccessReview",
  "spec": {
    "resourceAttributes": {
      "namespace": "",
      "verb": "watch",
      "version": "v1",
      "resource": "pods"
    },
    "user": "system:kube-controller-manager",
    "groups": [
      "Admins"
    ]
  }
}
EOF

Example response if the user has access permissions:

{
  "allowed": false
}

A response with "allowed": false means the webhook is not blocking the request. If the webhook does block the request, you will see an error message like this:

{
  "allowed": false,
  "denied": true,
  "reason": "making cluster scoped requests for namespaced resources are not allowed"
}