이 문서는 SSM 포트 포워딩 터널을 사용하여 로컬 MySQL Workbench에서 프라이빗 Amazon RDS 인스턴스에 접속하려 할 때 발생한 일련의 복합적인 오류들을 진단하고 해결한 과정을 단계별로 설명합니다.
1. 문제 상황
SSM 포트 포워딩 터널이 성공적으로 개통된 상태에서 로컬 MySQL Workbench를 통해 프라이빗 RDS 인스턴스에 접속을 시도했으나, 사용자 계정에 따라 다음 두 가지 오류 중 하나가 발생했습니다.
admin 사용자 계정 사용 시 오류: Plugin 'mysql_native_password' is not loaded
workbench_user 사용자 계정 사용 시 오류: Access denied for user 'workbench_user'@'localhost' (using password: YES)
중요한 점은, 동일한 자격 증명으로 같은 VPC 내 EC2 터미널에서 RDS에 접속하는 것은 성공적이었다는 것입니다. 문제는 로컬 PC(Mac)에서 SSM 터널을 경유하여 접속할 때만 발생했습니다.
2. 원인 분석 및 해결 과정
문제 해결을 위해 여러 가설을 세우고 다양한 시도를 했습니다.
시도 1: admin 사용자의 Plugin not loaded 오류 해결 (인증 방식 변경)
- 가설: 초기
admin 사용자에게 발생한 Plugin 'mysql_native_password' is not loaded 오류는 MySQL Workbench가 RDS에서 사용하는 비밀번호 인증 방식과 호환되지 않아 발생하는 문제로 판단했습니다. MySQL 8.0부터 기본 인증 방식이 caching_sha2_password로 변경되었고, Workbench가 구형 방식(mysql_native_password)을 시도하다 실패했을 가능성을 염두에 두었습니다.
- 해결 시도:
- EC2 터미널을 통해 RDS에
admin 사용자로 접속했습니다.
admin 사용자의 인증 방식을 널리 호환되는 mysql_native_password로 변경하는 SQL 명령어를 실행했습니다.
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'Your_RDS_Password';
FLUSH PRIVILEGES;
- 결과: 변경 후 MySQL Workbench에서 재접속을 시도했으나, 여전히 동일한 오류 (
Plugin 'mysql_native_password' is not loaded)가 발생했습니다.
시도 2: MySQL Workbench 클라이언트 캐시 삭제
- 가설: 서버 측 인증 방식을 변경했음에도 문제가 지속되는 것으로 보아, MySQL Workbench 클라이언트 자체의 캐시 문제일 가능성을 의심했습니다. Workbench가
admin 사용자에 대한 이전 접속 실패 기록이나 인증 방식 설정을 계속 기억하고 있어, 서버 측 변경 사항을 인지하지 못하는 상황을 가정했습니다.
- 해결 시도:
- MySQL Workbench를 완전히 종료했습니다.
- 운영체제별로 Workbench의 접속 정보 파일(
connections.xml, wb_options.xml)과 저장된 비밀번호(macOS의 키체인 접근, Windows의 자격 증명 관리자)를 모두 삭제하여 클라이언트 캐시를 완전히 초기화했습니다.
- Workbench를 다시 실행하고 새 커넥션을 만들어
admin 사용자로 재접속을 시도했습니다.
- 결과: 캐시를 모두 삭제하고 새로운 상태에서 접속을 시도했음에도 여전히 동일한 오류 (
Plugin 'mysql_native_password' is not loaded)가 발생했습니다.
시도 3: 새로운 workbench_user 생성 및 권한 부여
- 가설: 클라이언트 캐시 문제도 아니라면,
admin 사용자 계정 자체의 설정이 꼬였거나 클라이언트 호환성 문제를 일으킬 수 있다고 판단했습니다. 가장 확실한 방법으로 admin 계정 문제를 우회하고자 원격 접속 전용의 '새로운 사용자'(workbench_user)를 생성하기로 했습니다.
- 해결 시도:
- EC2 터미널을 통해 RDS에
admin 사용자로 접속했습니다.
workbench_user를 mysql_native_password 인증 방식으로 생성하고, 특정 데이터베이스에 대한 모든 권한을 부여했습니다.
CREATE USER 'workbench_user'@'%' IDENTIFIED WITH mysql_native_password BY 'Your_New_Password';
GRANT ALL PRIVILEGES ON `<DB명>`.* TO 'workbench_user'@'%';
FLUSH PRIVILEGES;
- MySQL Workbench에서 새로운
workbench_user 정보로 커넥션을 생성하여 접속을 시도했습니다.
- 결과:
Plugin 'mysql_native_password' is not loaded 오류는 사라졌지만, Access denied for user 'workbench_user'@'localhost' 오류가 발생했습니다. EC2 터미널에서는 동일한 workbench_user로 접속이 성공했음에도 불구하고 로컬 PC에서만 접속이 거부되는 현상이 나타났습니다.
시도 4: MySQL Workbench 버전 다운그레이드
- 가설: 모든 서버 측 설정과 새 사용자 생성에도 불구하고
Access denied 오류가 지속되는 점, 그리고 EC2 터미널에서는 접속이 되는 점을 미루어 볼 때, MySQL Workbench 클라이언트 자체의 버그일 수 있다는 의심을 했습니다. 조사 결과, MySQL Workbench 8.0.40 및 8.0.41 버전에서 유사한 오류가 보고된Known Issue가 있음을 확인했습니다.
- 해결 시도:
- 기존 MySQL Workbench를 완전히 제거했습니다.
- MySQL 공식 아카이브에서 문제 해결 사례가 보고된 이전 버전인 8.0.38을 다운로드하여 설치했습니다.
- SSM 터널을 다시 열고, 새로 설치한 Workbench에서
workbench_user로 재접속을 시도했습니다.
- 결과: MySQL Workbench 버전을 다운그레이드했음에도 불구하고, 여전히
Access denied for user 'workbench_user'@'localhost' (또는 Plugin 'mysql_native_password' is not loaded) 오류가 발생했습니다. EC2 터미널에서의 성공과 대비되는 로컬 PC에서의 지속적인 실패는 문제의 원인이 MySQL 사용자 설정이나 Workbench 버전이 아닌, 내 PC 환경과 SSM 터널링 간의 충돌일 가능성이 매우 높다는 결론에 도달하게 했습니다.
최종 발견: 로컬 MySQL 서버의 3306 포트 점유
- 심층 진단:
netstat 명령어 등을 통해 로컬 PC의 네트워크 상태를 확인한 결과, 내 Mac에 이미 로컬 MySQL 서버가 실행 중이며 3306번 포트를 점유하고 있었다는 사실을 발견했습니다.
- 원인 분석:
- 포트 점유와 연결 우선순위:
aws ssm start-session 명령어로 localPortNumber: 3306을 지정하여 SSM 터널을 열었음에도 불구하고, 로컬 MySQL 서버가 이미 3306 포트를 LISTEN 중이었기 때문에, MySQL 클라이언트(CLI, Workbench)가 127.0.0.1:3306으로 접속을 시도하면 SSM 터널을 통해 RDS로 가는 것이 아니라 로컬 Mac에 설치된 MySQL 서버로 연결되었습니다.
근거: [StackOverflow - another mysqld server running on port 3306 error](https://stackoverflow.com/questions/9918062/another-mysqld-server-running-on-port-3306-error)
- 각 오류의 진짜 의미:
admin 계정에서 Plugin 'mysql_native_password' is not loaded 오류가 발생했던 이유: 로컬 MySQL 서버가 mysql_native_password 플러그인이 비활성화된 최신 버전(예: 8.4 이상)이었기 때문입니다. 접속 요청이 RDS가 아닌 로컬 서버로 전달되었고, 로컬 서버가 해당 플러그인이 없다고 응답한 것입니다.
workbench_user에서 Access denied 오류가 발생했던 이유: workbench_user는 오직 RDS 서버에만 존재하고, 로컬 MySQL 서버에는 존재하지 않는 사용자였기 때문에, 로컬 서버가 접속을 거부한 것입니다.
- 결국, 서로 달라 보였던 두 가지 오류는 모두 **"잘못된 서버(로컬 MySQL)에 접속하고 있었다"**는 단 하나의 근본 원인에서 비롯된 것이었습니다.
3. 최종 해결책
문제의 근원인 로컬 MySQL 서버의 포트 점유를 해제하는 것이 최종 해결책이었습니다.
Step 1: 로컬 MySQL 서버 중지
- 로컬 MySQL 프로세스 확인:
출력 결과에
mysqld와 같은 프로세스가 있다면 실행 중이라는 의미입니다.
- 로컬 MySQL 서버 중지: (Homebrew로 설치한 경우)
또는 프로세스 직접 종료:
sudo pkill mysql
sudo pkill mysqld
- 중지 여부 확인:
아무것도 출력되지 않아야 정상입니다.
Step 2: SSM 터널 재시작
로컬 MySQL이 완전히 중지되었음을 확인한 후, 기존 SSM 포트 포워딩 세션을 다시 시작합니다.
aws ssm start-session \
--target <애플리케이션_EC2_인스턴스_ID> \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["<RDS_엔드포인트>"],"portNumber":["3306"],"localPortNumber":["3306"]}'
터미널에 다음과 같은 성공 메시지가 나타나며 터널이 개통됩니다.
Port 3306 opened for sessionId my-pc-admin-xxxxxxxx.
Waiting for connections...
Step 3: MySQL Workbench에서 최종 연결 확인
SSM 터널이 열려있는 상태에서 MySQL Workbench나 터미널에서 127.0.0.1:3306으로 접속을 시도합니다.
mysql -h 127.0.0.1 -P 3306 -u workbench_user -D <DB명> -p
접속 시도 시 SSM 터널을 열어둔 터미널에 다음과 같은 메시지가 나타나며 성공적으로 연결됩니다.
Connection accepted for session [my-pc-admin-xxxxxxxx]
이제 아무런 오류 없이 성공적으로 RDS 데이터베이스에 연결되는 것을 확인할 수 있습니다.
4. 핵심 요약
- SSM 포트 포워딩을 사용할 때
localPortNumber가 로컬 PC에서 이미 다른 서비스(예: 로컬 MySQL 서버)에 의해 점유되어 있지 않은지 반드시 확인해야 한다.
- 로컬 포트가 점유되어 있으면, 클라이언트는 SSM 터널이 아닌 로컬 서비스에 연결되어 예상치 못한
Access denied 또는 Plugin not loaded 오류를 발생시킬 수 있다.
- 문제 해결 과정에서 여러 가설을 세우고 검증하는 것이 중요하며, 때로는 가장 단순한 원인이 가장 찾기 어려운 문제일 수 있다.
- 보안 모범 사례:
admin 계정 대신 최소 권한의 원칙에 따라 workbench_user와 같은 전용 계정을 사용하는 것이 바람직하다. admin 계정은 비상시에만 사용하고, 일상적인 DB 접속에는 최소한의 권한을 가진 계정을 사용해야 한다.
이 문서는 SSM 포트 포워딩 터널을 사용하여 로컬 MySQL Workbench에서 프라이빗 Amazon RDS 인스턴스에 접속하려 할 때 발생한 일련의 복합적인 오류들을 진단하고 해결한 과정을 단계별로 설명합니다.
1. 문제 상황
SSM 포트 포워딩 터널이 성공적으로 개통된 상태에서 로컬 MySQL Workbench를 통해 프라이빗 RDS 인스턴스에 접속을 시도했으나, 사용자 계정에 따라 다음 두 가지 오류 중 하나가 발생했습니다.
admin사용자 계정 사용 시 오류:Plugin 'mysql_native_password' is not loadedworkbench_user사용자 계정 사용 시 오류:Access denied for user 'workbench_user'@'localhost' (using password: YES)중요한 점은, 동일한 자격 증명으로 같은 VPC 내 EC2 터미널에서 RDS에 접속하는 것은 성공적이었다는 것입니다. 문제는 로컬 PC(Mac)에서 SSM 터널을 경유하여 접속할 때만 발생했습니다.
2. 원인 분석 및 해결 과정
문제 해결을 위해 여러 가설을 세우고 다양한 시도를 했습니다.
시도 1:
admin사용자의Plugin not loaded오류 해결 (인증 방식 변경)admin사용자에게 발생한Plugin 'mysql_native_password' is not loaded오류는 MySQL Workbench가 RDS에서 사용하는 비밀번호 인증 방식과 호환되지 않아 발생하는 문제로 판단했습니다. MySQL 8.0부터 기본 인증 방식이caching_sha2_password로 변경되었고, Workbench가 구형 방식(mysql_native_password)을 시도하다 실패했을 가능성을 염두에 두었습니다.admin사용자로 접속했습니다.admin사용자의 인증 방식을 널리 호환되는mysql_native_password로 변경하는 SQL 명령어를 실행했습니다.Plugin 'mysql_native_password' is not loaded)가 발생했습니다.시도 2: MySQL Workbench 클라이언트 캐시 삭제
admin사용자에 대한 이전 접속 실패 기록이나 인증 방식 설정을 계속 기억하고 있어, 서버 측 변경 사항을 인지하지 못하는 상황을 가정했습니다.connections.xml,wb_options.xml)과 저장된 비밀번호(macOS의 키체인 접근, Windows의 자격 증명 관리자)를 모두 삭제하여 클라이언트 캐시를 완전히 초기화했습니다.admin사용자로 재접속을 시도했습니다.Plugin 'mysql_native_password' is not loaded)가 발생했습니다.시도 3: 새로운
workbench_user생성 및 권한 부여admin사용자 계정 자체의 설정이 꼬였거나 클라이언트 호환성 문제를 일으킬 수 있다고 판단했습니다. 가장 확실한 방법으로admin계정 문제를 우회하고자 원격 접속 전용의 '새로운 사용자'(workbench_user)를 생성하기로 했습니다.admin사용자로 접속했습니다.workbench_user를mysql_native_password인증 방식으로 생성하고, 특정 데이터베이스에 대한 모든 권한을 부여했습니다.workbench_user정보로 커넥션을 생성하여 접속을 시도했습니다.Plugin 'mysql_native_password' is not loaded오류는 사라졌지만,Access denied for user 'workbench_user'@'localhost'오류가 발생했습니다. EC2 터미널에서는 동일한workbench_user로 접속이 성공했음에도 불구하고 로컬 PC에서만 접속이 거부되는 현상이 나타났습니다.시도 4: MySQL Workbench 버전 다운그레이드
Access denied오류가 지속되는 점, 그리고 EC2 터미널에서는 접속이 되는 점을 미루어 볼 때, MySQL Workbench 클라이언트 자체의 버그일 수 있다는 의심을 했습니다. 조사 결과, MySQL Workbench 8.0.40 및 8.0.41 버전에서 유사한 오류가 보고된Known Issue가 있음을 확인했습니다.workbench_user로 재접속을 시도했습니다.Access denied for user 'workbench_user'@'localhost'(또는Plugin 'mysql_native_password' is not loaded) 오류가 발생했습니다. EC2 터미널에서의 성공과 대비되는 로컬 PC에서의 지속적인 실패는 문제의 원인이 MySQL 사용자 설정이나 Workbench 버전이 아닌, 내 PC 환경과 SSM 터널링 간의 충돌일 가능성이 매우 높다는 결론에 도달하게 했습니다.최종 발견: 로컬 MySQL 서버의 3306 포트 점유
netstat명령어 등을 통해 로컬 PC의 네트워크 상태를 확인한 결과, 내 Mac에 이미 로컬 MySQL 서버가 실행 중이며3306번 포트를 점유하고 있었다는 사실을 발견했습니다.aws ssm start-session명령어로localPortNumber: 3306을 지정하여 SSM 터널을 열었음에도 불구하고, 로컬 MySQL 서버가 이미 3306 포트를LISTEN중이었기 때문에, MySQL 클라이언트(CLI, Workbench)가127.0.0.1:3306으로 접속을 시도하면 SSM 터널을 통해 RDS로 가는 것이 아니라 로컬 Mac에 설치된 MySQL 서버로 연결되었습니다.admin계정에서Plugin 'mysql_native_password' is not loaded오류가 발생했던 이유: 로컬 MySQL 서버가mysql_native_password플러그인이 비활성화된 최신 버전(예: 8.4 이상)이었기 때문입니다. 접속 요청이 RDS가 아닌 로컬 서버로 전달되었고, 로컬 서버가 해당 플러그인이 없다고 응답한 것입니다.workbench_user에서Access denied오류가 발생했던 이유:workbench_user는 오직 RDS 서버에만 존재하고, 로컬 MySQL 서버에는 존재하지 않는 사용자였기 때문에, 로컬 서버가 접속을 거부한 것입니다.3. 최종 해결책
문제의 근원인 로컬 MySQL 서버의 포트 점유를 해제하는 것이 최종 해결책이었습니다.
Step 1: 로컬 MySQL 서버 중지
mysqld와 같은 프로세스가 있다면 실행 중이라는 의미입니다.Step 2: SSM 터널 재시작
로컬 MySQL이 완전히 중지되었음을 확인한 후, 기존 SSM 포트 포워딩 세션을 다시 시작합니다.
aws ssm start-session \ --target <애플리케이션_EC2_인스턴스_ID> \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ --parameters '{"host":["<RDS_엔드포인트>"],"portNumber":["3306"],"localPortNumber":["3306"]}'터미널에 다음과 같은 성공 메시지가 나타나며 터널이 개통됩니다.
Step 3: MySQL Workbench에서 최종 연결 확인
SSM 터널이 열려있는 상태에서 MySQL Workbench나 터미널에서
127.0.0.1:3306으로 접속을 시도합니다.접속 시도 시 SSM 터널을 열어둔 터미널에 다음과 같은 메시지가 나타나며 성공적으로 연결됩니다.
이제 아무런 오류 없이 성공적으로 RDS 데이터베이스에 연결되는 것을 확인할 수 있습니다.
4. 핵심 요약
localPortNumber가 로컬 PC에서 이미 다른 서비스(예: 로컬 MySQL 서버)에 의해 점유되어 있지 않은지 반드시 확인해야 한다.Access denied또는Plugin not loaded오류를 발생시킬 수 있다.admin계정 대신 최소 권한의 원칙에 따라workbench_user와 같은 전용 계정을 사용하는 것이 바람직하다.admin계정은 비상시에만 사용하고, 일상적인 DB 접속에는 최소한의 권한을 가진 계정을 사용해야 한다.