亚马逊AWS官方博客

使用Amazon Web Services Advanced JDBC Wrapper实现DBeaver SSO登录Amazon RDS PostgreSQL数据库

概述

在现代企业环境中,数据库安全和访问管理面临着严峻挑战。许多跨国企业使用DBeaver作为主要的数据库管理工具,但传统的本地用户名和密码登录方式已经无法满足日益严格的安全合规要求。企业安全合规部门对这种分散的认证方式提出了质疑,要求统一身份管理和访问控制。同时,大多数跨国企业已经采用Azure Active Directory (AAD)作为统一的身份提供商,但Amazon RDS PostgreSQL原生无法与AAD进行直接集成,这使得通过DBeaver实现单点登录(SSO)成为一个技术难题。企业迫切需要一个既能满足安全合规要求,又能简化用户认证流程的解决方案。

AWS Advanced JDBC Wrapper提供了一个强大的解决方案来应对这些挑战。通过其联合身份认证(Federated Authentication)插件和AWS IAM数据库认证功能,企业可以实现DBeaver与Amazon RDS PostgreSQL数据库的无缝SSO集成。该解决方案支持与多种身份提供商(包括Azure Active Directory、Active Directory Federation Services等)的集成,将外部身份认证与Amazon IAM角色进行映射,从而实现统一的身份管理。这不仅提高了数据库访问的安全性,还消除了管理多套用户凭证的复杂性,让企业能够通过现有的身份基础设施来控制数据库访问权限。

本文将详细介绍如何使用AWS Advanced JDBC Wrapper的联合身份认证插件,通过IAM认证方式实现DBeaver与Amazon RDS PostgreSQL数据库的SSO登录。我们将从环境准备开始,逐步讲解如何配置Azure Active Directory与AWS IAM的联合身份认证,设置RDS PostgreSQL数据库的IAM认证,以及在DBeaver中配置AWS Advanced JDBC Wrapper。通过本文的实践指南,企业技术团队将能够构建一个安全、合规且用户友好的数据库访问解决方案,满足现代企业对统一身份管理和数据库安全的双重需求。

方案架构

整个方案的架构核心组件

 

企业环境组件

该方案在企业环境中包含以下核心组件:

  • 企业用户:使用Active Directory账户的数据库管理员或开发人员
  • DBeaver客户端:配置AWS Advanced JDBC Wrapper驱动的开源数据库管理工具
  • AWS Advanced JDBC Wrapper:集成IAM身份认证、自动处理令牌刷新和连接故障转移的增强型JDBC驱动
  • ADFS:基于SAML 2.0协议验证用户身份并生成SAML断言的企业身份提供商

AWS身份认证组件

AWS云环境中的身份认证层包含:

  • IAM Identity Provider:建立与企业ADFS信任关系,验证SAML断言并映射企业用户到IAM角色
  • AWS STS:根据SAML断言颁发临时AWS凭据,支持角色假设功能,凭据有效期可配置15分钟至12小时
  • IAM角色:预配置包含RDS访问权限策略的角色,支持细粒度数据库权限控制

AWS数据库访问组件

数据库访问层的核心组件包括:

  • IAM数据库认证令牌:基于临时AWS凭据生成,有效期15分钟可自动刷新,使用AWS签名版本4算法替代传统密码认证
  • Amazon RDS PostgreSQL:启用IAM数据库认证功能的实例,配置数据库用户映射,支持SSL/TLS加密连接和完整审计日志

联合身份认证的工作流程如下:

步骤1:启动数据库连接:企业用户在DBeaver中创建新的数据库连接,选择PostgreSQL数据库类型并配置RDS实例端点。

步骤2:使用JDBC Wrapper:DBeaver客户端加载AWS Advanced JDBC Wrapper驱动,设置包含IAM认证参数、区域和身份提供商信息的连接URL。

步骤3:重定向身份认证:AWS Advanced JDBC Wrapper检测到需要IAM认证后,重定向用户到企业ADFS,通过浏览器窗口或集成Windows认证完成身份验证。

步骤4:SAML断言生成:Active Directory Federation Services验证用户身份后生成SAML断言,包含用户身份信息、角色映射和有效期等关键属性。

步骤5:验证断言请求临时凭据:IAM Identity Provider接收并验证SAML断言的有效性和完整性,检查签名、有效期、发行者等SAML断言属性。

步骤6:假设IAM角色:AWS STS调用AssumeRoleWithSAML API,根据SAML断言中的角色信息假设相应的IAM角色。

步骤7:返回临时AWS凭据:AWS STS返回临时AWS凭据,包含AccessKeyId、SecretAccessKey、SessionToken和凭据过期时间。

步骤8:生成IAM认证令牌:AWS Advanced JDBC Wrapper使用临时AWS凭据调用RDS生成身份验证令牌API,基于AWS签名版本4算法生成15分钟有效期的认证令牌。

步骤9:使用IAM认证令牌连接:AWS Advanced JDBC Wrapper使用生成的IAM认证令牌作为密码连接RDS PostgreSQL,建立TLS 1.2+加密的安全数据库连接。

前提条件

在开始配置之前,请确保满足以下前提条件:

AWS环境准备

  • 一个已启用IAM数据库认证的Amazon RDS PostgreSQL实例
  • 配置好的AWS IAM SAML身份提供商
  • 具有数据库访问权限的IAM角色
  • 在数据库中创建的对应IAM用户

软件依赖

  • DBeaver Community或Enterprise版本
  • AWS Advanced JDBC Wrapper 2.6.2或更高版本

配置步骤

步骤1:启用Amazon RDS PostgreSQL的IAM数据库认证

首先需要在Amazon RDS PostgreSQL实例上启用IAM数据库认证功能。

使用AWS CLI命令启用IAM数据库认证:

aws rds modify-db-instance \
    --db-instance-identifier your-postgres-instance \
    --enable-iam-database-authentication \
    --apply-immediately

步骤2:创建IAM身份提供商

在AWS IAM中创建SAML身份提供商,用于与您的企业身份提供商(目前仅支持ADFS)建立信任关系。

使用AWS CLI创建SAML身份提供商:

aws iam create-saml-provider \
    --name adfs-example \
    --saml-metadata-document file://metadata.xml

步骤3:创建IAM角色和策略

创建一个IAM角色,该角色将被联合用户承担以访问RDS数据库。

首先创建信任策略文件trust-policy.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:saml-provider/adfs-example"
      },
      "Action": "sts:AssumeRoleWithSAML",
      "Condition": {
        "StringEquals": {
          "SAML:aud": "https://signin.aws.amazon.com/saml"
        }
      }
    }
  ]
}

创建IAM角色:

aws iam create-role \
    --role-name rds-federated-role \
    --assume-role-policy-document file://trust-policy.json

创建RDS访问策略文件rds-policy.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:us-east-1:123456789012:dbuser:your-postgres-instance/db_user_name"
      ]
    }
  ]
}

创建并附加策略到角色:

aws iam create-policy \
    --policy-name rds-federated-policy \
    --policy-document file://rds-policy.json

aws iam attach-role-policy \
    --role-name rds-federated-role \
    --policy-arn arn:aws:iam::123456789012:policy/rds-federated-policy

步骤4:在数据库中创建IAM用户

连接到PostgreSQL数据库并创建对应的IAM用户:

CREATE USER db_user_name;
GRANT rds_iam TO db_user_name;
GRANT CONNECT ON DATABASE your_database TO db_user_name;
GRANT USAGE ON SCHEMA public TO db_user_name;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO db_user_name;

步骤5:下载和配置AWS Advanced JDBC Wrapper

从GitHub下载AWS Advanced JDBC Wrapper的联合认证捆绑包:

