在传统数据库体系中,账号密码通常是长期存在的静态凭证,这在云原生环境里会带来明显的安全隐患: 凭证泄露、轮转困难、权限管理分散。

AWS 提供的 IAM Database Authentication 则允许你使用 IAM 身份体系直接登录数据库,并通过短期 Token 取代密码,实现真正的“无密码数据库访问”。

本文将介绍:

  • IAM DB Authentication 的工作原理
  • 如何为 RDS 启用 IAM 登录
  • 如何配置 IAM 权限与数据库用户
  • 如何使用 CLI 登录数据库
  • 以及适用于生产环境的架构建议

IAM Database Authentication 的工作原理

IAM 数据库认证的核心思想是:使用 IAM 签名 Token 代替数据库密码

连接数据库时流程如下:

  1. IAM 用户/角色调用 AWS API 生成签名 Token
  2. Token 作为数据库密码使用
  3. 数据库验证 Token 的签名与 IAM 权限
  4. Token 过期(默认 15 分钟)即失效

这种方式意味着:

  • 不再需要存储数据库密码
  • 可以使用 IAM 统一控制权限
  • Token 是短期凭证,泄露风险更低

AWS 官方文档指出,IAM 认证 Token 是一个签名字符串,可直接替代密码使用,并在短时间后失效,从而降低长期凭证风险。

支持范围与前提条件

IAM Database Authentication 目前支持:

  • MySQL / MariaDB
  • PostgreSQL
  • Aurora MySQL / PostgreSQL

并且需要满足:

  • 数据库运行在 RDS 或 Aurora
  • 已启用 IAM DB Authentication
  • 客户端能访问数据库网络端口
  • 使用 SSL 连接数据库

为 RDS 启用 IAM Database Authentication

1)新建数据库时启用

在创建 RDS 时:

1
2
Database authentication
[✔] Password and IAM database authentication

QQ_1772247363310


2)已有实例开启 IAM 认证

1
aws rds modify-db-instance --db-instance-identifier database-1 --apply-immediately --enable-iam-database-authentication

QQ_1772247491647

IAM 认证默认是关闭的,需要显式开启。

配置 IAM 权限

IAM 用户或角色必须拥有连接数据库的权限。

示例策略:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "rds-db:connect",
      "Resource": "arn:aws:rds-db:REGION:ACCOUNT:dbuser:DB_RESOURCE_ID/db_user"
    }
  ]
}

该权限允许 IAM 身份以指定数据库用户登录。

Clipboard_Screenshot_1772249716

Clipboard_Screenshot_1772249844


生成登录 Token

使用 CLI 生成认证 Token:

1
aws rds generate-db-auth-token --hostname database-1.ctg20gsqsqbx.ap-northeast-1.rds.amazonaws.com --port 3306 --region ap-northeast-1 --username root

Token 有效期约 15 分钟

QQ_1772249976353

QQ_1772250160562

使用 Token 登录数据库

IAM 认证模式强制使用 SSL 登录,因此需要先获取证书:

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

在数据库内执行授权 SQL:

1
2
3
4
5
6
7
mysql -h database-1.ctg20gsqsqbx.ap-northeast-1.rds.amazonaws.com -u admin -p

-- 修改现有用户支持 IAM 验证
ALTER USER 'admin'@'%' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';

-- 刷新权限
FLUSH PRIVILEGES;

QQ_1772253788006

Clipboard_Screenshot_1772253730

QQ_1772253437878

数据库没有开放公网访问,因此使用内网 EC2 服务器登录数据库:

Clipboard_Screenshot_1772257514

获取 TOKEN 并登录:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
ENDPOINT="database-1.ctg20gsqsqbx.ap-northeast-1.rds.amazonaws.com"

REGION="ap-northeast-1"

DB_USER="admin"

CERT_PATH="./global-bundle.pem"

TOKEN=$(aws rds generate-db-auth-token --hostname $ENDPOINT --port 3306 --region $REGION --username $DB_USER)

mysql --host=$ENDPOINT --port=3306 --ssl-ca=$CERT_PATH --ssl-mode=VERIFY_CA --user=$DB_USER --enable-cleartext-plugin --password="$TOKEN"

QQ_1772253407928

注意:

  • Token 直接作为密码使用
  • 必须启用 SSL
  • Token 过期需重新生成

IAM 登录在生产环境的最佳实践

1)结合 EC2 / Lambda Role

推荐方式:

1
应用 → IAM Role → 自动获取凭证 → 生成 DB Token → 登录 RDS

优点:

  • 无需存储任何凭证
  • 自动轮转
  • 可审计

2)结合 RDS Proxy

典型架构:

1
应用 → IAM Auth → RDS Proxy → RDS

优势:

  • Token 自动刷新
  • 连接池复用
  • 减少数据库连接压力

3)与 Secrets Manager 对比

方案优点缺点
IAM DB Auth无密码、短期凭证需要 SDK/CLI 支持
Secrets Manager易集成仍然是密码体系

通常建议:

内部服务 → IAM 登录 第三方系统 → Secrets Manager


适合使用 IAM 登录的场景

IAM Database Authentication 特别适用于:

  • Serverless 应用访问数据库
  • CI/CD 动态访问数据库
  • 多账号统一权限体系
  • 高安全要求的生产系统

本质上,它把数据库访问纳入云身份体系,成为 云原生访问控制的一部分


总结

IAM Database Authentication 的核心价值不在于“免密码”,而在于:

把数据库访问纳入云身份系统,实现统一安全模型。

当数据库不再依赖静态凭证,而是使用短期 IAM Token 时:

  • 权限可以集中管理
  • 审计更加完整
  • 凭证泄露风险显著降低

这也是未来云数据库访问控制的主流方向。