メインコンテンツにスキップ

Authorization of Kubernetes

K8s-authzは、Casbinに基づくKubernetes(k8s)の認証ミドルウェアで、ポリシーの強制にRBAC(ロールベースのアクセス制御)およびABAC(属性ベースのアクセス制御)を利用します。 このミドルウェアは、K8sの検証入場ウェブフックと統合し、Casbinで定義されたポリシーをK8sリソースへの各リクエストに対して検証します。 カスタム入場コントローラーは、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.goマニフェストの証明書ディレクトリに更新する必要があります。

これで、サーバーは起動し、K8sリソースへのリクエストの検証とポリシーの強制を行う準備が整いました。