내용으로 건너뛰기

IAM 인증을 사용해 Amazon RDS for MySQL에 연결하려 할 때 ‘Access Denied’ 오류 메시지가 표시되는 이유가 무엇입니까?

4분 분량
0

AWS Identity and Access Management(IAM) 인증을 사용해 Amazon Relational Database Service(Amazon RDS) for MySQL 인스턴스에 연결하려고 하면 ‘Access Denied’ 오류 메시지가 표시됩니다.

간략한 설명

오류 메시지가 표시되는 이유는 다음과 같습니다.

  • IAM 역할 권한이 충분하지 않음
  • IAM 인증이 비활성화됨
  • 잘못 구성된 데이터베이스 사용자
  • 잘못된 연결 문자열

다음과 비슷한 오류 메시지가 표시될 수 있습니다.

‘ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES)’

해결 방법

AWSSupport-TroubleshootRDSIAMAuthentication 런북 사용

Amazon RDS 인스턴스를 사용한 IAM 인증에 필요한 구성을 자동으로 확인하려면 AWSSupport-TroubleshootRDSIAMAuthentication 런북을 사용합니다. 문제를 해결하려면 런북이 제공하는 해결 방법을 따르십시오.

런북으로 문제가 해결되지 않는 경우, 다른 해결 방법 섹션으로 계속 진행합니다.

IAM 역할 권한 확인

IAM 데이터베이스 인증을 사용해 Amazon RDS for MySQL 인스턴스에 연결하려면 rds-db:connect 작업에 대한 액세스 권한이 있어야 합니다. 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용을 참조하십시오.

Amazon 리소스 이름(ARN)만 지정하는 것이 아니라 올바른 리소스 ID를 사용해야 합니다. 데이터베이스(DB) 인스턴스의 리소스 ID를 찾으려면 다음 단계를 완료하십시오.

  1. Amazon RDS 콘솔을 엽니다.
  2. 탐색 창에서 Databases(데이터베이스)를 선택합니다.
  3. DB 인스턴스를 선택하고 Configuration(구성) 탭을 선택합니다.
  4. Configuration(구성)에서 해당하는 DB 인스턴스의 Resource ID(리소스 ID)를 찾습니다.
    참고: 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용을 참조하십시오.

서비스 제어 정책(SCP)을 사용하는 경우, 해당 정책이 DB 인스턴스에 대한 연결을 허용해야 합니다. 자세한 내용은 Update an SCP(SCP 업데이트)를 참조하십시오.

IAM 인증 활성화

기본적으로 데이터베이스 인스턴스에 대한 IAM 인증은 비활성화되어 있습니다. Amazon RDS for MySQL 인스턴스 또는 Aurora DB 클러스터의 구성 설정을 검토하고 IAM 인증이 활성화되어 있는지 확인합니다.

참고: Apply Immediately(즉시 적용)를 선택하면 모든 보류 중인 변경 사항이 유지 관리 기간에 적용되지 않고 즉시 적용됩니다. 이 작업은 Amazon RDS for MySQL 인스턴스를 중단시킬 수 있습니다. 자세한 내용은 수정 예약 설정 사용을 참조하십시오.

데이터베이스 사용자 구성 확인

AWSAuthenticationPlugin 플러그인은 Amazon RDS for MySQL에서 사용자를 인증합니다. IAM 인증을 통해 Amazon RDS for MySQL 인스턴스에 연결하려면 AWSAuthenticationPlugin을 사용합니다.

IAM 역할이 이 플러그인을 사용하는지 확인하려면 다음 명령을 실행합니다.

select user,plugin,host from mysql.user where user like '%db-user-name%';

참고: db-user-name을 해당하는 데이터베이스 사용자 이름으로 바꾸십시오.

출력 예시:

+------+-------------------------+------+
| user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)

IAM 역할이 특정 호스트를 사용하는 경우 해당 호스트 이름을 사용해야 합니다. 또한, 지정된 데이터베이스에 액세스할 올바른 권한이 있어야 합니다.

사용자에게 부여된 권한을 보려면 다음 명령을 실행합니다.

show grants for user;

참고: user를 해당하는 사용자 이름으로 바꾸십시오.

다른 사용자에게 권한을 부여하려면 다음 명령을 실행합니다.

grant select on mydb.mytable to user;

참고: mydb를 해당하는 데이터베이스 인스턴스 이름으로, mytable을 테이블 이름으로, user를 해당하는 사용자 이름으로 바꾸십시오.

자세한 내용은 MySQL 웹 사이트에서 GRANT statement를 참조하십시오.

연결 문자열 수정

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

Amazon RDS for MySQL 데이터베이스에 연결하려면 연결 문자열에서 --enable-cleartext-plugin 파라미터를 사용합니다. --enable-cleartext-plugin 파라미터는 인증 토큰 구실을 합니다. 데이터베이스에 연결하고 데이터베이스 사용자를 구성할 때 AWSAuthenticationPlugin을 사용해야 합니다. AWSAuthenticationPlugin을 올바로 구성하지 않으면 IAM 인증을 통해 데이터베이스에 연결할 때 ‘Access Denied’ 오류 메시지가 표시됩니다.

다음 연결 문자열 예시를 사용하십시오.

mysql -h endpoint -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$

참고: endpoint를 액세스하려는 DB 인스턴스의 호스트 이름으로 바꾸십시오.

MariaDB 클라이언트를 사용하는 경우 --enable-cleartext-plugin 파라미터가 필요하지 않습니다. 대신, 먼저 환경 변수에 토큰을 저장합니다. 그런 다음 MySQL DB 인스턴스에 연결할 때 환경 변수를 사용합니다.

다음 예시를 사용하십시오.

RDSHOST="rdsmysql.123456789012.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username db-user-name)"
mysql --host=$RDSHOST --port=3306 --enable-cleartext-plugin --user=db-user-name --password=$TOKEN

MySQL DB 인스턴스에 연결할 때 환경 변수를 사용하는 방법에 관한 자세한 내용은 Connecting to a DB instance(DB 인스턴스에 연결)를 참조하십시오.

관련 정보

사용자가 IAM 자격 증명을 통해 Amazon RDS for MySQL DB 인스턴스에 인증하도록 허용하려면 어떻게 해야 합니까?

IAM 데이터베이스 인증

MariaDB, MySQL 및 PostgreSQL을 위한 IAM 데이터베이스 인증

1 댓글

This article was reviewed and updated on 2026-05-27.

전문가

답글을 게시함 8일 전