Skip to main content

A package for creating kubernetes users.

Project description

Kubernetes User Creator

The goal of this project is to make it easy to create a Kubernetes user. While the k8s documentation is quick to point out that users do not exist in Kubernetes, sometimes you just want to generate a kubeconfig which has access to the cluster.

This access can be achived by the following means:

  • create a Service Account with a token with access to the cluster
  • create a RSA certificate/key pair allowing access to the cluster

The "user" is not given any permissions be default, so you still need to create/associate the user with ClusterRoleBindings/RoleBindgins.

This project is inspired by the following blog post: https://www.openlogic.com/blog/granting-user-access-your-kubernetes-cluster

TODO

  • Automate the creation of openssl key and csr
  • Automate the creation of a k8s CSR resource
  • Automate the approval of the CSR resource
  • Automate the creation of a kubeconfig
  • Automate or document the creation of cluster premissions
  • Create a command line tool as well as python api
  • Automate the SA Token workflow
  • Allow passing in SA and CSR resource metadata to CLI
  • Document well
  • Automate the build
  • 95% test coverage

Install

pip install kubernetes-user

CLI Quick Start

Generate a CSR-based User

# basic usage

k8s_user csr myusername

# or providing a non-default kubeconfig

python -m k8s_user csr myusername \
    --kubeconfig ~/.kube/config

# or without installing

python -m k8s_user csr myusername

# or without installing and providing a non-default kubeconfig

python -m k8s_user csr myusername \
    --kubeconfig ~/.kube/config

Generate a SA-based User with token

# basic usage

k8s_user sa myusername

# or providing a non-default kubeconfig

k8s_user sa myusername \
    --kubeconfig ~/.kube/config

# or without installing

python -m k8s_user sa myusername

# or without installing and providing a non-default kubeconfig

python -m k8s_user sa myusername \
    --kubeconfig ~/.kube/config

Add a clusterrollbinding for the new user

kubectl create clusterrolebinding joe-admin --clusterrole=admin --user=joe

Python API Quick Start

Create and sign the user

import kubernetes
from kubernetes import client, config
api_client = config.new_client_from_config()

from k8s_user import CSRK8sUser
user = CSRK8sUser(name="joe")
inputs = {
    "cluster_name": "default",
    "context_name": "default",
    "out_kubeconfig": "new-kubeconfig.yaml",
    "creds_dir": ".",
}
user.create(api_client, inputs)

Add a clusterrollbinding for the new user

kubectl create clusterrolebinding joe-admin --clusterrole=admin --user=joe

Low-Level CSR API Interaction

import kubernetes
from kubernetes import client, config
from k8s_user.k8s.csr_resource import CSRResource
from k8s_user.pki import CSRandKey, Cert

csr_name = 'joe'

# create a KEY and CSR
candk = CSRandKey(csr_name, additional_subject={"O": "jazstudios"})

# save the csr and key
candk.csr.save("joe.csr.pem")
candk.key.save("joe.key.pem")

# create the k8s api client
api_client = config.new_client_from_config()

# Check if the k8s CSR resource exists
csr.resource_exists(api_client)

# Create the k8s CSR resource
obj = csr.create(api_client)

# Check again if the k8s CSR resource exists (it will now)
csr.resource_exists(api_client)

# Approve the k8s CSR resource
approved_csr_obj = csr.approve(api_client)

# Get the certificate file
crt_str = csr.get_cert(api_client)

candk = Cert(crt_data=base64.b64decode(crt_str))
candk.save('joe.crt.pem')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kubernetes-user-0.0.2.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

kubernetes_user-0.0.2-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file kubernetes-user-0.0.2.tar.gz.

File metadata

  • Download URL: kubernetes-user-0.0.2.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.2

File hashes

Hashes for kubernetes-user-0.0.2.tar.gz
Algorithm Hash digest
SHA256 83163e3330ca940182f73bc69951af62e006558d0c42f9ca66c5b587a8be287f
MD5 236f43e53aa01199f430737704742f1e
BLAKE2b-256 50cf24f7d1aa600441f97873ad263c87bbc6a011e16786a24c23d6eb310181ea

See more details on using hashes here.

File details

Details for the file kubernetes_user-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: kubernetes_user-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.2

File hashes

Hashes for kubernetes_user-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 34748a5684fbb9b5ccc5ddaf935b8746d6e3dedf9f4e2352a4150feb762919aa
MD5 4533abe122a80019a68595a65558a27c
BLAKE2b-256 a3940a1249488ccb7105694430adec541411827f8d49ec95353f0cd8a0e39554

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page