MariaDB에서 원격 접속을 허용하고 암호화 통신을 적용하려면 SQL Proxy를 사용하여 TLS/SSL을 설정해야 합니다.
아래는 MariaDB 서버와 SQL Proxy를 구성하는 단계입니다.
MariaDB SSL/TLS 구성
- 인증서 및 키 생성
이 명령을 실행하면 개인 키와 인증서 요청 파일이 생성됩니다.openssl req -newkey rsa:2048 -nodes -keyout /etc/mysql/server-key.pem -out /etc/mysql/server-req.pem
- 인증서 서명
이 명령을 실행하여 서버 인증서를 서명합니다.openssl x509 -req -in /etc/mysql/server-req.pem -days 365 -CA /etc/mysql/ca-cert.pem -CAkey /etc/mysql/ca-key.pem -set_serial 01 -out /etc/mysql/server-cert.pem
- 파일 권한 설정
chmod 600 /etc/mysql/server-key.pem chmod 600 /etc/mysql/server-cert.pem
- MariaDB 설정 파일 (
my.cnf
) 편집
MariaDB 설정 파일 (my.cnf
)을 열고 다음 라인을 추가합니다.[mysqld] ssl-ca=/etc/mysql/ca-cert.pem ssl-cert=/etc/mysql/server-cert.pem ssl-key=/etc/mysql/server-key.pem
- MariaDB 재시작
systemctl restart mariadb
MariaDB에서 SSL/TLS를 활성화하고 인증서를 생성하고 구성해야 합니다. 다음은 이를 수행하는 단계입니다.
SQL Proxy 설치 및 구성
- SQL Proxy 설치
SQL Proxy를 공식 웹사이트에서 다운로드하고 설치합니다.
SQL Proxy는 MariaDB 서버와 클라이언트 사이에서 중계 역할을 수행합니다. 이를 설치하고 구성해야 합니다. - SQL Proxy 구성 파일 생성
SQL Proxy를 구성하는 파일을 생성합니다. 예를 들어,proxy-config.yaml
라는 파일을 만들 수 있습니다.instance: mydbproxy listener: listen: 127.0.0.1:3307 protocol: tcp destinations: - name: mydb target: <Your_MariaDB_Server_IP>:3306
<Your_MariaDB_Server_IP>
부분을 실제 MariaDB 서버의 IP 주소로 바꿉니다. - SQL Proxy 실행
SQL Proxy를 구성 파일과 함께 실행합니다../cloudsql-proxy -instances=<Your_Instance_Connection_Name>=tcp:127.0.0.1:3307 -credential_file=<Path_to_Service_Account_Key_File> -config=<Path_to_proxy-config.yaml>
<Your_Instance_Connection_Name>
: MariaDB 인스턴스 연결 이름<Path_to_Service_Account_Key_File>
: 서비스 계정 키 파일 경로<Path_to_proxy-config.yaml>
: SQL Proxy 구성 파일 경로
클라이언트에서 SQL Proxy에 연결
- 클라이언트는 SQL Proxy가 실행 중인 로컬 호스트 및 포트(예: 127.0.0.1:3307)로 연결하여 MariaDB에 접속합니다.
- 이 연결은 SSL/TLS를 통해 암호화됩니다.
이제 MariaDB와 SQL Proxy를 통해 원격 클라이언트가 암호화된 통신을 할 수 있습니다. 위의 단계를 따라가면서 MariaDB 서버와 SQL Proxy를 구성하고, 클라이언트를 SQL Proxy에 연결하는 방법을 자세히 알 수 있습니다.
SQL Proxy를 Docker 컨테이너로 구성하는 방법
- Docker 이미지 가져오기
Google Cloud SQL Proxy Docker 이미지를 Docker Hub에서 가져옵니다.docker pull gcr.io/cloudsql-docker/gce-proxy:1.27
- 서비스 계정 키 생성 및 JSON 파일로 다운로드
Google Cloud SQL Proxy를 실행하는 데 필요한 서비스 계정 키를 생성하고 JSON 파일로 다운로드합니다. Google Cloud Console에서 서비스 계정을 만들고 적절한 권한을 부여한 다음 JSON 키를 생성하세요. - Docker 컨테이너 실행
서비스 계정 키를 마운트하여 Docker 컨테이너를 실행합니다. 또한 SQL Proxy를 실행하는 명령어를 컨테이너에 전달합니다.docker run -d --name sqlproxy \ -v /path/to/your/service-account-key.json:/config.json \ gcr.io/cloudsql-docker/gce-proxy:1.27 /cloud_sql_proxy \ -instances=<Your_Instance_Connection_Name>=tcp:0.0.0.0:3307 \ -credential_file=/config.json
/path/to/your/service-account-key.json
: 서비스 계정 키 JSON 파일의 경로로 대체하세요.<Your_Instance_Connection_Name>
: MariaDB 인스턴스 연결 이름으로 대체하세요.
- Docker 컨테이너 점검
Docker 컨테이너가 정상적으로 실행 중인지 확인합니다.
컨테이너가 작동 중이어야 합니다.docker ps
- MariaDB 클라이언트 구성 및 연결
이제 SQL Proxy가 실행 중인 Docker 컨테이너를 통해 MariaDB에 연결할 수 있습니다. MariaDB 클라이언트를 사용하여 다음과 같이 연결합니다.mysql -h 127.0.0.1 -P 3307 -u <Your_DB_User> -p
<Your_DB_User>
: MariaDB 데이터베이스 사용자 이름으로 대체하세요.
ProxySQL를 백엔드용 SSL 구성
- SSL은 ProxySQL v1.x에서 백엔드에만 지원됩니다. 클라이언트는 v2.x 이전 버전에서 ProxySQL에 SSL을 사용할 수 없습니다.
- ProxySQL v1.4.5부터 mariadb-connector-c-2.3.1만 SSL/TLSv1.0을 지원합니다.
- ProxySQL v2.x에서는 mariadb-connector-3.0.2가 SSL/TLSv1.0, TLSv1.1 및 TLSv1.2를 지원합니다. 이것은 프론트엔드 및 백엔드 연결에 적용됩니다.
- ProxySQL은 클릭하우스 및 SQLite 임베디드도 지원합니다.
- 원하는 서버에 대한 mysql_servers.use_ssl을 업데이트합니다.
- 연결된 전역 변수를 업데이트합니다. (ProxySQL v1.x 릴리스에서만 필요하며 ProxySQL v2.x에서는 필요하지 않음)
- 동일한 서버에 SSL 및 비-SSL로 연결하려면 두 가지 다른 호스트 그룹에 동일한 서버를 구성하고 액세스 규칙을 정의해야 합니다.
예를 들어, 하나의 서버에 SSL을 구성하는 방법은 다음과 같습니다.
-- mysql_servers 테이블을 업데이트하여 SSL 사용 설정
UPDATE mysql_servers SET use_ssl=1 WHERE port=21891;
-- 변경사항을 런타임으로 로드
LOAD MYSQL SERVERS TO RUNTIME;
-- 변경 내용을 디스크에 저장 (옵션)
SAVE MYSQL SERVERS TO DISK;
SSL 키 및 인증서 구성:
SSL 연결을 위해 키와 인증서를 구성해야 합니다.
-- mysql-ssl_p2s_cert 및 mysql-ssl_p2s_key를 설정하여 SSL 키 및 인증서 지정
SET mysql-ssl_p2s_cert="/home/vagrant/newcerts/client-cert.pem";
SET mysql-ssl_p2s_key="/home/vagrant/newcerts/client-key.pem";
-- 변경사항을 런타임으로 로드
LOAD MYSQL VARIABLES TO RUNTIME;
-- 변경사항을 디스크에 저장 (옵션)
SAVE MYSQL VARIABLES TO DISK;
SSL 연결 확인:
SSL이 ProxySQL과 MySQL 간에 예상대로 작동하는지 확인하려면 다음과 같이 수행합니다.
mysql -h127.0.0.1 -P6033 -uroot -psecret -e 'SHOW SESSION STATUS LIKE "Ssl_cipher"'
프론트엔드 SSL 구성:
ProxySQL 프론트엔드 연결에 SSL을 사용하려면 다음을 수행해야 합니다.
- mysql-have_ssl=true를 활성화합니다.
- ProxySQL은 /var/lib/proxysql/datadir에 자동으로 다음 파일을 생성합니다.
- proxysql-ca.pem
- proxysql-cert.pem
- proxysql-key.pem
이 파일들은 필요에 따라 사용자 정의 구성으로 대체할 수 있습니다.
mysql -h127.0.0.1 -P6033 -uroot -psecret -e '\s' | grep -P 'SSL|Connection'
지원되는 프로토콜 및 암호화 알고리즘:
- TLSv1
- TLSv1.1
- TLSv1.2
- TLSv1.3
백엔드 및 프론트엔드 인증서 갱신:
프론트엔드 및 백엔드 연결에 사용되는 인증서를 갱신하는 방법에 대한 설명이 포함되어 있으며, ProxySQL 2.3.0 이후로 프론트엔드 인증서를 동적으로 갱신할 수 있는 방법이 제공됩니다.
-- 프론트엔드 인증서 갱신
PROXYSQL RELOAD TLS;
이제 SSL을 활성화하고 백엔드 및 프론트엔드 연결에 대한 구성과 갱신 방법을 이해하였습니다. 필요한 경우 이 정보를 사용하여 ProxySQL에서 SSL을 구성할 수 있습니다.
댓글