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
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io