以下是对该问题的快速总结。阅读完整描述部分以了解基本细节。
精简说明:
假设您已经有一个 IAM 用户并且该用户已经能够访问其他 AWS 服务,例如 S3、CloudFront、ECS、EC2...
假设我们需要为用户提供对 RDS 集群的只读访问权限,并同时设置 IAM DB 身份验证。
我们按照官方指南在我们的本地系统中执行所有提到的步骤,它运行良好,我们能够为db_user
.
然而,有趣的地方在这里..当用户尝试db_user
从他们的本地机器生成帐户的令牌时..用户将被拒绝访问。
详细描述:
设置:
我的 RDS 集群实例运行 Aurora MySQL 引擎。引擎版本:5.6.10a
我一直在关注 AWS 知识中心指南,了解如何允许用户使用 IAM 凭证连接到 Amazon RDS?
该指南没有明确提及,但在生成身份验证令牌时,AWS CLI 使用本地存储的 IAM 凭证来签署请求。
我想强调一下,在下面提到的代码段中,admin是 AWS CLI 为我的 admin IAM 用户存储的配置文件名称,而db_user是 IAM 用户(具有rds-db:connect
特权)。
TOKEN="$(aws --profile admin rds generate-db-auth-token -h.. .. .. -u db_user)
使用上面的代码片段,我可以使用生成的令牌进行身份验证并连接到集群。
如果--profile
未提及属性,它会读取保存在凭证文件中的默认配置文件。
问题:
而不是使用--profile admin
我正在寻找使用已经存在的非管理员 IAM 配置文件来生成身份验证令牌。
例如,假设 IAM 用户名为developer,具有 RDS 只读权限和本地存储在配置文件rds_read_only下的凭证
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 用户开发人员缺少一些必需的策略。
我尝试将RDS
and下的所有可用策略RDS Data API
(单独以及组合)附加到 IAM user developer,但没有任何运气。如果我将AdministrativeAccess
策略附加到 IAM 用户developer,那么它才能成功生成令牌。
问题:
非管理员 IAM 用户成功生成身份验证令牌所需的强制性策略是什么?