SSL/TLS를 사용하여 MySQL DB 인스턴스에 대한 클라이언트 연결 암호화 - Amazon Relational Database Service

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를 사용하는 방법에 대한 자세한 내용은 MySQL DB 인스턴스에 새 SSL/TLS 인증서 사용 섹션을 참조하세요.

MySQL은 보안 연결을 위해 OpenSSL을 사용합니다. Amazon RDS for MySQL은 TLS(전송 계층 보안) 버전 1.0, 1.1 및 1.2를 지원하지 않습니다. 다음 표는 MySQL 버전에 대한 TLS 지원을 보여줍니다.

MySQL 버전 TLS 1.0 TLS 1.1 TLS 1.2

MySQL 8.0

MySQL 8.0.27 및 이후 버전에서 지원됨

MySQL 8.0.27 및 이후 버전에서 지원됨

지원

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을 사용하도록 요구할 수 있습니다. 기본적으로 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 인스턴스에 연결하려면
  1. 모든 AWS 리전에 적용되는 루트 인증서를 다운로드할 수 있습니다.

    인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스에 대한 연결 암호화 단원을 참조하세요.

  2. 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 -u myadmin -p

    SSL/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 -u myadmin -p

    다음 예제는 MariaDB 클라이언트를 사용하여 --ssl-ca 파라미터를 통해 클라이언트를 시작하는 방법을 보여줍니다.

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
  3. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.

출력은 다음과 비슷합니다.

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9738 Server version: 8.0.23 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>