[스프링] 스프링 클라우드 게이트웨이의 보안 취약점 관리

스프링 클라우드 게이트웨이는 마이크로서비스 아키텍처에서 API 라우팅 및 보안을 제공하는 데 사용됩니다. 그러나 여러 보안 취약점이 존재할 수 있습니다.

1. 인가되지 않은 엔드포인트 접근

게이트웨이에서 인가되지 않은 사용자가 보호된 엔드포인트에 접근하려는 시도를 방지해야 합니다.

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    http.authorizeExchange()
        .pathMatchers("/protected/**").authenticated()
        .anyExchange().permitAll();
    return http.build();
}

2. 보안 헤더 누락

게이트웨이에서 보낼 응답에 보안 헤더가 누락되면 보안 취약점이 될 수 있습니다.

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    http.headers()
        .contentSecurityPolicy("script-src 'self'");
    return http.build();
}

3. 인가되지 않은 라우트

게이트웨이의 라우트가 인가되지 않은 사용자에게 공개되어 있으면 보안 문제가 될 수 있습니다.

spring:
  cloud:
    gateway:
      routes:
      - id: backend
        uri: http://backend:8080
        predicates:
        - Path=/api/**
        filters:
        - RewritePath=/api/(?<segment>.*), /$\{segment}

이러한 취약점을 방지하기 위해선 올바른 권한 부여 및 보안 정책을 적용하는 것이 중요합니다.

참고문헌: