Spring Boot切换IAM认证后无法连接Cassandra问题排查
验证IAM角色权限与信任关系
确认目标IAM角色拥有Cassandra集群(如Amazon Keyspaces)的必要权限,比如cassandra:Connect、cassandra:Select等;同时检查角色的信任策略,是否允许Pod所在的AWS实体(EKS服务账号、EC2实例角色等)执行AssumeRole操作。可在Pod内执行aws sts get-caller-identity(需安装AWS CLI),确认当前生效的角色是否为预期角色,同时核查角色的权限边界是否覆盖Cassandra相关操作。检查临时凭证自动获取流程
确认Spring应用能正常从IAM角色获取临时凭证:可在代码中临时添加日志(注意不泄露敏感信息),打印DefaultAWSCredentialsProviderChain获取的凭证主体信息;或检查Pod环境变量是否存在AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,验证元数据服务是否可达,能否正常返回凭证。核对Cassandra驱动的IAM认证配置
检查AWSCqlSessionFactoryBean的关键配置:- 是否正确设置
authProvider为对应版本的AwsAuthProvider实现类 - 是否指定了Cassandra集群所在的AWS区域
- 接触点地址、端口是否正确(如Amazon Keyspaces的接触点为
cassandra.<region>.amazonaws.com,端口为9142) - 是否启用SSL配置,IAM认证依赖SSL连接,需确认驱动已配置
SslEngineFactory
- 是否正确设置
排查网络连通性
在Pod内部通过telnet <contact-point> <port>或nc -zv <contact-point> <port>测试与Cassandra接触点的连通性。若为EKS集群,检查节点安全组是否允许出站访问Cassandra端口(9142);若使用VPC端点访问Keyspaces,确认VPC端点配置、路由表条目是否正确。查看Cassandra侧的访问日志
若为自托管Cassandra,检查节点系统日志是否有认证失败记录;若为Amazon Keyspaces,查看CloudTrail中的Connect事件,确认是否有目标IAM角色的连接请求,以及请求被拒绝的具体原因(如权限不足、凭证无效)。确认依赖版本兼容性
核对Cassandra驱动(如datastax-java-driver-core)与AWS IAM认证相关依赖(如datastax-java-driver-aws、aws-java-sdk-bundle)的版本兼容性,部分旧版本驱动存在IAM角色凭证支持的bug,可尝试升级至稳定兼容版本。开启驱动调试日志
将com.datastax.oss.driver的日志级别设为DEBUG,查看连接过程中的详细错误信息,比如凭证是否正确传递、认证阶段是否有签名错误、凭证过期等具体提示。
内容的提问来源于stack exchange,提问作者Doolan

