

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

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

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

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

# Amazon RDS의 MariaDB DB 인스턴스에 대한 SSL/TLS 지원
<a name="MariaDB.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 인증서를 사용해 MariaDB 인스턴스에 연결할 애플리케이션 업데이트](ssl-certificate-rotation-mariadb.md) 섹션을 참조하세요.

Amazon RDS for MariaDB는 전송 계층 보안(TLS) 버전 1.3, 1.2, 1.1 및 1,0을 지원합니다. TLS 지원은 MariaDB 마이너 버전에 따라 달라집니다. 다음 테이블은 MariaDB 마이너 버전에 대한 TLS 지원을 보여줍니다.


| TLS 버전 | MariaDB 11.8 | MariaDB 11.4 | MariaDB 10.11 | MariaDB 10.6 | MariaDB 10.5 | MariaDB 10.4 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  TLS 1.3  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  | 
|  TLS 1.2  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  |  모든 마이너 버전  | 
|  TLS 1.1  |  지원되지 않음  |  지원되지 않음  |  지원되지 않음  |  10.6.16 이하  |  10.5.23 이하  |  10.4.32 이하  | 
|  TLS 1.0  |  지원되지 않음  |  지원되지 않음  | 지원되지 않음 | 10.6.16 이하 |  10.5.23 이하  |  10.4.32 이하  | 

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

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

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

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

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

MariaDB와의 SSL/TLS 연결에 대한 자세한 내용은 MariaDB 설명서에서 [클라이언트 및 서버에 대한 연결 보안](https://mariadb.com/kb/en/securing-connections-for-client-and-server/)을 참조하세요.

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

`require_secure_transport` 파라미터를 사용하여 MariaDB DB 인스턴스에 대한 모든 사용자 연결이 SSL/TLS를 사용하도록 요구합니다. 버전 11.4 이하의 경우 `require_secure_transport` 파라미터는 기본적으로 `OFF`로 설정됩니다. 11.8 이상 버전의 경우 기본값은 `ON`으로 설정되어 DB 인스턴스에 연결하기 위해 SSL/TLS를 적용합니다. 안전하지 않은 연결이 필요한 경우 `require_secure_transport` 파라미터를 `OFF`로 변경할 수 있습니다.

**참고**  
`require_secure_transport` 파라미터는 MariaDB 버전 10.5 이상에서만 지원됩니다.

`require_secure_transport` 파라미터 값은 DB 인스턴스의 DB 파라미터 그룹을 업데이트하여 설정할 수 있습니다. 변경 사항을 적용하기 위해 DB 인스턴스를 재부팅할 필요가 없습니다.

DB 클러스터에 대해 `require_secure_transport` 파라미터를 `ON`으로 설정하면 암호화된 연결을 설정할 수 있는 경우 데이터베이스 클라이언트가 인스턴스에 연결할 수 있습니다. 그렇지 않으면 다음과 유사한 오류 메시지가 클라이언트에 반환됩니다.

```
ERROR 1045 (28000): Access denied for user 'USER'@'localhost' (using password: YES | NO)
```

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

`require_secure_transport` 파라미터에 대한 자세한 내용은 [MariaDB 설명서](https://mariadb.com/docs/ent/ref/mdb/system-variables/require_secure_transport/)를 참조하세요.

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

`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 인스턴스 또는 클러스터 에 대한 연결 암호화](UsingWithRDS.SSL.md) 단원을 참조하세요.

1. MySQL 명령줄 클라이언트를 사용하여 SSL/TLS를 통해 DB 인스턴스에 연결합니다. `-h` 파라미터의 경우 해당 DB 인스턴스의 DNS 이름(엔드포인트)로 대체합니다. `--ssl-ca` 파라미터는 해당하는 SSL/TLS 인증서 파일 이름으로 대체합니다. `-P` 파라미터에는 DB 인스턴스의 포트로 대체합니다. `-u` 파라미터에는 마스터 사용자와 같이 유효한 데이터베이스 사용자의 사용자 이름으로 대체합니다. 입력 프롬프트가 표시되면 마스터 사용자 암호를 입력합니다.

   다음 예제는 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
   ```

   SSL/TLS 연결에서 SSL/TLS 인증서의 엔드포인트와 비교하여 DB 인스턴스 엔드포인트를 확인하도록 요구할 수 있습니다.

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-verify-server-cert -P 3306 -u myadmin -p
   ```

   다음 예제는 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
   ```

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

다음과 유사한 출력 화면이 표시되어야 합니다.

```
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.10-MariaDB-log Source distribution
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
```