MinIO 프록시/SSL 에러 해결

Jang Dong Ik·2025년 3월 6일
post-thumbnail

MinIO 도입

회사에서는 AWS 사용을 중단하고 사내 서버, 즉 온프레미스 환경에서 운영하라는 결정이 내려졌습니다.
평소 AWS S3를 활용해 왔지만, 이를 대체할 수 있는 오브젝트 스토리지 솔루션을 찾던 중 MinIO에 주목하게 되었습니다.
S3 API와도 호환되기 때문에 좋은 선택이라고 생각했습니다.


문제의 발단

운영 서버에 HTTPS 적용, 도메인 연결, 리버스 프록시를 도입하면서 문제가 발생하기 시작했습니다...

  • MinIO 서버에 연결 시 DNS가 외부 IP를 반환하며 연결 실패
  • 프록시 환경에서 MINIO로 전달되는 요청의 Signature가 불일치하여 403 에러 발생
  • SSL 인증서 파일의 심볼릭 링크 문제 및 파일 권한 문제로 MinIO 가 인증서를 읽지 못함

java.net.ConnectException


분명 내부 IP로 접근을 하여야 하는데도 불구하고 계속하여 공인 IP로 접근을 하고있었습니다. 도대체 나는 공인 IP를 설정하지 않았는데 왜 그렇게 접근하지...? 고민했습니다.
그러다가 아!!!! 호스트와 도커 컨테이너는 네트워크가 다를 수 있구나 생각이 들었고 docker exec -it bash 로 접근하여 네트워크를 확인하였는데 역시나 호스트와 네트워크 설정이 달랐습니다.
따라서 docker-compose 파일 자체를 수정하여서 도메인이 내부 IP를 가리키도록 수정하였습니다.
extra_hosts를 설정하여 주었습니다.


SignatureDoesNotMatch 에러

네트워크 설정을 수정했다고 생각하여 이미지를 다시 업로드했는데 SignatureDoesNotMatch 오류가 발생하였습니다. 시크릿 키는 올바르게 설정되었고 9001 포트로 UI에 접속했을 때는 정상 동작하는 것을 확인했음에도 불구하고 계속해서 에러가 발생했습니다.

흐름을 파악해보니 Nginx가 요청을 전달하면서 Host 헤더, URI, 쿼리 파라미터를 변경하는 것이 아닐까 싶어서 MinIO에 직접 접속할 수 있도록 해야겠다 싶었습니다.


SSL 인증서 파일 심볼릭 링크 및 권한 문제


MinIO에 SSL 인증서를 직접 적용시켜야 하는구나를 알게되었습니다. 당연히 머릿속에서 나온 것은 아니고 구글링을 하여 알게되었습니다.


https://min.io/docs/minio/linux/integrations/generate-lets-encrypt-certificate-using-certbot-for-minio.html

MinIO 공식사이트에서 해답을 찾을 수 있었습니다. 그런데 이미 certificate는 되어있는데 어떻게 해야하는 거지 파악을 하니까 아래처럼 직접 public.crt, private.key를 cp하면 되었습니다.

sudo systemctl daemon-reload
sudo systemctl start minio
sudo systemctl enable minio

위와 같이 명령을 치는데 또 에러가 발생하는 겁니다. 엥? 파일을 왜 못찾지 했는데 ll로 권한을 확인하니까 root로 되어 있는 것을 확인하고 chown으로 권한을 변경하였습니다.

그러자,,, 드디어 해결이 되었습니다.....
말로 풀어내니까 금방이지만 오류를 해결하는데 하루가 걸렸습니다

0개의 댓글