운영 서버에서 스웨거를 닫게 설정해줬다.
간단하지만 기록
현재 상황
- 스프링 프로파일 prod인 운영 서버, dev인 개발 서버로 운영 중이며 두 개의 서버 모두 한 개의 통합 배포 파일로 CI/CD를 관리하고 있다.
우선 docker-compose.yml에 아래의 값을 추가해준다.
springserver:
environment:
- SPRING_PROFILES_ACTIVE=prod
해당 설정으로 인해, application.yml의 프로파일을 읽을 수 있다.
yml의 프로파일이 prod인 설정 파일만 읽고 배포를 실행한다.
그리고 SwaggerConfig에 Spring 어노테이션인 @Profile을 등록해서, 프로파일이 dev인 어플리케이션에만 해당되게 적용시킨다.
@Profile("dev")
public class SwaggerConfig {
...
}
그러고 배포하면 끝!
운영 서버에서의 스웨거는 막히는 것을 볼 수 있다.
이긴 하지만,
개발 서버의 url도 기본 말고 다르게 변경하고 싶었다.
springdoc:
swagger-ui:
path: /hidden-swagger # 숨긴 Swagger UI 경로
api-docs:
path: /hidden-api-docs # 숨긴 API Docs 경로
첫 번째로 yml 파일의 프로퍼티를 위와 같이 변경했다.
도메인/hidden-swagger로 접속하면 잘 된다.
그런데 문제는 기본 URL(/swagger-ui/index.html#/)도 접속이 여전히 된다..
url을 변경하고 싶었던 이유는 보안적인 측면이 가장 큰데,
이렇게 되면 의미가 없어진다.
그래서 nginx 설정을 바꿔 보기로 했다.
server {
listen 80;
server_name 개발 서버 도메인
# HTTP를 HTTPS로 리디렉션
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name 개발 서버 도메인
...
# Swagger UI 접근 제한
location /swagger-ui/ {
deny all; # 모든 IP에서 Swagger UI 접근을 차단
return 403;
}
# 기존 API Docs 접근 제한
location /v3/api-docs/ {
deny all; # 모든 IP에서 API Docs 접근을 차단
return 403;
}
# 새로운 Swagger UI 경로만 허용
location /hidden-swagger {
proxy_pass http://spring:8080; # Swagger UI가 동작하는 Spring 서버로 프록시
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 새로운 API Docs 경로만 허용
location /hidden-api-docs {
proxy_pass http://spring:8080; # API Docs가 동작하는 Spring 서버로 프록시
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Spring 서버로의 기본 프록시 설정
location / {
proxy_pass http://spring:8080;
...
}
}
위와 같이 기본 설정에서 접근 제한할 수 있게 변경 했는데,
이렇게 하면 기본 url은 403 forbidden이 뜬다. 정상적으로 작동하긴 하지만,
내가 설정한 /hidden-swagger 로 접속해도 똑같이 403 forbidden이 뜬다..
이유를 찾아보다가 발견했는데
내가 설정한 url로 접속하면, springdoc-openapi의 Swagger UI 설정에서 기본적으로 /swagger-ui/index.html로 리디렉션 되게 설정되어 있다고 한다.
해당 리다이렉트 자체를 만지지 않으면 방법이 없을 텐데, 그 방법은 아무리 찾아봐도 찾을 수 없어서..
우선 운영 서버의 스웨거는 차단했으니 조금 더 여유를 두고 찾아보려고 한다..!
'대충 넘어가지 않는 습관을 위한 기록' 카테고리의 다른 글
Slack Webhook을 활용한 자동화 레포트 전송 - Spring Boot (1) | 2025.03.12 |
---|---|
Java 15 - 멀티라인 문자열, 특수 이스케이프 문자 (0) | 2025.02.27 |
AWS 해킹 기록.. (0) | 2025.02.12 |
CloudFront 적용기 [AWS - S3] (0) | 2025.02.06 |
개발·운영 환경 분리 적용기 - GitHub Actions를 활용한 배포 자동화 (개선 과정 포함) (2) | 2025.02.06 |