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 문서를 참조할 수 있습니다.