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

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

  3. コンテナにjarを配置 →サイトの手順通り

  4. コンテナ起動のためのパラメーター、環境変数の用意 →以下のパラメータを変更(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が成功すること

質問済み 9ヶ月前81ビュー
1回答
0
承認された回答

エラーの原因を特定し、解決するためにいくつかの手順を試すことができます。

  1. JAR ファイルの配置: すべての必要な JAR ファイルが正しい場所に配置されていることを確認してください。Keycloak の providers ディレクトリに配置されているはずです。

  2. クラスパスの確認: Keycloak が起動時に必要な JAR ファイルを正しく読み込めているか確認してください。環境変数 JAVA_OPTS に "-verbose:class" を追加して、クラスの読み込みを詳細に表示させることができます。

  3. 依存関係の確認: ダウンロードした JAR ファイルのバージョンが互いに互換性があることを確認してください。特に AWS SDK のバージョンが一致していることが重要です。

  4. Secrets Manager の設定: AWS Secrets Manager に正しいシークレットが設定されていること、そしてそのシークレットに Keycloak からアクセスできることを確認してください。

  5. IAM ロールの確認: Keycloak を実行している EC2 インスタンスや ECS タスクに、Secrets Manager へのアクセス権限が付与されていることを確認してください。

  6. JDBC URL の確認: KC_DB_URL の設定が正しいことを確認してください。特に ${RDS_HOST} が正しい値に置き換えられていることを確認します。

  7. ログの確認: Keycloak のログを詳細に確認し、エラーの根本原因に関する追加情報がないか調べてください。

  8. クリーンビルド: 既存のビルドファイルをクリーンアップし、新しく build コマンドを実行してみてください。

  9. Keycloak のバージョン: 使用している Keycloak のバージョンと、AWS Secrets Manager JDBC Library のバージョンが互換性があることを確認してください。

これらの手順を試しても問題が解決しない場合は、AWS サポートに連絡するか、Keycloak のコミュニティフォーラムで助言を求めることをお勧めします。
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
How to use the AWS Secrets Manager Agent | AWS Security Blog

回答済み 9ヶ月前

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

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

関連するコンテンツ