gRPC 인증

gRPC 인증 (Authentication)

gRPC로 다른 시스템과 통신한다면, 상대가 진짜 내가 믿는 서버인지(서버 인증)와 통신 중 데이터가 안전한지(암호화)를 보장해야 해요. gRPC는 여러 인증 메커니즘을 지원하고, 필요하면 자체 인증 시스템을 끼워 넣을 수도 있어요.

출처: https://grpc.io/docs/guides/auth/

gRPC가 기본으로 제공하는 인증 메커니즘은 이래요.

  • SSL/TLS: 서버 인증과 클라이언트→서버 데이터 암호화에 TLS를 써요. 상호 인증(mTLS)을 위해 클라이언트가 인증서를 제공하는 옵션도 있어요.
  • ALTS: Compute Engine·GKE에서 실행 중이라면 전송 보안으로 ALTS를 쓸 수 있어요.
  • Google 토큰 기반 인증: Google API에 접근할 때 OAuth2 토큰을 획득해 붙이는 메커니즘이에요. 단, 이건 SSL/TLS와 함께 써야 해요 — Google은 TLS 없는 연결을 허용하지 않고, 대부분 언어 라이브러리도 암호화되지 않은 채널에 자격증명을 보내는 걸 막아요.

인증 API는 Credentials 객체를 중심으로 단순하게 설계돼 있어요. 자격증명은 두 종류가 있어요.

  • Channel credentials: Channel에 붙는 것(예: SSL 인증서).
  • Call credentials: 개별 호출(또는 C++의 ClientContext)에 붙는 것.

이 둘을 CompositeChannelCredentials로 합쳐서, 채널에는 SSL을, 각 호출에는 액세스 토큰을 넣는 식으로 활용할 수 있어요. OAuth2 토큰 기반 인증은 크게 세 단계예요. (1) 클라이언트에서 OAuth 토큰을 얻거나 생성하고, (2) 그 토큰으로 per-call 자격증명을 만들고(토큰은 보통 HTTP Authorization 헤더로 전달), (3) 서버 측 인터셉터에서 토큰을 검증해요.

기본 인증이 안 맞으면 MetadataCredentialsPlugin 같은 플러그인 API로 자신만의 자격증명을 끼울 수 있어요. 예를 들어 커스텀 헤더에 인증 티켓을 넣는 플러그인을 구현해 MetadataCredentialsFromPlugin으로 CallCredentials로 만들죠. 더 깊은 통합은 gRPC 코어 레벨에서 자격증명 구현을 교체하는 방식으로 가능해요.

더 알아보기