SSL/TLS를 사용하여 MySQL DB 인스턴스에 대한 클라이언트 연결 암호화
SSL(Secure Sockets Layer)은 클라이언트와 서버 간의 네트워크 연결을 보호하는 데 사용되는 업계 표준 프로토콜입니다. SSL 버전 3.0 이후로 이름이 전송 계층 보안(TLS)으로 변경되었습니다. Amazon RDS는 MySQL DB 인스턴스에 SSL/TLS 암호화를 지원합니다. SSL/TLS를 사용하여 애플리케이션 클라이언트와 MySQL DB 인스턴스 간의 연결을 암호화할 수 있습니다. SSL/TLS 지원 기능은 MySQL에 대한 모든 AWS 리전에서 사용할 수 있습니다.
주제
MySQL DB 인스턴스와 함께 SSL/TLS 사용
Amazon RDS가 SSL/TLS 인증서를 생성한 후 Amazon RDS가 인스턴스를 프로비저닝할 때 DB 인스턴스에 인증서를 설치합니다. 인증 기관이 서명하는 SSL 인증서에는 SSL/TLS 인증서에는 스푸핑 공격으로부터 보호해주는 SSL/TLS 인증서를 위한 일반 이름(CN)으로 DB 인스턴스 엔드포인트가 포함되어 있습니다.
Amazon RDS에서 생성하는 SSL/TLS 인증서는 신뢰할 수 있는 루트 개체이므로 대부분의 경우에 작동하지만, 애플리케이션에서 인증서 체인을 수락하지 않을 경우 사용하지 못할 수 있습니다. 애플리케이션에서 인증서 체인을 허용하지 않는 경우 중간 인증서로 사용 중인 AWS 리전에 연결해야 할 수도 있습니다. 예를 들어, SSL/TLS를 사용하여 AWS GovCloud (US) 리전에 연결하려면 중간 인증서를 사용해야 합니다.
인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하세요. MySQL에서 SSL/TLS를 사용하는 방법에 대한 자세한 내용은 새 SSL/TLS 인증서를 사용해 MySQL DB 인스턴스에 연결할 애플리케이션 업데이트 섹션을 참조하세요.
MySQL은 보안 연결을 위해 OpenSSL을 사용합니다. Amazon RDS for MySQL은 전송 계층 보안(TLS) 버전 1.0, 1.1, 1.2 및 1.3을 지원하지 않습니다. TLS 지원은 MySQL 버전에 따라 달라집니다. 다음 표는 MySQL 버전에 대한 TLS 지원을 보여줍니다.
MySQL 버전 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 |
---|---|---|---|---|
MySQL 8.0 |
지원되지 않음 |
지원되지 않음 |
지원 |
지원 |
MySQL 5.7 |
지원 |
지원 |
지원 |
지원되지 않음 |
특정 사용자 계정에 대한 SSL/TLS 연결을 요구할 수 있습니다. 예를 들면 MySQL 버전에 따라 다음 문 중 하나를 사용하여 사용자 계정 encrypted_user
에 대한 SSL/TLS 연결을 요구할 수 있습니다.
이렇게 하려면 다음 문을 사용하면 됩니다.
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
MySQL과의 SSL/TLS 연결에 대한 자세한 내용은 MySQL 설명서의 암호화된 연결 사용
MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS 필요
require_secure_transport
파라미터를 사용하여 MySQL DB 인스턴스에 대한 모든 사용자 연결이 SSL/TLS를 사용하도록 요구합니다. 기본적으로 require_secure_transport
파라미터는 OFF
로 설정됩니다. require_secure_transport
파라미터를 ON
으로 설정하면 해당 DB 인스턴스에 대한 연결 시 SSL/TLS를 요구합니다.
require_secure_transport
파라미터 값은 DB 인스턴스의 DB 파라미터 그룹을 업데이트하여 설정할 수 있습니다. 변경 사항을 적용하기 위해 DB 인스턴스를 재부팅할 필요가 없습니다.
DB 클러스터에 대해 require_secure_transport
파라미터를 ON
으로 설정하면 암호화된 연결을 설정할 수 있는 경우 데이터베이스 클라이언트가 인스턴스에 연결할 수 있습니다. 그렇지 않으면 다음과 유사한 오류 메시지가 클라이언트에 반환됩니다.
MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
파라미터 설정에 대한 자세한 내용은 DB 파라미터 그룹의 파라미터 수정을 참조하세요.
require_secure_transport
파라미터에 대한 자세한 내용은 MySQL 설명서
MySQL 명령줄 클라이언트에서 SSL/TLS를 사용하여 연결(암호화)
mysql
클라이언트 프로그램 파라미터는 MySQL 5.7 버전, MySQL 8.0 버전 또는 MariaDB 버전을 사용하는 경우 약간 다릅니다.
사용 중인 버전을 확인하려면 --version
옵션을 사용하여 mysql
명령을 실행합니다. 다음 예에서는 출력은 클라이언트 프로그램이 MariaDB의 프로그램임을 나타냅니다.
$ mysql --version mysql Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1
Amazon Linux, CentOS, SUSE 및 Debian과 같은 대부분의 Linux 배포판은 MySQL을 MariaDB로 대체했으며 mysql
버전은 MariaDB에서 가져온 것입니다.
다음 단계에 따라 SSL/TLS를 사용하여 DB 인스턴스에 연결합니다.
MySQL 명령줄 클라이언트를 사용하여 SSL/TLS를 통해 DB 인스턴스에 연결하려면
-
모든 AWS 리전에 적용되는 루트 인증서를 다운로드할 수 있습니다.
인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하세요.
-
MySQL 명령줄 클라이언트를 사용하여 SSL/TLS를 통해 DB 인스턴스에 연결합니다.
-h
파라미터의 경우 해당 DB 인스턴스의 DNS 이름(엔드포인트)로 대체합니다.--ssl-ca
파라미터는 해당하는 SSL/TLS 인증서 파일 이름으로 대체합니다.-P
파라미터에는 DB 인스턴스의 포트로 대체합니다.-u
파라미터에는 마스터 사용자와 같이 유효한 데이터베이스 사용자의 사용자 이름으로 대체합니다. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.다음 예제는 MySQL 5.7 클라이언트 이후 버전의 경우
--ssl-ca
파라미터를 사용하여 클라이언트를 시작하는 방법을 보여줍니다.mysql -h
mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
--ssl-ca=global-bundle.pem
--ssl-mode=REQUIRED -P 3306 -umyadmin
-pSSL/TLS 연결에서 SSL/TLS 인증서의 엔드포인트와 비교하여 DB 인스턴스 엔드포인트를 확인하도록 요구할 수 있습니다.
mysql -h
mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
--ssl-ca=global-bundle.pem
--ssl-mode=VERIFY_IDENTITY -P 3306 -umyadmin
-p다음 예제는 MariaDB 클라이언트를 사용하여
--ssl-ca
파라미터를 통해 클라이언트를 시작하는 방법을 보여줍니다.mysql -h
mysql–instance1.123456789012.us-east-1.rds.amazonaws.com
--ssl-ca=global-bundle.pem
--ssl -P 3306 -umyadmin
-p -
입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.
출력은 다음과 비슷합니다.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9738
Server version: 8.0.28 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>