如何通过AWS Glue连接使用RDS Proxy IAM身份验证?
AWS Glue 结合 RDS Proxy IAM 身份验证连接 RDS 的可行性
可行,以下是具体实现方案和关键细节:
核心逻辑
RDS Proxy的IAM身份验证依赖短期生成的DB Auth Token替代固定密码,AWS Glue可以通过自定义作业逻辑+IAM权限配置实现这种连接方式,无需存储静态密码。
关键配置与步骤
1. 配置IAM角色权限
- 给Glue作业使用的IAM角色添加
rds-db:connect权限,资源指定为目标RDS Proxy和对应数据库用户的ARN,格式示例:arn:aws:rds-db:us-east-1:123456789012:dbuser:my-proxy/iam-auth-db-user - 同时给该角色添加
rds:GenerateDbAuthToken权限,允许调用生成认证Token的API - 确保Glue作业的IAM角色拥有VPC内访问RDS Proxy的权限(安全组规则允许Glue的ENI访问Proxy的数据库端口)
2. 在Glue作业中生成Auth Token
使用AWS SDK(以Python为例)在作业代码中生成临时认证Token:
import boto3 import sys from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ['JOB_NAME']) rds_client = boto3.client('rds', region_name='us-east-1') # 替换为你的Proxy端点、端口、DB用户名 auth_token = rds_client.generate_db_auth_token( DBHostname='my-proxy.proxy-xxxxxx.us-east-1.rds.amazonaws.com', Port=3306, DBUsername='iam-auth-db-user', Region='us-east-1' )
3. 构建JDBC连接并访问数据库
将生成的auth_token作为密码传入JDBC连接参数,以MySQL为例:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName(args['JOB_NAME']).getOrCreate() df = spark.read.format("jdbc") \ .option("url", "jdbc:mysql://my-proxy.proxy-xxxxxx.us-east-1.rds.amazonaws.com:3306/my-db?useSSL=true&requireSSL=true") \ .option("dbtable", "my-table") \ .option("user", "iam-auth-db-user") \ .option("password", auth_token) \ .option("driver", "com.mysql.cj.jdbc.Driver") \ .load() df.show()
注意事项
- 确保RDS Proxy已启用IAM身份验证,且对应的数据库用户是通过IAM身份验证配置的(而非常规密码用户)
- Glue作业必须部署在与RDS Proxy相同的VPC内(或通过VPC peering连通),RDS Proxy默认不支持公网访问
- Auth Token有效期为15分钟,若作业运行时长超过此时间,需重新生成Token
内容的提问来源于stack exchange,提问作者Suraj Pandey
相关产品推荐
相关产品推荐

