AwsRdsIamDatabasePasswordProvider

文档中心 › 组件索引 › AwsRdsIamDatabasePasswordProvider

AwsRdsIamDatabasePasswordProvider Controller Service

类型全限定名:cn.org.acal.lynxus.processors.aws.rds.AwsRdsIamDatabasePasswordProvider

所属 Bundle:cn.org.acal.lynxus:lynxus-aws-nar:2.11.8

描述

每次请求 JDBC 连接时生成 Amazon RDS IAM 认证令牌。 生成的令牌替代数据库用户密码,因此 Lynxus 无需在 DBCP 服务中存储长期有效的凭据。

标签

awsrdsiamjdbcpassword

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
AWS Credentials Provider Service控制器服务 API:
AwsCredentialsProviderService
cn.org.acal.lynxus-lynxus-aws-service-api-nar-2.11.8
提供用于签署 IAM 身份验证请求的 AWS 凭证的Controller Service。
Regionus-west-2
  • Africa (Cape Town) — AWS Region Code : af-south-1
  • Asia Pacific (Hong Kong) — AWS Region Code : ap-east-1
  • Asia Pacific (Hyderabad) — AWS Region Code : ap-south-2
  • Asia Pacific (Jakarta) — AWS Region Code : ap-southeast-3
  • Asia Pacific (Malaysia) — AWS Region Code : ap-southeast-5
  • Asia Pacific (Melbourne) — AWS Region Code : ap-southeast-4
  • Asia Pacific (Mumbai) — AWS Region Code : ap-south-1
  • Asia Pacific (New Zealand) — AWS Region Code : ap-southeast-6
  • Asia Pacific (Osaka) — AWS Region Code : ap-northeast-3
  • Asia Pacific (Seoul) — AWS Region Code : ap-northeast-2
  • Asia Pacific (Singapore) — AWS Region Code : ap-southeast-1
  • Asia Pacific (Sydney) — AWS Region Code : ap-southeast-2
  • Asia Pacific (Taipei) — AWS Region Code : ap-east-2
  • Asia Pacific (Thailand) — AWS Region Code : ap-southeast-7
  • Asia Pacific (Tokyo) — AWS Region Code : ap-northeast-1
  • AWS European Sovereign Cloud (Germany) — AWS Region Code : eusc-de-east-1
  • aws global region — AWS Region Code : aws-global
  • AWS GovCloud (US-East) — AWS Region Code : us-gov-east-1
  • AWS GovCloud (US-West) — AWS Region Code : us-gov-west-1
  • aws-cn global region — AWS Region Code : aws-cn-global
  • aws-iso global region — AWS Region Code : aws-iso-global
  • aws-iso-b global region — AWS Region Code : aws-iso-b-global
  • aws-iso-e global region — AWS Region Code : aws-iso-e-global
  • aws-iso-f global region — AWS Region Code : aws-iso-f-global
  • aws-us-gov global region — AWS Region Code : aws-us-gov-global
  • Canada (Central) — AWS Region Code : ca-central-1
  • Canada West (Calgary) — AWS Region Code : ca-west-1
  • China (Beijing) — AWS Region Code : cn-north-1
  • China (Ningxia) — AWS Region Code : cn-northwest-1
  • EU ISOE West — AWS Region Code : eu-isoe-west-1
  • Europe (Frankfurt) — AWS Region Code : eu-central-1
  • Europe (Ireland) — AWS Region Code : eu-west-1
  • Europe (London) — AWS Region Code : eu-west-2
  • Europe (Milan) — AWS Region Code : eu-south-1
  • Europe (Paris) — AWS Region Code : eu-west-3
  • Europe (Spain) — AWS Region Code : eu-south-2
  • Europe (Stockholm) — AWS Region Code : eu-north-1
  • Europe (Zurich) — AWS Region Code : eu-central-2
  • Israel (Tel Aviv) — AWS Region Code : il-central-1
  • Mexico (Central) — AWS Region Code : mx-central-1
  • Middle East (Bahrain) — AWS Region Code : me-south-1
  • Middle East (UAE) — AWS Region Code : me-central-1
  • South America (Sao Paulo) — AWS Region Code : sa-east-1
  • US East (N. Virginia) — AWS Region Code : us-east-1
  • US East (Ohio) — AWS Region Code : us-east-2
  • US ISO East — AWS Region Code : us-iso-east-1
  • US ISO WEST — AWS Region Code : us-iso-west-1
  • US ISOB East (Ohio) — AWS Region Code : us-isob-east-1
  • US ISOB West — AWS Region Code : us-isob-west-1
  • US ISOF EAST — AWS Region Code : us-isof-east-1
  • US ISOF SOUTH — AWS Region Code : us-isof-south-1
  • US West (N. California) — AWS Region Code : us-west-1
  • US West (Oregon) — AWS Region Code : us-west-2
  • Use Custom Region — 用户定义的区域,可以是非 AWS 区域,和/或来自表达式语言(Expression Language)
服务所在的 AWS 区域
Custom Region自定义区域,例如 AWS 兼容服务提供商的区域
支持表达式语言:是(仅使用环境/系统变量求值)
Token Request Endpoint令牌请求端点采用主机名:端口格式,用于 IAM 令牌签名,覆盖 JDBC URL 中的主机名和端口。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

