Aurora MySQL 과 RDS for MySQL 에서 validate_password 사용하기

Share

Last Updated on 9월 19, 2023 by Jade(정현호)

안녕하세요 
이번 포스팅에서는 AWS RDS에서 패스워드 설정 정책인 validate_password 플러그인 사용에 대해서 내용을 확인해보려고 합니다. 

AWS RDS에서 플러그인 유형

AWS RDS for MySQL 과 Aurora MySQL 는 설치형 MySQL 과 많은 부분이 호환되지만, 반대로 호환이 되지 않는 부분이 존재합니다. 

그 중에서 이번 포스팅에서 설명할 플러그인의 경우도 각각이 사용 방법이나 기능별로 지원 유무에서 차이가 나게 됩니다.

예를 들어 audit plugin 의 경우 RDS for MySQL 에서는 옵션 그룹에서 MariaDB Plugin 에서 설정하여 사용 가능 하며, Aurora MySQL 의 경우는 파라미터 그룹에서 설정해서 사용할 수 있습니다.

[Aurora MySQL 3.0의 파라미터 그룹]


참고로 RDS for MySQL 8에서는 8.0.25 버전 이상 부터 옵션 그룹을 통해서 audit 기능을 사용할 수 있습니다. (이전 마이너 버전에서는 사용 불가)



설치형 MySQL 8.0 에서는 이번 포스팅에서 설명할 validate_password 에 대해서 component 설치 기능이 추가되었습니다.


그래서 설치형 MySQL 8.0 에서는 아래와 같이 component 명령어를 통해서 설치할 수 있습니다.

-- 설치
mysql> INSTALL COMPONENT 'file://component_validate_password';

-- 설치된 컴포넌트 확인
mysql> select * from mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn                      |
+--------------+--------------------+------------------------------------+
|            1 |                  1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+


이번 포스팅에서 설명할 플러그인 "validate_password"  에 대해서 AWS RDS for MySQL 과 Aurora MySQL 에서는 기존과 동일하게 설치할 수 있습니다.


포스팅에서 사용한 종류 와 버전
- RDS for MySQL : 5.7.33 ,  8.0.23
- Aurora MySQL : 2.10.2 , 3.02.0
        

validate_password

RDS for MySQL 과 Aurora MySQL 에서 validate_password 플러그인 사용은 설치형 MySQL 과 다르지는 않습니다. 

설치형 MySQL 8 버전에서의 component 도입된 부분과는 달리 기존과 동일하게 플러그인 형태로 추가할 수 있습니다.

포스팅에서는 RDS for MySQL 5.7, 8.0 과 Aurora MySQL 2.0 과 3.0 모두에서 설치가 되는 것을 확인하였습니다.

플러그인 설치는 아래와 같이 진행할 수 있습니다.

-- 플러그인 설치 여부 확인
mysql> SELECT plugin_name, plugin_status, 
plugin_type, plugin_library FROM information_schema.plugins WHERE 
plugin_name='validate_password';
<결과 없음>


-- 플러그인 설치
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';


-- 설치 확인
mysql> SELECT plugin_name, plugin_status, 
plugin_type, plugin_library FROM information_schema.plugins WHERE 
plugin_name='validate_password';

+-------------------+---------------+-------------------+----------------------+
| plugin_name       | plugin_status | plugin_type       | plugin_library       |
+-------------------+---------------+-------------------+----------------------+
| validate_password | ACTIVE        | VALIDATE PASSWORD | validate_password.so |
+-------------------+---------------+-------------------+----------------------+


플러그인이 정상적으로 설치가 완료되었다면 시스템 변수에서 validate_password 관련 파라미터를 확인해볼 수 있습니다.

mysql> SHOW GLOBAL VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | ON     |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+


비밀번호 정책(validate_password_policy) 은 크게 다음 3가지 중에서 선택할 수 있으며, 기본값은 MEDIUM 입니다.

LOW : 비밀번호의 길이만 검증
MEDIUM : 비밀번호의 길이를 검증하며, 숫자와 대소문자, 그리고 특수문자의 배합을 검증
STRONG : MEDIUM 레벨의 검증을 모두 수행하며, 금칙어가 포함되었는지 여부 까지를 확인

validate_password_length 는 비밀번호의 길에 대한 정책에 대한 시스템 변수입니다.

대소문자, 숫자, 특수문자는 mixed_case_count 와 number_count ,special_char_count 시스템 변수에 설정된 수 이상을 포함하고 있는지를 검증하게 됩니다.

플러그인 설치 후 기본은 최소 암호 길이 8자리, 암호가 대소문자가 1개 이상 포함되어 있어야 하며, 1개 이상의 숫자가 포함, 1개 이상의 특수 문자가 포함되어 있어야 하는 정책으로 설정되게 됩니다.

설치형 MySQL 에서는 dictionary_file 시스템 변수에 금칙어를 정보의 파일을 설정하여 금칙어가 포함되어 있는지도 체크할 수 있었으나 RDS/Aurora 에서는 dictionary_file 은 설정이 불가한 것으로 확인되며, 매뉴얼에서도 위의 시스템 변수 중에서 validate_password_dictionary_file 및 validate_password_check_user_name 을 제외하고 나머지 정책을 설정하여 사용할 수 있다고 언급되어 있습니다.

[RDS for MySQL Parameter Group]

위의 이미지와 같이 validate_password_check_user_name 은 파라미터 그룹에 존재하지 않아 설정을 변경할수 없으며, MySQL 커뮤니티 버전의 기본값을 그대로 사용하게 됩니다.
validate_password_check_user_name의 기본값이 MySQL 5.7에서는 OFF이고, 8.0버전에서 ON이 기본값입니다.


플러그인 설치 후에 아래 같이 간단하게(정책에 맞지 않게) 계정 생성을 시도하면 에러가 발생되게 됩니다.

mysql> create user test identified by 'test123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements



VALIDATE_PASSWORD_STRENGTH

계정을 생성하거나 패스워드를 변경하기 전에 설정된 정책(policy) 기준으로 설정하려는(생성하려는) 암호의 강도를 함수를 통해서 평가해볼 수 있습니다.

VALIDATE_PASSWORD_STRENGTH 함수를 사용하면 되며 아래와 같이 암호에 대한 강도를 평가해 볼 수 있으며 0(약함)에서 100(강함) 사이의 정수를 반환하게 됩니다.

mysql> SELECT VALIDATE_PASSWORD_STRENGTH('test123');
+---------------------------------------+
| VALIDATE_PASSWORD_STRENGTH('test123') |
+---------------------------------------+
|                                    25 |
+---------------------------------------+


mysql> SELECT VALIDATE_PASSWORD_STRENGTH('TesT123456!@');
+--------------------------------------------+
| VALIDATE_PASSWORD_STRENGTH('TesT123456!@') |
+--------------------------------------------+
|                                        100 |
+--------------------------------------------+


설치한 validate_password 플러그인에 대해서 비활성화 하려면 다음 명령어를 실행하면 됩니다.

-- UNINSTALL
mysql> UNINSTALL PLUGIN validate_password;

-- 플러그인 설치 조회
mysql> SELECT plugin_name, plugin_status, 
plugin_type, plugin_library FROM information_schema.plugins WHERE 
plugin_name='validate_password';
<결과 없음>

           

Reference

Reference Link
 • amazon.com/validate-password-plugin
 • mysql.com/validate-password


연관된 다른 글

 

 

 

 

                

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x