RDS MySQL 8.0 권한 확인 및 어플리케이션용 계정 설정

jkky98·2025년 3월 12일
0

ProjectSpring

목록 보기
20/20
post-thumbnail

현재 상황

현재는 'admin'@'%'의 계정을 어플리케이션-RDS 연결을 위한 계정으로 사용중이다. RDS를 처음 만들때 생성한 것으로, 권한을 확인해보자.

참고로 사용중인 RDS의 mysql version은 8.0.39이다.

%%%%%%%%%%%실행%%%%%%%%%%%
SHOW GRANTS FOR 'admin'@'%';

%%%%%%%%%%%결과%%%%%%%%%%%
GRANT USAGE ON *.* TO `admin`@`%`
GRANT `rds_superuser_role`@`%` TO `admin`@`%`
  • USAGE 권한 → 로그인 가능하지만, 기본적으로 아무 작업도 할 수 없음.
  • rds_superuser_role 권한 → Amazon RDS에서 특정 관리 기능을 수행할 수 있는 역할(Role)을 상속받음.

rds_superuser_role

aws rds docs - 마스터 계정 권한
위 문서에 따르면 rds_superuser_role는 꽤 강력한 권한을 가진 것으로 보인다.

일단은 스프링 어플리케이션이 사용해도 되는 권한을 파악하지 못한 상태라 rds_superuser_role을 그대로 사용하기로 한다.

어플리케이션 계정 및 권한 생성

rds_superuser_role의 상속을 받으며 EC2 퍼블릭ip 접근만 가능한 계정을 생성할 계획이다.

✔ MySQL 5.7과 MySQL 8.0에서 계정 생성 및 권한 부여 방식이 다르다.
✔ MySQL 8.0부터는 CREATE USER로 먼저 계정을 생성한 후, GRANT로 권한을 부여해야 한다.

MySQL8.0에서 GRANT를 실행하려면 필요한 권한
GRANT 명령어를 실행하려면 해당 사용자가 부여하려는 권한을 보유하고 있어야 함.
즉, admin 계정이 rds_superuser_role을 부여하려면 스스로 rds_superuser_role을 가지고 있어야 함.

위의 내용을 기반으로 쿼리를 작성해보자.

// 계정 생성
+------------------------------------------------------------------------------------------------------+
| CREATE USER 'springserver'@'{my_public_ip}' IDENTIFIED BY '{my_secure_password}';
+------------------------------------------------------------------------------------------------------+
// 권한 부여
| GRANT USAGE ON *.* TO 'springserver'@'{my_public_ip}'                                                |
| GRANT 'rds_superuser_role'@'%' TO 'springserver'@'{my_public_ip}'                                    |
+------------------------------------------------------------------------------------------------------+
FLUSH PRIVILEGES; // 즉시 FLUSH

생성 확인

SHOW GRANTS FOR 'springserver'@'{my_public_ip}';

잘 생성된 것을 볼 수 있다.

이 설정으로 하여금 EC2 퍼블릭 IP에서만 springserver라는 username으로 연결이 가능해졌다.

admin계정에 대한 ip 설정

admin계정은 현재 모든 ip에서 패스워드만 안다면 접근이 가능하다. 이를 특정한 ip에서만 접근하도록 바꿔줄 것이다.

profile
자바집사의 거북이 수련법

0개의 댓글