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를 사용하는 방법에 대한 자세한 내용은 새 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 인스턴스에 연결하려면
  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.28 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>