본문 바로가기
MySQL HA & DR/Group Replication

5. Group Replication Security

by 모모레 2017. 3. 21.

여기에서는 Group Replication 내의 보안 그리고 구성 서버들 간의 연결 보안 또는 주소 허용 목록을 사용한 보안 경계를 설정하는 방법에 대해 설명합니다. 


1. IP Address Whitelisting

Group Replication Plugin은 설정 옵션을 하나 가지고 있는데 이것은 해당 그룹에 통신할 수 있는 서버 목록을 지정하는 옵션이다. 이 옵션은 group_replication_ip_whitelist이다. S1 서버에 해당 파라미터에 S2를 설정하면, S2가 S1에 접속하는 것이 가능하다. 즉, 허용 목록에 있는 것만 연결이 가능하다. 


그리고, 기본적으로 아무것도 지정하지 않으면 group_replication_ip_whitelist 는 네트워크 인터페이스 안에 private network address로 자동 설정된다. 즉, 공용 IP에 인터페이스가 있어도 외부 호스트에서 연결 하는 것을 허용하지 않는다. 


IP 허용 목록이 AUTOMATIC으로 설정되면 아래와 같은 경우에 오류가 발생할 수 있다. 


2016-07-07T06:40:49.320686Z 4 [Note] Plugin group_replication reported: 'Added automatically \\

IP ranges 10.120.40.237/18,10.178.59.44/22,127.0.0.1/8 to the whitelist'


다음과 같이 수동으로 설정할 수도 있다. 수동으로 설정하면 그룹 내의 보안을 좀 더 향상시킬 수 있다. 이 목록은 CIDR 표기법이나 간단한 IP주소 지정으로 설정이 가능하다. 


mysql> STOP GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_ip_whitelist="10.120.40.237/18,10.178.59.44/22,127.0.0.1/8";

mysql> START GROUP_REPLICATION;


참고로 로컬 호스트 IP주소(127.0.0.1)은 항상 허용된다. 



2. Secure Socket Layer Support (SSL)

MySQL Group Replication은 MySQL 서버의 OpenSSL 및 YaSSL 빌디를 모두 지원한다. 그룹내의 통신 연결과 복구 작업을 위한 연결도 모두 SSL을 사용하여 보호하는 것이 가능하다. 


2.1 Configuring SSL for Recovery 

복구 작업은 일반 비동기 Replication 연결을 통해 수행된다. Donor가 선택되면 데이터를 받아들이는 Joiner는 비동기 복제 연결을 설정하는데, 이와 같은 작업이 모두 자동이다. 그러나, 연결전에 사용자는 미리 SSL 연결에 필요한 작업을 완료 해야 한다. 일반적으로 이런 작업은 서버를 그룹에 투입시킬때 처리한다. 


donor> SET SQL_LOG_BIN=0;

donor> CREATE USER 'rec_ssl_user'@'%' REQUIRE SSL;

donor> GRANT replication slave ON *.* TO 'rec_ssl_user'@'%';

donor> SET SQL_LOG_BIN=1;


그룹에 포함된 모든 서버가 SSL을 사용하여 리플리케이션 연결하는게 가능하다고 하자. 그러면 Joiner는 Donor에 연결할때 해당 자격 증명을 사용하도록 구성해야 한다. 이것은 Group Replication 플러그인에 제공된 SSL 옵션에 따라 수행된다. 


new_member> SET GLOBAL group_replication_recovery_use_ssl=1;

new_member> SET GLOBAL group_replication_recovery_ssl_ca= '.../cacert.pem';

new_member> SET GLOBAL group_replication_recovery_ssl_cert= '.../client-cert.pem';

new_member> SET GLOBAL group_replication_recovery_ssl_key= '.../client-key.pem'; 


또한, SSL 연결이 필요한 사용자의 자격 증명을 사용하도록 Recovery Channel을 설정한다. 


new_member> CHANGE MASTER TO MASTER_USER="rec_ssl_user" FOR CHANNEL "group_replication_recovery";

new_member> START GROUP_REPLICATION;


2.2 Configuring SSL for Group Communication 


MySQL Group Replication은 OpenSSL 과 YaSSL 모두 다 지원이 가능하다. 

Group communication connection과 recovery connection 모두 SSL을 사용하여 보안을 강화할 수 있다. 다음의 내용을 통해 어떻게 설정할 수 있는지 알아보자. 


2.2.1 Configuring SSL for Recovery 


복구 작업은 일반적인 비동기 리플리케이션 접속을 통해 작업이 이루어 진다. Donor가 선택되면, Joiner는 비동기식 리플리케이션을 설정한다. 이것은 모두 자동적으로 진행되는 것이라 사용자가 무엇인가를 해줄 필요는 없다. 


그러나, Joiner가 Doner에 접속하기 위해 작업 전에 해줘야 하는 일이 있다. 일반적으로 다음과 같은 계정 생성 작업이다. 


donor> SET SQL_LOG_BIN=0;

donor> CREATE USER 'rec_ssl_user'@'%' REQUIRE SSL;

