首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误1045 (28000):在使用IAM身份验证连接到RDS实例时,用户' DB _ user '@'ip‘被拒绝访问(使用密码:是)

错误1045 (28000):在使用IAM身份验证连接到RDS实例时,用户' DB _ user '@'ip‘被拒绝访问(使用密码:是)
EN

Stack Overflow用户
提问于 2020-04-08 06:20:45
回答 2查看 7.4K关注 0票数 3

以下是这个问题的简短摘要。有关基础详细信息,请阅读完整的描述部分。

简略描述:

假设您已经存在一个IAM用户,并且该用户已经能够访问其他AWS服务,例如S3、CloudFront、ECS、EC2.

假设我们需要通过RDS集群为用户提供只读访问,并设置IAM身份验证。

在我们的本地系统中,我们按照官方指南执行所有提到的步骤,它工作得非常完美,并且我们能够为db_user生成正确的令牌。

然而,这是它变得有趣的地方。当用户试图从他们的本地计算机为db_user帐户生成令牌时。用户将被拒绝访问。

详细说明:

设置:

我的RDS集群实例运行Aurora MySQL引擎。引擎版本: 5.6.10a

我一直在跟踪AWS知识中心的如何允许用户使用IAM凭据连接到Amazon?指南

指南没有明确提到,但是在生成身份验证令牌时,AWS使用本地存储的IAM凭据对请求进行签名。

我想强调的是,在下面提到的片段中, admin 是AWS为我的管理IAM用户存储的配置文件名,而db_user是IAM用户(具有rds-db:connect特权)。

TOKEN="$(aws --profile admin rds generate-db-auth-token -h.. .. .. -u db_user)

使用上面的片段,我能够使用生成的令牌进行身份验证并连接到集群。

如果没有提到--profile属性,它将读取保存在凭据文件中的默认配置文件。

问题:

我不使用--profile admin,而是使用已经存在的非admin配置文件来生成身份验证令牌。

例如,假设IAM用户名为developer,具有RDS只读特权和在概要文件下本地存储的凭据。

TOKEN="$(aws --profile rds_read_only rds generate-db-auth-token -h.. .. .. -u db_user)

如果使用上述令牌,则会得到以下错误:

ERROR 1045 (28000): Access denied for user 'db_user'@'ip' (using password: YES)

经过数小时的故障排除后,我能够得出结论,我的rds_read_only配置文件无法生成有效的身份验证令牌,可能是因为IAM用户developer缺少一些必需的策略。

我尝试将RDSRDS Data API下可用的所有策略(单独地和组合地)附加到IAM用户developer中,但没有成功。如果我将AdministrativeAccess策略附加到IAM用户developer,则只有这样它才能成功地生成令牌。

问题:

非管理IAM用户成功生成身份验证令牌所需的强制策略是什么?

EN

回答 2

Stack Overflow用户

发布于 2020-04-23 03:10:05

