トークン管理

RKE2は、ノード参加プロセスを保護し、データストアに保存される機密情報を暗号化するためにトークンを使用します。トークンは、参加するノードに対してクラスターを認証し、同時にノードをクラスターに認証します。

トークン形式

RKE2トークンは、安全な形式または短い形式のいずれかで指定できます。安全な形式が推奨されます。これは、クライアントが資格情報を送信する前に、参加するクラスターのアイデンティティを認証できるようにするためです。

セキュリティ

安全なトークン形式(時折「フル」トークンと呼ばれる)は、以下の部分を含みます:

<prefix><cluster CA hash>::<credentials>

  • prefix: トークン形式を識別する固定の`K10`プレフィックス

  • cluster CA hash:参加ノードにサーバーを認証するために使用されるクラスターのサーバーCA証明書のハッシュ。

    • 自己署名CA証明書の場合、これはディスクに保存されたPEM形式の証明書のSHA256ハッシュ値です。

    • カスタムCA証明書の場合、これはルート証明書のDERエンコーディングのSHA256ハッシュ値であり、一般的に証明書フィンガープリントとして知られています。

  • credentials:参加ノードをクラスターに認証するために使用されるユーザー名とパスワード、またはベアラートークン。

TLSブートストラッピング

安全なトークンが指定されている場合、参加ノードは資格情報を送信する前に接続しているサーバーのアイデンティティを検証するために以下の手順を実行します:

  1. TLS検証が無効になっている場合、参加するサーバーの`/cacerts`からCAバンドルをダウンロードします。

  2. 上記のようにCA証明書のSHA256ハッシュを計算します。

  3. 計算されたSHA256ハッシュをトークンのハッシュと比較します。

  4. ハッシュが一致する場合、サーバーによって提示された証明書がサーバーのCAバンドルによって検証できることを確認します。

  5. サーバー証明書が有効な場合、トークンの種類に応じて基本認証またはベアラートークン認証を使用してクラスターに参加するための資格情報を提示します。

短整数

短いトークン形式には、クラスターに参加するノードを認証するために使用されるパスワードまたはベアラートークンのみが含まれます。

短いトークンが使用される場合、参加ノードはサーバーによって提示されたCAバンドルを暗黙的に信頼します。TLSブートストラッピングプロセスのステップ2-4はスキップされます。初期接続は 中間者攻撃に対して脆弱である可能性があります。

トークンの種類

RKE2は3種類のトークンをサポートしています。デフォルトではサーバートークンのみが利用可能であり、追加のトークンタイプは管理者によって構成または作成する必要があります。

タイプ CLIオプション 環境変数

サーバ

--token

RKE2_TOKEN

エージェント

--agent-token

RKE2_AGENT_TOKEN

ブートストラップ

n/a

n/a

サーバ

クラスター内の最初のサーバーを起動する際にトークンが提供されない場合、ランダムなパスワードで1つが作成されます。サーバートークンは常に`/var/lib/rancher/rke2/server/token`に安全な形式で書き込まれます。

サーバートークンは、サーバーノードとエージェントノードの両方をクラスターに参加させるために使用できます。サーバートークンにアクセスできる人は、実質的にクラスターへの完全な管理者アクセスを持っています。このトークンは慎重に保護する必要があります。

サーバートークンは、ブートストラップデータとして知られるデータストアに永続化される機密情報を暗号化するための PBKDF2パスフレーズとしても使用されます。ブートストラップデータは、新しいサーバーノードをセットアップしたり、スナップショットから復元したりするために不可欠です。この理由から、トークンはクラスターのデータストア自体と一緒にバックアップする必要があります。

カスタムCA証明書が使用されていない限り、クラスター内の最初のサーバーを起動する際には、短い(パスワードのみ)トークン形式のみが使用できます。これは、サーバーが自己署名のクラスターCA証明書を生成するまで、クラスターCAハッシュを知ることができないためです。

カスタムCA証明書の使用に関する詳細は、`rke2 certificate`ドキュメントを参照してください。