donor> GRANT replication slave ON *.* TO 'rec_ssl_user'@'%';

donor> SET SQL_LOG_BIN=1;


이미 Group 안에 있는 모든 구성 서버에 SSL을 사용하도록 설정된 계정이 있다고 가정하면 Donor에 연결할 때 해당 자격 증명을 사용하도록 Joiner에 설정하면 된다. 그리고 이와 같은 작업들은 Group Replication 플러그인에 제공되는 SSL 옵션의 설정값에 따라 동작하게 된다. 


new_member> SET GLOBAL group_replication_recovery_use_ssl=1;

new_member> SET GLOBAL group_replication_recovery_ssl_ca= '.../cacert.pem';

new_member> SET GLOBAL group_replication_recovery_ssl_cert= '.../client-cert.pem';

new_member> SET GLOBAL group_replication_recovery_ssl_key= '.../client-key.pem';


그리고, SSL 연결에 필요한 계정을 사용하도록 다음과 같이 복구 채널을 구성한다. 


new_member> CHANGE MASTER TO MASTER_USER="rec_ssl_user" FOR CHANNEL "group_replication_recovery";

new_member> START GROUP_REPLICATION;



2.2.2 Configuring SSL for Group Communication


그룹안에서 구성 서버들과 통신할 때 보안을 위한 보안 소켄을 설정할 수 있다. 이 구성은 서버의 SSL 구성에 따라 다르다. 따라서, 서버에 SSL이 구성되어 있으면 그 정보에 맞춰서 Group Replication 플러그인에도 SSL이 구성된다. 자세한 내용은 https://dev.mysql.com/doc/refman/5.7/en/secure-connection-options.html 에서 확인하도록 한다. 


다음 표는 SSL 관련 설정 옵션들을 나열한 것이다. 


Server Configuration  

 Plugin Configuration Description

 ssl_key

 key 파일의 위치정보, 클라이언트와 서버의 인증서로 사용된다. 

 ssl_cert

 인증서의 위치. 클라이언트와 서버의 인증서로 사용된다. 

 ssl_ca

 신뢰할 수 있는 SSL CA가 있는 파일의 경로 

 ssl_capath

 신뢰할 수 있는 SSL CA를 위한 인증서가 포함된 디렉토리의 위치 

 ssl_crl

 인증서 해지 목록이 포함된 파일의 경로 

 ssl_crlpath

 해지된 인증서리스트 파일이 들어있는 디렉토리의 경로

 ssl_cipher

 연결을 통해 데이터를 암호화할 때 사용할 암호 

 tls_version

 사용하는 프로토콜과 버전정보 


group_replication_ssl_mode는  플러그인 자체에 SSL을 구성하기 위한 Group Replication 관련 옵션이다. 


group_replication_ssl_mode : 그룹 리플리케이션 구성 서버들 사이에 사용하는 커넥션의 보안 상태정보를 명시한다.


다음의 값에 따라 상태를 설명한다. 


Value 

 Description

 DISABLED 

 기본 값으로 암호화된 커넥션을 사용하지 않는다. 

 REQUIRED

 만약 보안 커넥션을 서버가 지원한다면 보안 커넥션을 설정한다. 

 VERIFY_CA

 REQUIRED와 비슷하지만, 추가적으로 구성된 CA 인증서가 설정된 것에 대해 TLS 인증서를 서버에서 확인한다. 

 VERIFY_IDENTITY

 VERIFY_CA와 비슷하지만, 추가적으로 서버의 인증서가 연결을 시도한 서버와 일치하는지 확인한다. 


다음은 설정 예제이다. 


[mysqld]

ssl_ca = "cacert.pem"

ssl_capath = "/.../ca_directory"

ssl_cert = "server-cert.pem"

ssl_cipher = "DHE-RSA-AEs256-SHA"

ssl_crl = "crl-server-revoked.crl"

ssl_crlpath = "/.../crl_directory"

ssl_key = "server-key.pem"

group_replication_ssl_mode= REQUIRED


여기서 이야기 한 것중 Group Replication때문에 추가된 옵션은 group_replication_ssl_mode 뿐이다.  이 옵션은 서버에서 제공되는 ssl_* 변수들로 SSL 프레임 워크를 구성하여 그룹의 구성 서버들간의 SSL 통신을 활성화 하는데 사용한다. 


3. Virtual Private Networks (VPN)


가상 사설망에서 Group Replication이 작동하지 않도록 하는 것은 없다. IPv4 소켓을 사용하여 메세지를 전달하기 위해 서버간에 연결을 설정하는 것으로 사용이 가능하다. 즉, IPv4 소켓에 의존적이다. 


'MySQL HA & DR > Group Replication' 카테고리의 다른 글

7. Requirements and Limitations  (0) 2017.03.28
6. Group Replication System Variables  (0) 2017.03.23
4. Group Replication Operations  (0) 2017.03.15
3. Monitoring Group Replication  (0) 2017.03.13
2. Getting Started  (0) 2017.02.28