スキップしてコンテンツを表示

KeycloakからAWS Secret Managerの認証情報を使用する方法

0

KeycloakからAWS Secret Managerの認証情報を使用したく、こちらのサイトの手順を参考にコンテナを作成しました。 https://sabiz.hateblo.jp/entry/2023/04/29/150535

しかし、エラーが発生してしまい、原因がわかっていない状態です。

【実施した手順】

  1. Keycloakのコンテナを用意 →サイトの手順通り

  2. AWS Secrets Manager JDBC Libraryと依存jarを用意  →Maven Repositoryから以下jarを直接ダウンロード

  • aws-secretsmanager-jdbc-2.0.2.jar
  • aws-secretsmanager-caching-java-2.0.0.jar
  • aws-java-sdk-core-1.12.780.jar
  • aws-java-sdk-secretsmanager-1.12.780.jar
  • commons-logging-1.3.4.jar
  • ion-java-1.11.10.jar
  • jmespath-java-1.12.780.jar
  • joda-time-2.13.0.jar
  • org.jacoco.agent-0.8.12.jar
  1. コンテナにjarを配置 →サイトの手順通り

  2. コンテナ起動のためのパラメーター、環境変数の用意 →以下のパラメータを変更(posrgreを使用するため)

  • KC_DB:postgres
  • KC_DB_DRIVER:com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver
  • KC_DB_URL:jdbc-secretsmanager:postgresql://${RDS_HOST}:5432

【結果】 コンテナを起動し、keycloakのkc.sh buildを実行した際に以下のエラーが発生

ERROR: Failed to run 'build' command. Error details: java.lang.NullPointerException at java.base/java.util.Objects.requireNonNull(Objects.java:233) at java.base/java.util.ImmutableCollections$List12.<init>(ImmutableCollections.java:563) at java.base/java.util.List.of(List.java:937) at io.quarkus.paths.OpenContainerPathTree.getRoots(OpenContainerPathTree.java:96) at io.quarkus.paths.SharedArchivePathTree$CallerOpenPathTree.getRoots(SharedArchivePathTree.java:142) at io.quarkus.bootstrap.classloading.PathTreeClassPathElement.toString(PathTreeClassPathElement.java:214) at java.base/java.util.Formatter$FormatSpecifier.printString(Formatter.java:3158) at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:3036) at java.base/java.util.Formatter.format(Formatter.java:2791) at java.base/java.util.Formatter.format(Formatter.java:2728) at java.base/java.lang.String.format(String.java:4390) at org.jboss.logmanager.ExtFormatter.formatMessagePrintf(ExtFormatter.java:144) at org.jboss.logmanager.ExtFormatter.formatMessage(ExtFormatter.java:91) at org.jboss.logmanager.formatters.Formatters$16.renderRaw(Formatters.java:832) at org.jboss.logmanager.formatters.Formatters$JustifyingFormatStep.render(Formatters.java:227) at org.jboss.logmanager.formatters.MultistepFormatter.format(MultistepFormatter.java:90) at org.jboss.logmanager.ExtFormatter.format(ExtFormatter.java:58) at io.quarkus.bootstrap.logging.QuarkusDelayedHandler.close(QuarkusDelayedHandler.java:157) at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:35) at org.keycloak.quarkus.runtime.cli.command.Build.run(Build.java:81) at picocli.CommandLine.executeUserObject(CommandLine.java:2030) at picocli.CommandLine.access$1500(CommandLine.java:148) at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465) at picocli.CommandLine$RunLast.handle(CommandLine.java:2457) at picocli.CommandLine$RunLast.handle(CommandLine.java:2419) at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277) at picocli.CommandLine$RunLast.execute(CommandLine.java:2421) at picocli.CommandLine.execute(CommandLine.java:2174) at org.keycloak.quarkus.runtime.cli.Picocli.run(Picocli.java:147) at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:135) at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:106) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:62) at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:33)

【期待する動作】 kc.sh buildが成功すること

質問済み 1年前206ビュー
1回答
0

エラーの原因は、AWS Secrets Manager JDBC Libraryの設定や依存関係に問題がある可能性が高いです。以下の手順で問題を解決できる可能性があります:

  1. 依存関係の確認: 使用しているJARファイルのバージョンが互いに互換性があることを確認してください。特に、aws-secretsmanager-jdbc、aws-java-sdk-core、aws-java-sdk-secretsmanagerのバージョンが一致していることが重要です。

  2. クラスパスの設定: ダウンロードしたJARファイルが正しくクラスパスに追加されていることを確認してください。Keycloakのコンテナ内で、これらのJARファイルが適切なディレクトリ(例:/opt/keycloak/providers/)に配置されていることを確認します。

  3. 環境変数の設定: AWS認証情報が正しく設定されていることを確認してください。AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION などの環境変数が正しく設定されていることを確認します。

  4. シークレットの形式: AWS Secrets Managerに保存されているシークレットが正しい形式であることを確認してください。データベース接続情報を含む適切なJSONフォーマットになっているか確認します。

  5. ネットワーク接続: KeycloakコンテナがAWS Secrets ManagerとRDSに接続できることを確認してください。必要に応じて、VPCの設定やセキュリティグループを確認します。

  6. ドライバーの互換性: 使用しているPostgreSQLのバージョンとAWS Secrets Manager JDBC Driverが互換性があることを確認してください。

  7. Keycloakのログ: より詳細なログを確認するために、Keycloakのログレベルを上げてみてください。これにより、問題の根本原因に関するより具体的な情報が得られる可能性があります。

  8. クリーンビルド: 既存のビルドアーティファクトをクリアして、完全にクリーンな状態から再度ビルドを試みてください。

これらの手順を試しても問題が解決しない場合は、AWS Secrets Manager JDBCライブラリの公式ドキュメントを参照するか、AWSサポートに問い合わせることをお勧めします。
Sources
How to securely manage secrets in Java Applications Using AWS Secrets Manager | AWS re:Post
Connect to a SQL database using JDBC with credentials in an AWS Secrets Manager secret - AWS Secrets Manager
Features | AWS Secrets Manager | Amazon Web Services (AWS)

回答済み 1年前
  • そちらについては全て確認しましたが、状況は変わりませんでした。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

関連するコンテンツ