opensearch를 배포해서 기본 인증을 사용하다 oidc연동을 하던 중 발견한 이슈.
gitea와 연동하고 있는데 이상하게 연결이 잘 되지 않는 문제 발견…
구성 상태
HAProxy(ssl-offloading) > Ingress > Opensearch-dashboard(Kubernetes-pod) > gitea(oidc) > OpenSearch (VM)
이슈사항
OpenSearch-Dashboard로그인을 하는데 gitea인증이 통과되었지만 계속해서 401에러 발생되는 상태.
브라우저에서는 401에러만 보여주고, gitea쪽은 정상 발급 로그가 나온다. OpenSearch 로그도 특별한건 없어보였으나 서버 재기동 로그부터 확인해보니 문제가 보였다.
이슈 원인
JVM truststore이 연결이 안되서 발생하는 문제였는데 opensearch로그를 최근 출력이아니고 서버 동작되었을때까지 확대해서 확인하니 원인을 알 수 있었다.
Error loading trust store from null
Empty file path for plugins.security.ssl.transport.truststore_filepath
let’s encrypt인증서라 ca등록을 안해도 된다고 생각하였는데 이부분이 연결이 안되면 동작을 하지 않음.
포함되어있는지 확인해보면
/usr/share/opensearch/jdk/bin/keytool -list -keystore /usr/share/opensearch/jdk/lib/security/cacerts \
-storepass changeit | grep -i "isrg"
아래와 같은 결과가 출력된다. 즉 ca를 갖고있다.

해결
truststore_filepath=null 이걸 사용하도록 해주려면?
opensearch.yml에 옵션들을 추가하여 활성한다.
cp /usr/share/opensearch/jdk/lib/security/cacerts /etc/opensearch/cacerts
chown opensearch:opensearch /etc/opensearch/cacerts
plugins.security.ssl.transport.truststore_filepath: /etc/opensearch/cacerts
plugins.security.ssl.transport.truststore_password: changeit
plugins.security.ssl.transport.truststore_type: JKS
plugins.security.ssl.http.truststore_filepath: /etc/opensearch/cacerts
plugins.security.ssl.http.truststore_password: changeit
plugins.security.ssl.http.truststore_type: JKS
/usr/share/opensearch/jdk/lib/security/cacerts 이경로를 지정하면 권한 오류가 발생하여 허용된 디렉토리에 복사하여 적용하였다.
Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "/usr/share/opensearch/jdk/lib/security/cacerts" "read")