

# SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 대한 클라이언트 연결 암호화
<a name="mysql-ssl-connections"></a>

SSL(Secure Sockets Layer)은 클라이언트와 서버 간의 네트워크 연결을 보호하는 데 사용되는 업계 표준 프로토콜입니다. SSL 버전 3.0 이후로 이름이 전송 계층 보안(TLS)으로 변경되었습니다. Amazon RDS는 MySQL DB 인스턴스에 SSL/TLS 암호화를 지원합니다. SSL/TLS를 사용하여 애플리케이션 클라이언트와 MySQL DB 인스턴스 간의 연결을 암호화할 수 있습니다. SSL/TLS 지원 기능은 MySQL에 대한 모든 AWS 리전에서 사용할 수 있습니다.

Amazon RDS를 사용하면 SSL/TLS로 MySQL DB 인스턴스에 대한 클라이언트 연결을 암호화하고, MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS를 요구하고, MySQL 명령줄 클라이언트에서 SSL/TLS(암호화됨)로 연결하여 전송 중 데이터를 보호할 수 있습니다. 다음 섹션에서는 Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 암호화를 구성하고 활용하는 방법에 대한 지침을 제공합니다.

**Topics**
+ [Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원](MySQL.Concepts.SSLSupport.md)
+ [Amazon RDS의 MySQL DB 인스턴스에 대한 특정 사용자 계정에 SSL/TLS 요구](mysql-ssl-connections.require-ssl-users.md)
+ [Amazon RDS에서 MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS 요구](mysql-ssl-connections.require-ssl.md)
+ [MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 연결](USER_ConnectToInstanceSSL.CLI.md)

# Amazon RDS의 MySQL DB 인스턴스에 대한 SSL/TLS 지원
<a name="MySQL.Concepts.SSLSupport"></a>

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 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하세요. MySQL에서 SSL/TLS를 사용하는 방법에 대한 자세한 내용은 [새 SSL/TLS 인증서를 사용해 MySQL DB 인스턴스에 연결할 애플리케이션 업데이트](ssl-certificate-rotation-mysql.md) 섹션을 참조하세요.

MySQL 버전 8.0 이하의 경우 Amazon RDS for MySQL은 보안 연결에 OpenSSL을 사용합니다. MySQL 버전 8.4 이상의 경우 Amazon RDS for MySQL은 AWS-LC를 사용합니다. TLS 지원은 MySQL 버전에 따라 달라집니다. 다음 표는 MySQL 버전에 대한 TLS 지원을 보여줍니다.


| MySQL 버전 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 
| --- | --- | --- | --- | --- | 
|  MySQL 8.4  |  지원되지 않음  |  지원되지 않음  |  지원  |  지원됨  | 
|  MySQL 8.0  |  지원되지 않음  |  지원되지 않음  |  지원  |  지원  | 
|  MySQL 5.7  |  지원  |  지원됨  |  지원됨  |  지원되지 않음  | 

# Amazon RDS의 MySQL DB 인스턴스에 대한 특정 사용자 계정에 SSL/TLS 요구
<a name="mysql-ssl-connections.require-ssl-users"></a>

Amazon RDS의 MySQL DB 인스턴스에 대한 지정된 사용자 계정 연결에 SSL/TLS 암호화가 필요할 수 있습니다. 데이터 기밀성이 우려되는 보안 정책을 적용하려면 민감한 정보를 무단 액세스 또는 가로채기로부터 보호하는 것이 중요합니다.

특정 사용자의 계정에 대해 SSL/TLS 연결을 요구하려면 MySQL 버전에 따라 다음 문 중 하나를 사용하여 사용자 계정 `encrypted_user`에서 SSL/TLS 연결을 요구하세요.

이렇게 하려면 다음 문을 사용하면 됩니다.

```
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
```

MySQL과의 SSL/TLS 연결에 대한 자세한 내용은 MySQL 설명서의 [암호화된 연결 사용](https://dev.mysql.com/doc/refman/8.0/en/encrypted-connections.html)을 참조하세요.

# Amazon RDS에서 MySQL DB 인스턴스에 대한 모든 연결에 SSL/TLS 요구
<a name="mysql-ssl-connections.require-ssl"></a>

`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.
```

파라미터 설정에 대한 자세한 내용은 [Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정](USER_WorkingWithParamGroups.Modifying.md)을 참조하세요.

`require_secure_transport` 파라미터에 대한 자세한 내용은 [MySQL 설명서](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_require_secure_transport)를 참조하세요.

# MySQL 명령줄 클라이언트(암호화됨)에서 SSL/TLS를 사용하여 Amazon RDS의 MySQL DB 인스턴스에 연결
<a name="USER_ConnectToInstanceSSL.CLI"></a>

`mysql` 클라이언트 프로그램 파라미터는 사용 중인 MySQL 또는 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 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하세요.

1. 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
   ```

1. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.

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

```
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>
```