提供的 Service API

  • DatabasePasswordProvider (cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8)

详细说明

概述

AwsRdsIamDatabasePasswordProvider 在每次请求 JDBC 连接时生成 Amazon RDS IAM 认证令牌。 该 Controller Service 实现了 Lynxus 的 DatabasePasswordProvider API, 因此可以被 DBCP Controller Service 引用,避免在 Lynxus 中存储长期有效的 数据库密码。

用法

  1. 配置一个 AWSCredentialsProviderControllerService,让密码提供器能够 获取 AWS 凭据(例如使用 IAM 角色或 AssumeRoleWithWebIdentity)。
  2. 创建一个 AwsRdsIamDatabasePasswordProvider 并引用该凭据提供器服务。 配置 AWS 区域。主机、端口和数据库用户继承自引用它的 DBCP 服务的 JDBC URL 和 "Database User" 属性。
  3. 更新 DBCP Controller Service,把 Database Password Provider 属性 设为新的 IAM 提供器。配置了提供器后,静态的 Password 属性会被忽略。
  4. 确保 JDBC URL 启用了 TLS,并包含 AWS 推荐的 SSL 参数 (例如 PostgreSQL 的 ssl=true&sslmode=verify-full)。

每当 DBCP 服务需要创建物理 JDBC 连接时,都会生成一个新的 IAM 令牌并作为 密码提供。已有的池化连接在数据库关闭之前仍然有效,因此 "Maximum Connection Lifetime" 等标准 Lynxus 池化属性仍然适用。

配置示例

PostgreSQL 角色与权限

以超级用户身份连接到 lynxus 数据库并执行:

CREATE ROLE lynxus_app LOGIN PASSWORD 'temporary';
GRANT rds_iam TO lynxus_app;

GRANT CONNECT ON DATABASE lynxus TO lynxus_app;
GRANT USAGE ON SCHEMA public TO lynxus_app;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO lynxus_app;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO lynxus_app;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT ALL PRIVILEGES ON TABLES TO lynxus_app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT ALL PRIVILEGES ON SEQUENCES TO lynxus_app;

IAM 权限

给你的 IAM 角色(例如 myAuroraPostgresRole)附加类似如下的策略。 把 <region>、<account-id> 和 <db-resource-id> 替换为你的值:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "rds-db:connect",
      "Resource": "arn:aws:rds-db:<region>:<account-id>:dbuser:<db-resource-id>/lynxus_app"
    }
  ]
}

确保该角色的信任策略允许 Lynxus 主机(EC2、EKS 等)扮演(assume)它。

CLI 验证

生成 IAM 认证令牌,并用 psql 连接:

TOKEN=$(aws rds generate-db-auth-token \
  --hostname database-1-instance-1.ccfuwyso6lcz.us-east-1.rds.amazonaws.com \
  --port 5432 \
  --region us-east-1 \
  --username lynxus_app)

PGPASSWORD="$TOKEN" psql \
  "host=database-1-instance-1.ccfuwyso6lcz.us-east-1.rds.amazonaws.com \
   port=5432 user=lynxus_app dbname=lynxus \
   sslmode=verify-full sslrootcert=/path/to/rds-combined-ca-bundle.pem"

验证通过后,按下述配置 Lynxus 的 DBCP 服务:

  • Database Connection URL: jdbc:postgresql://database-1-instance-1.ccfuwyso6lcz.us-east-1.rds.amazonaws.com:5432/lynxus?ssl=true&sslmode=verify-full
  • Database User: lynxus_app
  • Database Password Provider: AwsRdsIamDatabasePasswordProvider

之后,Lynxus 会为每个新的 JDBC 连接自动签发 IAM 令牌。

通过位于 RDS Proxy 前端的网络负载均衡器连接

通过位于 RDS Proxy 前端的网络负载均衡器(NLB)连接时,JDBC URL 必须指向 NLB 端点,但 IAM 令牌必须为 RDS Proxy 端点签名。默认情况下,令牌使用从 JDBC URL 提取的主机名生成,这会导致认证失败。

使用可选的 Token Request Endpoint 属性,可以指定用于令牌签名的 RDS Proxy 端点(hostname:port),同时让 JDBC URL 中的 NLB 端点用于 实际的 TCP 连接。

CLI 验证

NLB_ENDPOINT="nlb-example.elb.us-east-1.amazonaws.com"
RDS_PROXY_ENDPOINT="my-proxy.proxy-example.us-east-1.rds.amazonaws.com"

TOKEN=$(aws rds generate-db-auth-token \
  --hostname "$RDS_PROXY_ENDPOINT" \
  --port 3306 \
  --region us-east-1 \
  --username lynxus_app)

mysql -h "$NLB_ENDPOINT" -P 3306 -u lynxus_app --password="$TOKEN"

验证通过后,按下述配置 Lynxus 的 DBCP 服务:

  • Database Connection URL: jdbc:mysql://nlb-example.elb.us-east-1.amazonaws.com:3306/mydb
  • Database User: lynxus_app
  • Database Password Provider: AwsRdsIamDatabasePasswordProvider
  • Token Request Endpoint: my-proxy.proxy-example.us-east-1.rds.amazonaws.com:3306