https://github.com/awslabs/aws-advanced-jdbc-wrapper/releases/download/2.6.2/aws-advanced-jdbc-wrapper-2.6.2-bundle-federated-auth.jar

推荐使用捆绑版本(bundle-federated-auth),因为它包含了所有必需的依赖项,避免了手动管理依赖的复杂性。

步骤6:在DBeaver中配置连接

在DBeaver中创建新的数据库连接并配置联合身份认证参数。

配置步骤:

  • 在DBeaver中点击“新建连接”
  • 选择PostgreSQL数据库类型
  • 在“驱动程序设置”中添加aws-advanced-jdbc-wrapper-2.6.2-bundle-federated-auth.jar
  • 设置驱动程序类名为:software.amazon.jdbc.Driver
  • 点击”驱动程序属性”选项卡,添加以下关键属性:

关键参数说明

以下是联合身份认证插件的关键参数配置:

参数名称 是否必需 描述 示例值
wrapperPlugins 启用联合身份认证插件 federatedAuth
dbUser 数据库中的IAM用户名 db_user_name
idpUsername 身份提供商的用户名 user@example.com
idpPassword 身份提供商的密码 your_password
idpEndpoint 身份提供商的端点URL ec2amaz-ab3cdef.example.com
iamRoleArn 要承担的IAM角色ARN arn:aws:iam::123456789012:role/rds-federated-role
iamIdpArn IAM身份提供商ARN arn:aws:iam::123456789012:saml-provider/adfs-example

测试连接

完成配置后,可以通过以下步骤测试SSO连接:

  • 在DBeaver中点击“测试连接”按钮
  • 认证成功后,系统将自动返回DBeaver
  • DBeaver显示连接成功并登录数据库

故障排除

常见问题

问题1:连接超时

如果遇到连接超时问题,可以通过添加以下参数来调整超时设置:

&httpClientSocketTimeout=120000&httpClientConnectTimeout=120000

问题2:SSL证书验证失败

在测试环境中,如果遇到SSL证书验证问题,可以临时禁用SSL验证(不推荐在生产环境使用):

&sslInsecure=true

问题3:IAM权限不足

确保IAM角色具有正确的rds-db:connect权限,并且资源ARN与实际的数据库实例和用户名匹配。

最佳实践

  • 安全性:始终在生产环境中启用SSL/TLS加密
  • 权限管理:遵循最小权限原则,只授予必要的数据库权限
  • 监控:启用AWS CloudTrail和RDS性能洞察来监控数据库访问
  • 令牌缓存:合理设置令牌缓存时间,平衡安全性和性能
  • 备份认证:为关键系统配置备用认证方式

总结

通过使用AWS Advanced JDBC Wrapper的联合身份认证插件,企业可以实现DBeaver与Amazon RDS PostgreSQL数据库的无缝SSO集成。这种方案具有以下优势:

  • 增强安全性:通过IAM认证和联合身份管理提高数据库访问安全
  • 简化管理:统一的身份认证和权限管理
  • 提升用户体验:无需记忆多个数据库密码
  • 符合合规要求:满足企业安全和合规标准
  • 易于维护:集中化的身份管理和访问控制

随着企业对数据安全和访问管理要求的不断提高,这种基于联合身份认证的解决方案将成为现代数据库管理的重要趋势。AWS Advanced JDBC Wrapper为企业提供了一个强大而灵活的工具,帮助实现安全、高效的数据库访问管理。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

欧智华

西云数据高级技术客户经理,超过15年的丰富IT行业经验,曾在研发、咨询、架构等多个专业技术领域深耕,积累了深厚的专业知识和实践经验。目前专注于支持客户实施落地人工智能解决方案,致力于通过技术创新推动企业数字化转型与智能化升级。

吴楠

亚马逊云科技解决方案架构师,负责面向跨国企业客户的云计算方案架构咨询和设计,客户覆盖医疗、零售等行业。曾经在电信、娱乐和金融等行业有多年大数据、企业数字化转型等相关研发、咨询和项目管理经验。