기본적으로 npm에서 전역 패키지를 설치하려면 시스템 전체에 영향을 미치기 때문에 root(관리자) 권한이 필요합니다. 그래서 보통 sudo npm install -g 패키지명처럼 sudo를 붙여야 했죠. 그런데 sudo 없이 패키지를 설치하고 싶거나, 시스템 파일을 건드리지 않고 내 사용자 환경에서만 쓰고 싶을 때 이 방법을 씁니다. 또한, 전역 설치를 위해 sudo를 남발하면, npm이 의도치 않게 시스템 파일까지 수정할 위험이 있습니다. 내 홈 폴더(~/.npm-global)에서만 전역 설치가 이뤄지도록 하면, 시스템 파일을 건드릴 일이 없어서 훨씬 안전하겠죠?
다음 예시에서는 username이 있는 기본 사용자의 암호를 자동 생성된 값으로 재설정하고 콘솔에 새 암호를 인쇄합니다. 지정된 URL은 elasticsearch-reset-password 도구가 로컬 Elasticsearch 노드에 연결하려고 시도하는 위치를 나타냅니다.
이후에 해당 docker compose를 restart 해줍니다. docker compose restart
2. Elasticsearch 보안 설정 점검
Elasticsearch에서 X-Pack Security가 활성화되어 있는지 확인하고, 필요하면 일시적으로 비활성화하여 테스트합니다.
보안 설정 확인: Elasticsearch의 설정 파일(예: elasticsearch.yml) 또는 docker-compose.yml에서 보안 설정을 확인하세요. 기본적으로 7.10.0 이상에서는 보안이 활성화되어 있습니다. docker-compose.yml에서 다음이 설정되어 있는지 확인:
오류가 사라지면 인증 문제가 원인입니다. 주의: 프로덕션 환경에서는 보안을 비활성화하지 마세요. 대신 올바른 자격 증명을 설정하세요.
이후에 logstash 에서 아래와 같은 오류가 또 발생 - 403에러
비밀번호를 바꿔줬는데도 뭔가 에러가 계속 발생하고 있었는데, 이번엔 좀 다른 종류의 에러였습니다. (아래)
[2025-04-17T04:07:20,233][WARN ][logstash.outputs.elasticsearch][main] Health check failed {:code=>403, :url=>http://elasticsearch:9200/, :message=>"Got response code '403' contacting Elasticsearch at URL 'http://elasticsearch:9200/'"} [2025-04-17T04:07:20,304][WARN ][logstash.outputs.elasticsearch][main] Elasticsearch main endpoint returns 403 {:message=>"Got response code '403' contacting Elasticsearch at URL 'http://elasticsearch:9200/'", :body=>"{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"action [cluster:monitor/main] is unauthorized for user [logstash_internal] with effective roles [] (assigned roles [logstash_writer] were not found), this action is granted by the cluster privileges [monitor,manage,all]\"}],\"type\":\"security_exception\",\"reason\":\"action [cluster:monitor/main] is unauthorized for user [logstash_internal] with effective roles [] (assigned roles [logstash_writer] were not found), this action is granted by the cluster privileges [monitor,manage,all]\"},\"status\":403}"}
위 에러를 요약하자면 HTTP 403 Forbidden 응답 코드로 인해 Elasticsearch에 접근할 수 없는 문제라는 내용입니다. 구체적으로, logstash_internal 사용자가 cluster:monitor/main 액션을 수행할 권한이 없으며, 할당된 역할(logstash_writer)이 Elasticsearch에서 인식되지 않는다는 메시지가 나타납니다.
오류 원인
로그를 분석해보면 다음과 같은 주요 원인을 확인할 수 있습니다:
권한 부족 (HTTP 403 Forbidden)
logstash_internal 사용자가 Elasticsearch에서 필요한 작업(cluster:monitor/main)을 수행할 권한이 없습니다.
역할 설정 문제
logstash_writer 역할이 logstash_internal 사용자에게 할당되었지만, Elasticsearch에서 이 역할이 정의되지 않았거나 찾을 수 없습니다.
보안 설정 오류
Elasticsearch에서 X-Pack Security가 활성화된 상태에서 사용자와 역할이 올바르게 구성되지 않았을 가능성이 있습니다.
해결 방법
1. Elasticsearch에서 사용자와 역할 확인
먼저, logstash_internal 사용자와 logstash_writer 역할이 Elasticsearch에 제대로 설정되어 있는지 확인합니다.
Elasticsearch 컨테이너에 접속:
docker exec -it elasticsearch bash
사용자 역할 확인:
bin/elasticsearch-users roles logstash_internal
출력 결과에 logstash_writer 역할이 포함되어 있는지 확인하세요.
역할 정의 확인:
bin/elasticsearch-roles list logstash_writer
logstash_writer 역할이 존재하지 않거나, 필요한 권한(monitor, manage_index_templates, write 등)이 누락되었는지 확인합니다.
제 경우, bin/elasticsearch-roles list 에서 사용자가 아무것도 나타나지 않았습니다.
그래서 kibana web console로 접속(http://kibana:5601/app/dev_tools#/console/shell) 한 뒤에 아래 3개의 POST 명령을 각각 실행해줬습니다.