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を参照してください。