【问题标题】:Connect to postgres from wildfly without password无需密码即可从 Wildfly 连接到 postgres
【发布时间】:2021-12-25 21:14:40
【问题描述】:

我想在谷歌 kubernetes 引擎 (GKE) 中运行 keycloak(在 wildfly 中运行)并将我的数据存储在我想使用谷歌服务帐户连接到的托管 SQL 实例中( GSA)使用内置的 IAM 身份验证。我主要是通过设置(云 SQL 身份验证代理在 keycloak 旁边作为 sidecar 运行,代理成功地对托管实例进行身份验证,等等...),但我无法说服 wildfly 不提供密码时尝试通过 localhost 连接到数据库(sidecar 可用)。

作为我的问题的类比,我似乎有:psql -U <service_account>@<project>.iam 就像一个魅力,其中 psql -U <service_account>@<project>.iam -p 密码为空时失败。

我已经通过安装我自己的/opt/jboss/tools/cli/databases/postgres/change-database.cli 版本来调整使用jboss/keycloak docker 映像的容器,我在其中删除了设置密码的行。文件新看起来像:

/subsystem=datasources/data-source=KeycloakDS: remove()
/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:postgresql://${env.DB_ADDR:postgres}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}, driver-name=postgresql)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak})
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1")
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections)
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql.jdbc, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)

/subsystem=keycloak-server/spi=connectionsJpa/provider=default:write-attribute(name=properties.schema,value=${env.DB_SCHEMA:public})

(不带行的标准内容:/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}))。

我错过了什么?

【问题讨论】:

  • 您能否提供有关您的环境和方案的更多详细信息?你是如何配置你的keycloak的?是自定义配置还是GCP Documentation中提到的配置?您能否添加有关您的 SQL 数据库的更多详细信息?是在GKE cluster 还是你用过Cloud SQL/Spanner?如果我了解您可以使用Keycloak 连接到您的GKE clusterSQL instance,但您对Wildfly 有疑问?您的Wildfly 是否部署在 GKE 集群中?
  • 设置: - 添加了GSA(分配了cloudsql.instanceUsercloudsql.client) - db 是在Cloud SQL 及以上 GSA 中运行的 PostgreSQL v11,作为 SA 用户添加 - 用于GSA 存储在 GKE 机密中 - keycloak 作为部署在 GKE 中运行(图片:github.com/keycloak/keycloak-containers),云 SQL 代理作为 keycloak 旁边的 sidecar 运行。 keycloak 被告知连接到本地主机上的数据库(边车使代理在那里可用)
  • 另外,我调试了wildfly:看来org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnectionFactory#getConnectionProperties在任何情况下都设置了一个空密码props.setProperty("password", lcri.getPassword() == null ? "" : lcri.getPassword());

标签: postgresql google-cloud-platform wildfly google-kubernetes-engine google-cloud-sql


【解决方案1】:

典型。这是键盘和椅子之间的错误...

创建数据库用户时,我错过了最后的.iam(它看起来像<GSA_account_id>@<project_id>,但它必须像<GSA_account_id>@<project_id>.iam

【讨论】:

  • 它发生了 :D 我很高兴你能够解决它。请接受您的回答,它不会给您任何意义,但它会表明这是您的问题的解决方案。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 2014-12-30
  • 2011-09-14
相关资源
最近更新 更多