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

Authorization of Service Mesh through Envoy

Envoy-authzは、casbinを通じて外部RBACおよびABAC認証を実行するEnvoyのミドルウェアです。 このミドルウェアは、gRPCサーバーを介してEnvoyの外部認証APIを使用します。 このプロキシは、Istioなどの任意のタイプのEnvoyベースのサービスメッシュにデプロイできます。

要件

  • Envoy 1.17+
  • Istioまたは他のタイプのサービスメッシュ
  • grpcの依存関係

依存関係はgo.modを使用して管理されます。

ミドルウェアの動作

  • クライアントがHTTPリクエストを行います。
  • EnvoyプロキシはリクエストをgRPCサーバーに送信します。
  • gRPCサーバーは、casbinポリシーに基づいてリクエストを認証します。
  • 認証されると、リクエストは転送されます。それ以外の場合は拒否されます。

gRPCサーバーは、Envoyのexternal_auth.protoからのプロトコルバッファに基づいています。

// A generic interface for performing authorization checks on incoming
// requests to a networked service.
service Authorization {
// Performs an authorization check based on the attributes associated with the
// incoming request and returns a status of `OK` or not `OK`.
rpc Check(v2.CheckRequest) returns (v2.CheckResponse);
}

上記のprotoファイルから、認証サーバーでCheck()サービスを使用する必要があります。

使用法

  • このガイドに従って設定ファイルにCasbinポリシーを定義します。

オンラインのcasbin-editorを使用してポリシーを確認/テストできます。

  • 次のコマンドを実行して認証サーバーを起動します:
go build .
./authz
  • Envoyの設定をロードします:
envoy -c authz.yaml -l info

Envoyが起動すると、認証プロセスのためのリクエストをインターセプトします。

Istioとの統合

このミドルウェアを動作させるには、JWTトークンまたはヘッダーにユーザー名を含むカスタムヘッダーを送信する必要があります。 Request Headersの変更については、公式のIstio documentationを参照してください。