我在AWS博客上看到了你的问题。

  1. 您需要创建一个IAM策略来定义对AWS RDS实例的访问。检查这个文档 {“版本”:"2012-10-17",“声明”:[{“效果”:“允许”,“行动”:“rds-db:连接”,“资源”:"arn:aws:rds-db:us-east-2:1234567890:dbuser:/“}}
  2. 使用使用IAM插件的说明在RDS实例中创建用户。检查这个文档
  3. 创建令牌检查此文档
  4. 我找到了这个构建JDBC以允许IAM身份验证的不错的插件
票数 0
EN

Stack Overflow用户

发布于 2020-04-24 03:39:06

这就回答了@Ronnie关于令牌生成的具体问题。

罗尼我回来了。我在我的AWS帐户中使用了以下策略:沙箱,我是一个AWS联邦用户,拥有AssumeRole priveleges所以Admin

您必须非常小心,因为正如您所说的,这篇文章并没有区分如下:

AWS用户使用生成的令牌访问DB

具有正确管理策略的AWS用户/角色,该策略生成有效的令牌

我将举例说明如何识别正确生成的令牌。由于某些原因,AWS生成一个值,但它不告诉您是否是有用的令牌:-\

没有管理专用的令牌access=将无法工作

代码语言:javascript
复制
sandboxdb.asdasdffw.ap-southeast-2.rds.amazonaws.com:3306/?Action=connect&DBUser=human_user&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA5XZIHS3GYVMRPRZF%2F20200424%2Fap-southeast-2%2Frds-db%2Faws4_request&X-Amz-Date=20200424T035250Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=3efd467d548ea05a8bdf097c132b03661680908f723861e45323723c870ef646

令牌与Access=一起工作!仔细看,它包含了X-Amz-Security-Token=

代码语言:javascript
复制
sandboxdb.ras21th1z8.ap-southeast-2.rds.amazonaws.com:3306/?Action=connect&DBUser=human_user&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA5XZIHS3GSAQI6XHO%2F20200424%2Fap-southeast-2%2Frds-db%2Faws4_request&X-Amz-Date=20200424T040756Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEQaDmFwLXNvdXRoZWFzdC0yIkgwRgIhAOzVIondlMxYkJG5nWNeQlxS0M6B1pphgD1ewFwx2VfKAiEAkcp2jNHHmNMgwqUholnW545MwjzoEjS1uh4BHI4R4GAqvgMIbRABGgw5NDQ0NDAzMTc2NDUiDEvFkyEy833kd%2By4nyqbAybqK5dcP0nTlqZ19I2OVZxzwzz%2BUv9RVdVLMPHE5b%2FqXQGVG1CRtw90r9Lt4QkzTBeIVzdtIkXbpwFtqFh24Djb%2BiZHfvElj%2Fhz29ExzStU0fPYMewEB1u%2F2Osi72Fw6KbZ6TDy5EjuWcrrS08PZQ9CHc%2Fc8iDAIKs28vJ70KKcmow0SInVZGHGpD2JAgIL7jvnadVlcAW7lN2OAnxS72Kb4neqNuHcWzfPLfbXaOP1OaOs7vCR7zDlTTxX2aHoVflC69K9K67BqzdnDnnju%2F4XWQWU3r%2ByXylExwOsiG3y4Qq6wv002l%2BpQmF5%2BMXdTrFR5ewpfrcHf8TZLI5eq8HLA2gG1%2B255L%2Bqt%2BD80T%2FCzEdKSJPjppdYSq9FdeCMRSsqp5PpXP%2BDbQZwmhxiE2RmrbOKwNsFPJqUUnemQHXYLB8lily56nnswT2PYmQOGHqnZWRrv%2FTlGOAGlThuiR%2BLhQLBC08nBEGbBqK%2FjU4JwFMY4JfhgUHr8BA9CuGwAu0qIAFzG71M3HzCNX6o56k1gYJB%2F3%2FJaKlp7TCIxIn1BTrqASqywcfKrWhIaNX3t%2BV%2FZoYYO%2FtGVBZLyr3sSmByA%2Fwq538LiPHA0wDE3utOg%2FwNP%2BQGTcXhk1F%2BI0HOHztAQ2afnKW8r1oRbXxYAzb2j2b8MNEwrsaBju2gHFRgZHkM8YI%2FP5cvYr%2F8FQXWcE9eqjdme0hOo3rPETzxZfRwNQTHEntBbVVD1ec0d7DblfSEDZhLk%2By1%2BFMAYf7NeBIfU6GNsAN2hTdSkPPuto2fQKzRybRAwxQz5P3cO5CClUNIxu4J3bM1MUUTux%2BtMjqRvjGxDhB4yLIJmIPOOYLDSOXl3aWO2y4v89wu5A%3D%3D&X-Amz-Signature=1c6fcc472bb2af09055117075ca21d4a5f715910443115116c9230905721e79d

数据库用户连接到AWS实例的AWS策略

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "*"
        }
    ]
}

为了避免干扰本地的信任,我使用了以下测试过程:

  1. 从运行在与DB相同的VPC中的AWS EC2实例中生成令牌。一代人是成功的
  2. 使用带有AWS CLI令牌生成的Docker容器从本地机器生成令牌是成功的。

当然,我的用户是使用以下命令在MySQL DB中创建的

代码语言:javascript
复制
mysql -h $HOSTNAME -u$ADMIN_USER -p$ADMIN_PASS <<EOF
CREATE USER db_human_user IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
GRANT SELECT ON $SPECIFIC_GIVEN_DB.* TO 'db_human_user';
EOF
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61094432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档