IAM 인증을 사용하여 Amazon RDS for MySQL에 연결하려고 할 때 Access Denied 오류가 발생하는 이유는 무엇인가요?

3분 분량
0

AWS Identity Access Management(IAM) 인증을 사용하여 MySQL용 Amazon Relational Database Service(Amazon RDS) 인스턴스에 연결하려고 합니다. 하지만 “Access Denied” 오류가 발생합니다. "ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES)"

간략한 설명

다음 해결 방법은 IAM 인증을 사용하여 Amazon RDS for MySQL 또는 Aurora DB 인스턴스를 연결할 수 없는 가능한 원인을 식별합니다.

해결 방법

IAM 인증이 해제됨

기본적으로 IAM 인증은 꺼져 있습니다. Amazon RDS for MySQL 클러스터의 구성 설정을 검토하고 IAM 인증이 해제되어 있는지 확인합니다. Amazon RDS 콘솔에서 데이터베이스 인증을 선택하여 인스턴스를 수정합니다. 그런 다음 암호 및 IAM 데이터베이스 인증을 선택하고 계속을 선택하여 구성 설정을 업데이트합니다.

**참고:**클러스터 구성 설정을 업데이트할 때 즉시 적용을 선택하면 보류 중인 모든 수정 사항이 유지 관리 기간 중이 아니라 즉시 적용됩니다. 이 작업으로 인해 Amazon RDS for MySQL 인스턴스가 장기간 중단될 수 있습니다. 자세한 내용은 즉시 적용 설정 사용을 참조하세요.

IAM 역할 권한이 충분하지 않음

IAM 데이터베이스 인증을 사용하여 Amazon RDS for MySQL 인스턴스에 연결하려면 rds-db:connect 작업에 액세스할 수 있어야 합니다. rds-db:connect 작업을 수행하면 DB 인스턴스에 연결할 수 있습니다.

예를 들면 다음과 같습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:region:account-id:dbuser:(DbiResourceId or DbClusterResourceId)/db-user-name"
      ]
    }
  ]
}

참고: db-user-name을 IAM 인증과 연결된 데이터베이스 계정 사용자로 바꿉니다.

ARN만 지정하는 대신 올바른 리소스 ID를 사용해야 합니다. DB 인스턴스의 리소스 ID를 찾으려면 AWS Management Console에서 리소스 탭을 선택합니다. 그런 다음 구성 탭을 선택하여 리소스 ID를 확인합니다.

자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용을 참조하세요.

SCP 정책을 사용하는 경우 정책이 DB 인스턴스에 대한 연결을 허용하는지 확인하세요. 자세한 내용은 서비스 제어 정책 생성, 업데이트 및 삭제를 참조하세요.

데이터베이스 사용자가 잘못 구성됨

Amazon RDS for MySQL을 사용하면 AWSAuthenticationPlugin에서 IAM 인증을 처리합니다. IAM 인증으로 Amazon RDS for MySQL 인스턴스에 연결하려면 AWSAuthenticationPlugin을 사용하세요. 이 플러그인이 IAM 역할과 연결되어 있는지 확인하려면 다음 명령을 실행합니다.

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

다음과 비슷한 출력이 표시됩니다.

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

IAM 역할이 특정 호스트를 사용하도록 제한되어 있는 경우 올바른 호스트 이름을 사용하고 있는지 확인하세요. 또한 지정된 데이터베이스에 액세스할 수 있는 적절한 권한이 있는지 확인하세요.

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

show grants for <user>;

다른 사용자에게 권한을 부여하려면 다음 명령 구문을 사용합니다. 자세한 내용은 GRANT 명령문(MySQL 웹 사이트)을 참조하세요.

grant select on <mydb>.<mytable> to <user>;

잘못된 연결 문자열

Amazon RDS for MySQL 데이터베이스에 연결하려면 연결 문자열에서 --enable-cleartext-plugin 옵션을 사용하세요. --enable-cleartext-plugin 구문은 인증 토큰 역할을 합니다.

예를 들면 다음과 같습니다.

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

또한**--enable-cleartext-plugin** 구문은 데이터베이스 연결에 AWSAuthenticationPlugin을 사용해야 함을 나타냅니다. 데이터베이스 사용자를 구성할 때 플러그인이 필요합니다. AWSAuthenticationPlugin이 잘못 구성된 경우 IAM 인증이 작동하지 않습니다. 이 경우 데이터베이스에 연결하려고 할 때 Access Denied 오류가 표시됩니다.

참고: 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 인스턴스에 연결하는 방법에 대한 자세한 내용은 DB 인스턴스에 연결을 참조하세요.

관련 정보

사용자가 IAM 보안 인증을 사용하여 Amazon RDS for MySQL DB 인스턴스에 인증하도록 허용하려면 어떻게 해야 하나요?

IAM 데이터베이스 인증

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