주요 콘텐츠로 건너뛰기

Authorization of Kubernetes

K8s-authz는 Casbin을 기반으로 한 Kubernetes (k8s) 인증 미들웨어로, 정책 강제를 위해 RBAC (역할 기반 접근 제어) 및 ABAC (속성 기반 접근 제어)를 활용합니다. 이 미들웨어는 K8s 유효성 검사 입장 웹훅과 통합하여 Casbin에서 정의한 각 요청에 대한 정책을 검증합니다. 사용자 정의 입장 컨트롤러는 ValidatingAdmissionWebhook을 사용하여 Kubernetes에 등록되며, API 서버에 의해 전달된 요청 객체에 대한 유효성 검사를 수행하고 요청이 허용되어야 하는지 거부되어야 하는지를 나타내는 응답을 제공합니다.

입장 컨트롤러에게 언제 들어오는 요청을 보낼지 결정하기 위해 유효성 검사 웹훅이 구현되었습니다. 이 웹훅은 K8s 리소스 또는 하위 리소스의 모든 유형의 요청을 프록시하고 정책 검증을 수행합니다. 사용자는 Casbin 강제자에 의해 인증된 경우에만 이러한 리소스에 대한 작업을 수행할 수 있습니다. 강제자는 정책에 정의된 사용자의 역할을 확인합니다. K8s 클러스터는 이 미들웨어의 배포 대상입니다.

요구 사항

진행하기 전에 다음을 보유하고 있는지 확인하십시오:

  • 실행 중인 Kubernetes 클러스터. Docker를 사용하여 로컬 클러스터를 설정하거나 서버에서 완전한 Kubernetes 생태계를 설정할 수 있습니다. 자세한 지침은 Windows에서 로컬 Kubernetes 클러스터를 설정하기 위한 이 가이드 또는 Linux에서 클러스터를 설정하기 위한 이 가이드를 참조하십시오.
  • Kubectl CLI. Windows에서 Kubectl을 설치하는 방법은 여기에서, Linux에서는 여기에서 찾을 수 있습니다.
  • OpenSSL

사용법

K8s-authz를 사용하려면 다음 단계를 따르십시오:

  1. OpenSSL을 사용하여 각 사용자에 대한 인증서와 키를 생성합니다. 아래의 스크립트를 실행하십시오:

    ./gen_cert.sh
  2. 다음 명령을 실행하여 Dockerfile에서 수동으로 Docker 이미지를 빌드합니다. 명령과 배포 파일에서 빌드 버전을 변경하는 것을 잊지 마십시오.

    docker build -t casbin/k8s_authz:0.1 .
  3. model.confpolicy.csv 파일에서 Casbin 정책을 정의합니다. 이러한 정책이 어떻게 작동하는지에 대한 자세한 정보는 문서를 참조하십시오.

  4. 배포하기 전에, 특정 요구 사항에 따라 main.go 파일과 유효성 검사 웹훅 구성 파일에서 포트를 수정할 수 있습니다.

  5. 다음 명령을 실행하여 Kubernetes 클러스터에 유효성 검사 컨트롤러와 웹훅을 배포합니다:

    kubectl apply -f deployment.yaml
  6. 프로덕션 서버의 경우, 인증서를 보호하기 위해 Kubernetes secret을 생성하는 것이 권장됩니다:

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. 위의 단계를 모두 완료한 후, 생성된 secret의 디렉토리와 함께 main.gomanifests의 인증서 디렉토리를 업데이트해야 합니다.

이제 서버는 실행 중이며, K8s 리소스에 대한 요청을 검증하고 정책을 강제하는 데 준비가 되어 있어야 합니다.