Я пытаюсь перечислить разрешения, связанные с учетной записью службы «foobar-user», применяемой к моему кластеру в пространстве имен «kube-system»:
kubectl auth can-i --list --as=system:serviceaccount:kube-system:foobar-user --namespace=kube-system
Resources Non-Resource URLs Resource Names Verbs
clusterroles [] [] [create list update watch get]
deployments [] [] [create list update watch get]
endpoints [] [] [create list update watch get]
pods [] [] [create list update watch get]
rolebindings [] [] [create list update watch get]
roles [] [] [create list update watch get]
secrets [] [] [create list update watch get]
services [] [] [create list update watch get]
selfsubjectaccessreviews.authorization.k8s.io [] [] [create]
selfsubjectrulesreviews.authorization.k8s.io [] [] [create]
[/.well-known/openid-configuration] [] [get]
[/api/*] [] [get]
[/api] [] [get]
[/apis/*] [] [get]
[/apis] [] [get]
[/healthz] [] [get]
[/healthz] [] [get]
[/livez] [] [get]
[/livez] [] [get]
[/openapi/*] [] [get]
[/openapi] [] [get]
[/openid/v1/jwks] [] [get]
[/readyz] [] [get]
[/readyz] [] [get]
[/version/] [] [get]
[/version/] [] [get]
[/version] [] [get]
[/version] [] [get]
nodes [] [] [list watch get]
Что такое эквивалентный API для этого через клиент Python для kubernetes, чтобы перечислить разрешения, связанные с учетной записью службы? Ценю вашу помощь, спасибо!
Эквивалентный API для этого через клиент Python для kubernetes:
AuthorizationV1Api — создать SelfSubjectRulesReview
Официальная документация Kubernetes выглядит следующим образом:
SelfSubjectRulesReview
: обзор, который возвращает набор действий, которые пользователь может выполнять в пространстве имен. Полезно для пользователей, чтобы быстро подвести итоги своего доступа, или для пользовательских интерфейсов, чтобы скрыть/показать действия.
Спасибо, что поделился! Я попробовал и у меня есть скрипт, который вызывает API, но я получаю сообщение об ошибке HTTP 400 Bad Request: «SelfSubjectAccessReview в версии \"v1\" не может быть обработан как SelfSubjectAccessReview: v1.SelfSubjectAccessReview.Spec: readObjectStart: expect { or n , но найдено \", обнаружена ошибка в #10 байте ...|{\"spec\": \"foo-bar|..., больший контекст ...|{\"spec\": \"foo -bar\"}|..." Любая идея о том, почему запрос искажен?
@KGosalia Я думаю, что в сообщении об ошибке ясно сказано: "SelfSubjectAccessReview in version \"v1\" cannot be handled as a SelfSubjectAccessReview: v1.SelfSubjectAccessReview.Spec: readObjectStart: expect { or n, but found \"
, часть spec
должна быть объектом json, а не строкой.
Я вижу, но это уже python dict. Вот мой фрагмент кода: spec = {"namespace": "foo-bar"} с kubernetes.client.ApiClient(configuration) as api_client: api_instance = kubernetes.client.AuthorizationV1Api(api_client) body = kubernetes.client.V1SelfSubjectAccessReview(spec= spec) api_response = api_instance.create_self_subject_access_review(body) pprint(api_response) body = {'api_version': None, 'kind': None, 'metadata': None, 'spec': 'foo-bar', 'status': None }
При этом я столкнулся с следующей ошибкой: ".authorization.k8s.io \"\" недействителен: spec.resourceAttributes: Неверное значение: \"null\": должен быть указан ровно один из nonResourceAttributes или resourceAttributes"
@KGosalia Ваш спецификационный словарь все еще недействителен, он должен выглядеть как объект, описанный здесь: github.com/kubernetes-client/python/blob/master/kubernetes/docs/…
Спасибо, разобрался! В запросе отсутствовали аргументы с ключевыми словами
Любой вопрос «kubectl делает это, но какой у него API?» отвечает, набирая многословие как
kubectl --v=100 auth can-i
, а затем имитируя его HTTP-запросы, используя привязку API по вашему выбору.