管理者ブートストラップとリカバリー

管理者アカウントをブートストラップおよびリカバリーする方法を学びます。

一時的な管理者アカウント

以下のいずれかの方法で作成されたユーザーまたはサービス管理者アカウントは**一時的なもの**です。これは、アカウントが永続的でより安全な管理者アクセスを取得するために必要な操作を実行するために必要な期間のみ存在すべきであることを意味します。その後、アカウントは手動で削除する必要があります。管理コンソールの警告バナー、ラベル、ログメッセージなど、さまざまなUI/UX要素は、アカウントが一時的なものであることをKeycloak管理者に示します。

Keycloak起動時の一時的な管理者アカウントのブートストラップ

Keycloakのstartおよびstart-devコマンドは、一時的な管理者ユーザーと管理者サービスアカウントの両方をブートストラップするためのオプションをサポートしています。これらのオプションは標準の構成オプションであるため、環境変数やCLIパラメーターなどの構成ソースのいずれかで指定できます。たとえば、次の例は、CLIパラメーター付きのstartおよびstart-devコマンドを使用して、一時的な管理者ユーザーと管理者サービスアカウントをそれぞれブートストラップする方法を示しています。

bin/kc.[sh|bat] start --bootstrap-admin-username tmpadm --bootstrap-admin-password pass
bin/kc.[sh|bat] start-dev --bootstrap-admin-client-id tmpadm --bootstrap-admin-client-secret secret

ユーザー名またはクライアントIDの値は省略できます。詳細については、以下の「デフォルト値」セクションを参照してください。

これらのオプションの目的は、一時的な管理者アカウントをブートストラップすることのみです。これらのアカウントは、マスターレルムがまだ存在しないKeycloakサーバーの最初の起動時にのみ作成されます。アカウントは常にマスターレルムに作成されます。管理者アクセスを回復するには、以下のセクションで説明されている専用コマンドを使用してください。

専用コマンドを使用した管理者ユーザーまたはサービスアカウントのブートストラップ

bootstrap-adminコマンドは、Keycloakの最初の起動前でも実行できます。このコマンドを使用する前に、すべてのKeycloakノードを停止する必要があることに注意してください。その実行は初期マスターレルムの作成をトリガーし、その結果、サーバーが初めて起動されるときに、管理者ユーザーとサービスアカウントをブートストラップするための起動オプションは後で無視されます。

さらに、Keycloakサーバーが起動されるのと同じオプション(例:dbオプション)で専用コマンドを使用することを強くお勧めします。

Keycloakの構成で概説されているように、buildコマンドで最適化されたバージョンのKeycloakを構築した場合、--optimizedコマンドラインオプションを使用して、Keycloakにビルドチェックをスキップさせて起動時間を短縮します。これを行う場合は、コマンドラインからビルド時間オプションを削除し、ランタイムオプションのみを保持してください。

--optimizedを使用しない場合、bootstrap-adminコマンドは暗黙的に最適化されたイメージを作成または更新することに注意してください。サーバーインスタンスと同じマシンからコマンドを実行している場合、これはサーバーの次回の起動に影響を与える可能性があります。

管理者ユーザーの作成

一時的な管理者ユーザーを作成するには、次のコマンドを実行します。

bin/kc.[sh|bat] bootstrap-admin user

他のパラメーターが指定されていない場合、または対応する環境変数が設定されていない場合、必要な情報を入力するように求められます。ユーザー名の値は、デフォルト値を使用するために省略できます。詳細については、以下の「デフォルト値」および「環境変数」セクションを参照してください。

または、パラメーターをコマンドで直接指定することもできます。

bin/kc.[sh|bat] bootstrap-admin user --username tmpadm --password:env PASS_VAR

このコマンドは、ユーザー名tmpadmと環境変数から取得したパスワードを持つ一時的な管理者ユーザーを作成します。

サービスアカウントの作成

自動化されたシナリオでは、一時的な管理者サービスアカウントは、一時的な管理者ユーザーよりも適切な代替手段となる場合があります。

一時的な管理者サービスアカウントを作成するには、次のコマンドを実行します。

bin/kc.[sh|bat] bootstrap-admin service

同様に、対応する環境変数または追加のパラメーターが設定されていない場合、必要な情報を入力するように求められます。クライアントIDの値は、デフォルト値を使用するために省略できます。詳細については、以下の「デフォルト値」および「環境変数」セクションを参照してください。

または、パラメーターをコマンドで直接指定することもできます。

bin/kc.[sh|bat] bootstrap-admin service --client-id tmpclient --client-secret:env=SECRET_VAR

このコマンドは、クライアントID tmpclientと環境変数から取得したシークレットを持つ一時的な管理者サービスアカウントを作成します。

セキュリティが強化されたレルムへのアクセスの再取得

パスワードレス、OTP、またはその他の高度な認証方法を、管理者アクセスが失われたレルムに強制できます。そのような場合、レルムへの失われた管理者アクセスを回復するには、管理者サービスアカウントを作成する必要があります。サービスアカウントが作成されたら、必要なすべての操作を実行するには、Keycloakインスタンスに対する認証が必要です。

bin/kcadm.[sh|bat] config credentials --server https://#:8080 --realm master --client <service_account_client_name> --secret <service_account_secret>

次に、credentialIdを取得します。この例では、OTPクレデンシャルが関連するものです。次のコマンドを使用してCredentialRepresentationオブジェクトの配列を取得し、typeotpに設定されているオブジェクトを見つけます。

bin/kcadm.[sh|bat] get users/{userId}/credentials -r {realm-name}

最後に、取得したIDを使用して、高度な認証方法(この場合はOTP)を削除できます。

bin/kcadm.[sh|bat] delete users/{userId}/credentials/{credentialId} -r {realm-name}

デフォルト値

起動シナリオと専用コマンドシナリオの両方で、ユーザー名とクライアントIDはオプションであり、ユーザーアカウントとサービスアカウントの両方でそれぞれtemp-adminがデフォルトになります。

パラメータープロンプトの無効化

パラメーターのプロンプトを無効にするには、--no-promptパラメーターを使用できます。例:

bin/kc.[sh|bat] bootstrap-admin user --username tmpadm --no-prompt

対応する環境変数が設定されていない場合、コマンドは必須のパスワードパラメーターが欠落していることを示すエラーメッセージで失敗します。

--no-promptパラメーターは、ユーザー名またはクライアントIDを省略する必要がある場合に役立ちます。例:

bin/kc.[sh|bat] bootstrap-admin user --password:env PASS_VAR --no-prompt

これにより、確認を求めるプロンプトなしに、デフォルトのユーザー名を持つ一時的な管理者ユーザーが作成されます。詳細については、上記の「デフォルト値」セクションを参照してください。

環境変数

bootstrap-admin userコマンドの場合、ユーザー名とパスワードの両方を環境変数としてオプションで設定できます。

bin/kc.[sh|bat] bootstrap-admin user --username:env <YourUsernameEnv> --password:env <YourPassEnv>

bootstrap-admin serviceコマンドの場合、クライアントIDはオプションであり、temp-adminがデフォルトですが、クライアントシークレットは環境変数として設定する必要があります。

bin/kc.[sh|bat] bootstrap-admin service --client-id:env <YourClientIdEnv> --client-secret:env <YourSecretEnv>
このページについて