エージェント

デフォルトでは、エージェントトークンはサーバートークンと同じです。エージェントトークンは、クラスターが起動する前または後に、すべてのサーバーのCLIオプションまたは環境変数を変更することによって設定できます。エージェントトークンは、サーバートークンと同様に静的に構成されており、期限切れになりません。

エージェントトークンは、`/var/lib/rancher/rke2/server/agent-token`に安全な形式で書き込まれます。エージェントトークンが指定されていない場合、このファイルはサーバートークンへのリンクです。

ブートストラップ

RKE2は、動的に生成され、自動的に期限切れになるエージェント ブートストラップトークンをサポートしています。

RKE2トークンCLI

RKE2トークンCLIツールは、以下を処理します:

  • ブートストラップトークンのライフサイクル。これは、kubeadmトークンブートストラップトークンと同じ生成および検証コードを使用しています。両方のCLIは似ています。

  • サーバートークンのローテーション

NAME:
   rke2 token - Manage tokens

USAGE:
   rke2 token command [command options] [arguments...]

COMMANDS:
   create    Create bootstrap tokens on the server
   delete    Delete bootstrap tokens on the server
   generate  Generate and print a bootstrap token, but do not create it on the server
   list      List bootstrap tokens on the server
   rotate    Rotate original server token with a new server token

OPTIONS:
   --help, -h  show help

rke2 token create [token]

新しいブートストラップトークンを作成します。`[token]`は、`rke2 token generate`によって生成された実際に書き込むトークンです。トークンが指定されていない場合は、ランダムなものが生成されます。

クラスターCAハッシュを含む安全な形式のトークンがstdoutに書き込まれます。このコマンドの出力は保存する必要があります。トークンの秘密部分は再表示できません。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:"/var/lib/rancher/rke2")

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

`--description`の値

このトークンの使用方法に関するわかりやすい説明

`--groups`の値

このトークンが認証に使用される際に、認証対象として扱われる追加のグループ。

`--ttl`の値

トークンが自動的に削除されるまでの期間(例:1秒、2分、3時間)。「0」に設定すると、トークンは決して期限切れになりません(デフォルト:24時間0分0秒)

`--usages`の値

このトークンの使用方法を説明します。(デフォルト: "署名、認証")

rke2 token delete

1つ以上のブートストラップトークンを削除します。完全なトークンを提供することも、トークンIDのみを提供することもできます。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/rke2)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

rke2 token generate

ランダムなブートストラップトークンを生成します。

トークンを生成するためにこのコマンドを使用する必要はありません。[6 alphanumeric characters].[16 alphanumeric characters]の形式で、最初の部分がトークンID、2番目の部分が秘密である限り、自分で行うことができます。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/rke2)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

rke2 token list

ブートストラップトークンのリストを表示し、そのID、説明、および残りの有効期限を示します。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/rke2)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

`--output`の値

出力形式。有効なオプション: テキスト、JSON(デフォルト: "テキスト")

サーバートークンのローテーション

`rke2 token rotate`コマンドを使用すると、サーバーブートストラップに使用される元のトークンをローテーションおよび置き換えることができます。コマンドを単一のサーバーで実行した後、元のトークンを使用していたすべてのサーバーとエージェントは、新しいトークンで再起動する必要があります。元のトークンは無効になり、新しいサーバーやエージェントをクラスターに参加させるために使用することはできません。

フラグ 説明 デフォルト

`--data-dir`の値

状態を保持するフォルダー

/var/lib/rancher/rke2

`--kubeconfig`の値

サーバーへの認証のためのKubeconfig

/etc/rancher/rke2/rke2.yaml

--server

接続するサーバー

"https://127.0.0.1:9345"

`--token`の値

サーバーまたはエージェントをクラスターに参加させるために使用される既存のトークン

N/A

`--new-token`の値

元のトークンを置き換える新しいトークン

指定されていない場合、ランダムな16文字のトークンが生成されます。