You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IAM认证令牌连接RDS MySQL遇证书错误及令牌差异问题

问题1:TLS证书验证失败(x509: certificate signed by unknown authority)

该错误源于MySQL客户端无法识别AWS RDS的TLS根证书,可通过以下方案解决:

方案1:指定RDS根证书文件

  1. 下载AWS官方RDS根证书(如rds-ca-2019-root.pem)至应用运行节点。
  2. 修改连接字符串,添加tls-ca参数指向证书路径:
connectStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?allowCleartextPasswords=true&tls=true&tls-ca=./rds-ca-2019-root.pem",
    "iamuser", authToken, db_host, "db_name",
)

方案2:使用系统预装CA证书(AWS托管环境)

Amazon Linux、EC2或EKS节点通常预装AWS根证书,可直接指定系统证书路径:

// Amazon Linux 2/2023默认证书路径
connectStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?allowCleartextPasswords=true&tls=true&tls-ca=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
    "iamuser", authToken, db_host, "db_name",
)

方案3:临时关闭证书验证(仅测试用,生产禁用)

修改连接字符串的tls参数为skip-verify:

connectStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?allowCleartextPasswords=true&tls=skip-verify",
    "iamuser", authToken, db_host, "db_name",
)
问题2:EKS与EC2生成的令牌长度差异及EC2令牌无法连接

令牌长度差异原因

  • EKS环境:Pod通常使用IAM角色服务账户(IRSA),生成的是OIDC格式令牌,包含服务账户名、命名空间、OIDC提供商等元数据,因此长度更长。
  • EC2环境:使用EC2实例角色的临时安全凭证,生成的认证令牌仅包含基础IAM身份信息,结构简洁,所以长度更短。

EC2令牌无法连接的排查方向

  1. 检查EC2实例角色权限
    确保实例角色的权限策略包含rds-db:connect,且资源指定正确(替换account-id、db-instance-id为实际值):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "arn:aws:rds-db:us-west-2:account-id:dbuser:db-instance-id/iamuser"
        }
    ]
}
  1. 确认RDS IAM认证配置
  • 已为RDS实例启用IAM认证。
  • 已在MySQL中创建对应IAM用户:
CREATE USER 'iamuser' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'iamuser';
FLUSH PRIVILEGES;
  1. 验证凭证获取逻辑
    通过curl http://169.254.169.254/latest/meta-data/iam/security-credentials/检查EC2实例是否能正常获取IAM角色凭证,确认凭证有效性。

内容的提问来源于stack exchange,提问作者ethrbunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:00:26