Чтобы проверить наличие прав доступа у пользователя, выполните следующую команду, в которой будут указаны:
resourceAttributes(как в RBAC) — к чему проверяется доступ;user— имя пользователя;groups— группы пользователя.
При совместном использовании с модулем user-authn группы и имя пользователя можно посмотреть в логах Dex с помощью команды 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
В результате будет видно, есть ли доступ и на основании какой роли.
Пример ответа при наличии прав доступа у пользователя:
{
"allowed": true,
"reason": "RBAC: allowed by ClusterRoleBinding \"system:kube-controller-manager\" of ClusterRole \"system:kube-controller-manager\" to User \"system:kube-controller-manager\""
}
Пример ответа при отсутствии прав доступа у пользователя:
{
"allowed": false
}
Если в кластере включён режим multitenancy, выполните ещё одну проверку, чтобы убедиться, что у пользователя есть доступ в пространство имён:
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
Пример ответа при наличии прав доступа у пользователя:
{
"allowed": false
}
Сообщение "allowed": false значит, что вебхук не блокирует запрос. В случае блокировки запроса вебхуком вы получите, например, следующее сообщение:
{
"allowed": false,
"denied": true,
"reason": "making cluster scoped requests for namespaced resources are not allowed"
}