주요 콘텐츠로 건너뛰기

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