Amazon web services 错误1045(28000):拒绝用户访问';db#U用户'@';ip';(使用密码:是)使用IAM DB身份验证连接到RDS DB实例时

Amazon web services 错误1045(28000):拒绝用户访问';db#U用户'@';ip';(使用密码:是)使用IAM DB身份验证连接到RDS DB实例时,amazon-web-services,amazon-iam,aws-cli,amazon-aurora,amazon-policy,Amazon Web Services,Amazon Iam,Aws Cli,Amazon Aurora,Amazon Policy,下面是问题的简要总结。请阅读完整描述部分以了解基本详细信息 简明说明: 假设您已有一个IAM用户,并且该用户已经能够访问其他AWS服务,例如S3、CloudFront、ECS、EC2 假设我们需要为用户提供通过RDS群集的只读访问权限,并设置IAM DB身份验证 我们按照官方指南在本地系统中执行所有提到的步骤,它工作正常,我们能够为db\u用户生成正确的身份验证令牌 然而,这里是它变得有趣的地方。。当用户试图从其本地计算机为db\u用户帐户生成令牌时。。用户将被拒绝访问 详细说明: 设置: 我

下面是问题的简要总结。请阅读完整描述部分以了解基本详细信息

简明说明: 假设您已有一个IAM用户,并且该用户已经能够访问其他AWS服务,例如S3、CloudFront、ECS、EC2

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

我们按照官方指南在本地系统中执行所有提到的步骤,它工作正常,我们能够为
db\u用户
生成正确的身份验证令牌

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


详细说明: 设置: 我的RDS集群实例运行Aurora MySQL引擎。 发动机版本:5.6.10a

我一直在遵循AWS知识中心关于

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

我想强调一下,在下面提到的代码段中,admin是AWS CLI为我的admin IAM用户存储的配置文件名,db\u用户是IAM用户(具有
rds db:connect
权限)

TOKEN=“$(aws—配置文件管理rds生成db auth TOKEN-h…-u db\u用户)

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

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

问题: 我没有使用
--profile admin
,而是希望使用已经存在的非管理IAM配置文件来生成身份验证令牌

例如,假设IAM用户名为developer,具有RDS只读权限,并且凭据存储在配置文件RDS\u read\u only

TOKEN=“$(aws—配置文件rds\u只读rds生成db auth TOKEN-h…-u db\u用户)

如果我使用上述令牌,则会出现以下错误:

错误1045(28000):用户'db_user'@'ip'的访问被拒绝(使用密码:是)

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

我尝试将
RDS
RDS数据API
下可用的所有策略(单独或组合)附加到IAM userdeveloper,但没有任何运气。如果我将
AdministrativeAccess
策略附加到IAM userdeveloper,只有这样它才能成功生成令牌

问题:
非管理员IAM用户成功生成身份验证令牌需要哪些强制策略?

我在AWS博客中看到了您的问题

  • 您需要创建IAM策略来定义对AWS RDS实例的访问。检查这个

    { “版本”:“2012-10-17”, “声明”:[ { “效果”:“允许”, “行动”:[ “rds数据库:连接” ], “资源”:[ “arn:aws:rds db:us-east-2:1234567890:dbuser:/” ] } ] }

  • 按照使用IAM插件的说明在RDS DB实例中创建用户。检查这个

  • 创建令牌并检查此

  • 我发现它构建了一个JDBCJAR以允许IAM身份验证
    这回答了@Ronnie关于代币生成的具体问题

    罗尼,我回来了。我在我的AWS帐户中使用了以下策略:Sandbox我是AWS联合用户,拥有AssumeRole权限,因此
    Admin

    你必须非常小心,因为正如你所说的,这篇文章没有区别于:

    AWS IAM用户使用生成的令牌访问数据库

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

    我将给出一个如何识别正确生成的令牌的示例。出于某种原因,AWS会生成一个值,但它不会告诉您是否是有用的标记:-\

    没有管理员特殊访问权限的令牌=将不起作用

    具有访问权限的令牌=将起作用!仔细查看,它包含X-Amz-Security-Token=

    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 RDS数据库实例的AWS IAM策略

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "rds-db:connect",
                "Resource": "*"
            }
        ]
    }
    
    为了避免干扰本地配置,我使用了以下测试过程:

  • 从与DB在同一VPC中运行的AWS EC2实例生成令牌。这一代人是成功的
  • 通过使用具有令牌生成的Docker容器从本地计算机生成令牌成功 当然,我的用户是使用以下命令在MySQL数据库中创建的

    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
    

    mysql-h$HOSTNAME-u$ADMIN\u USER-p$ADMIN\u PASS我不确定您是否理解我的问题。我已经能做到了,是的,对不起。我实际上需要测试一个非常类似的场景,但是可以使用MySQL workbench进行连接。有一件事我可以请你检查一下,那就是所谓的AWS IAM信任关系。担任AWS IAM角色。您可能需要启用与AWS RDSAh的信任关系!我不确定这种信任关系是否是为了达到目的,但它确实给了我希望,让我去尝试一下。谢谢,伙计。真的谢谢。我会在尝试这个时告诉你最新情况。另外,在AWS论坛上,我看到了一些类似恼人问题的参考资料。相信我,我浏览了300多条帖子
    
    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