rekey について
rekeyは、対応プロバイダーのAPIキーやトークンをローテーションするCLI兼MCPサーバーです。新しい認証情報を配布して検証してから旧キーを退役させ、OSのキーチェーンに認証情報を保存し、MCP応答には秘密値を含めません。
主な機能
- 01対応プロバイダー間でのキーのローテーション
- 02設定済みの保存先への新しい認証情報の配布
- 03旧キー退役前の新しい認証情報の検証
- 04OSキーチェーンへのログイン情報の保存
- 05TOMLによる繰り返しローテーションの設定
- 06MCP書き込み操作の明示的な有効化
活用シーン
- 01GitLabトークンを.envファイルへローテーション
- 02新しいキーをGitHub ActionsやAWS SSMへ配布
- 03設定済みのローテーションをスクリプトやCIで実行
- 04秘密値を公開せずMCPクライアントからキー一覧を確認
MCP 対応
stdio MCPサーバーは、プロバイダー、接続状態、キー一覧の読み取り専用ツールを標準で提供します。ローテーションと退役には明示的なフラグが必要で、秘密値がクライアントに返されることはありません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
rekey
1 つの CLI から、プロバイダー間で API キーとトークンをローテーションします。新しいキーを発行し、 それを使用するすべての場所に反映して、検証し、古いキーを無効化します。MCP サーバーも含まれています。
管理しているアカウントにのみアクセスします。各プロバイダーで使用するのは、ご自身の認証情報です。
CLI — GitLab トークンを CLI から直接 .env ファイルにローテーションします。

MCP — Claude が rekey mcp を通じて同じトークンをローテーションします。シークレットが
モデルに渡ることはありません。

インストール
macOS、Linux、Windows 向けのビルド済みバイナリ: リリース。
または、Rust(stable)を使います。
cargo install rekey
OS キーチェーンへの対応(macOS Keychain、Windows Credential Manager、Linux Secret Service)は組み込みです。
クイックスタート
まず、使い捨ての GitLab トークンで試してください。以下のコマンドはすべて安全に
コピーできます。28550311 を手順 3 で確認したご自身の ID に置き換えてください。
1. ローテーション用の使い捨てトークンを作成します。 GitLab → Access tokens で、名前を kr-test(スコープは任意)にしてトークンを作成します。
2. ログインします。 GitLab のトークンページが、名前と api スコープが入力された状態で開きます。
Create token をクリックし、生成されたトークンを貼り付けます(入力内容は表示されません)。
rekey login gitlab
Checking with GitLab…
✓ Logged in to GitLab as @you. Saved to your macOS Keychain.
rekey now works from any terminal — nothing to export.
3. キー ID を確認します。
rekey list gitlab
ID NAME
28550267 rekey (signed in with this key)
28550311 kr-test
4. .env ファイルにローテーションします。 rekey が実行計画を表示し、確認を待ちます。
rekey rotate gitlab 28550311 --dotenv /tmp/kr-test.env:KR_TEST_TOKEN
Here's what will happen:
1. GitLab replaces "kr-test" with a new token and immediately revokes the old one. This can't be undone.
2. The new token is saved to KR_TEST_TOKEN in /tmp/kr-test.env.
3. rekey checks that the new token works.
Go ahead? [Y/n] y
Rotating kr-test…
· Rotating (provider revokes old token immediately)…
· Updating 1 consumer(s)…
· Verifying new token…
✓ Rotated successfully.
New key id: 28550312
Updated: KR_TEST_TOKEN in /tmp/kr-test.env
Old token was revoked by the provider.
5. 確認して、後片付けをします。
cat /tmp/kr-test.env # KR_TEST_TOKEN=glpat-…
rm /tmp/kr-test.env
その後、GitLab で kr-test を削除します。
実際のキーの場合: 引数なしで rekey rotate gitlab を実行すると、キーと保存先を選択できます。その内容を
rekey.toml に保存できるため、次回のローテーションは 1 つのコマンドで実行できます。スクリプト/CI では:
rekey rotate gitlab 28550311 --dotenv .env --yes --no-input
コマンド
| コマンド | |
|---|---|
login [provider] | プロバイダーのトークンページを開きます(GitLab では入力済み)。貼り付けたトークンを受け取り、検証して OS キーチェーンに保存します。セルフホストの GitLab/Datadog サイトでは --url を指定します。プロバイダーを指定しない場合は、状態を表示します。 |
logout <provider> | 保存済みの認証情報を削除します(トークン自体は失効しません)。 |
connect <provider> | 認証情報とキー管理へのアクセスを確認します。 |
list <provider> | キーの一覧を表示します。1 列目は、他のコマンドで指定する ID です。 |
rotate <provider> [id] | 1 つのキーをローテーションします。 |
rotate-all <provider> | 保存先が設定されているすべてのキーをローテーションします。ログインに使用しているキーはスキップします。 |
retire <provider> [id] | 古いキーを無効化(対応している場合)または削除します。無効化済みのキーを削除するには --delete を指定します。 |
mcp | stdio で MCP サーバーを起動します。 |
グローバルオプション:--config <path>、--no-input(プロンプトを表示せずに失敗します)。
--yes は確認を省略します。引数を省略すると、TTY では入力を求められます。フラグは
どの順序でも指定できます。標準出力には list の出力と --print-secret の値のみが出力されます。
それ以外はすべて標準エラー出力に出力されます。
保存先
新しいシークレットの保存先が 1 つ以上指定されていない場合、rotate は開始されません。
| フラグ | 保存先 |
|---|---|
--dotenv <path>[:VAR] | .env ファイルの VAR を設定します。プロバイダーごとに既定の VAR が設定されます。AWS の場合は AWS_ACCESS_KEY_ID も書き込みます。 |
--gh-secret <owner/repo>:<NAME> | gh を使って GitHub Actions のシークレットに保存します(stdin 経由)。 |
--ssm <name>:<region> | aws を使って AWS SSM の SecureString に保存します(stdin 経由)。 |
--secret-file <path> | ファイルに保存します。モードは 0600 です。 |
--secret-dir <dir> | rotate-all:キーごとに 0600 のファイルを 1 つ作成します。 |
--keychain | OS キーチェーンのサービス rekey に保存します。 |
--print-secret | 標準出力に出力します。 |
繰り返し指定できるフラグ:--dotenv、--gh-secret、--ssm。
--delete-old-now は、新しいキーの反映直後に古いキーを削除します。
Config
./rekey.toml、次に ~/.config/rekey/config.toml の順に読み込みます。シークレットは含まれません。対話型の rotate でエントリを作成できます。
[[keys]]
provider = "gitlab"
name = "ci-deploy" # match on id, name and/or principal
consumers = [
{ type = "dot_env_file", path = ".env", variable = "GITLAB_TOKEN" },
{ type = "github_actions_secret", repo = "me/app", secret_name = "GITLAB_TOKEN" },
]
[[keys]]
provider = "aws"
principal = "ci-user" # IAM user; survives the new key id
consumers = [
{ type = "dot_env_file", path = ".env", variable = "AWS_SECRET_ACCESS_KEY", id_variable = "AWS_ACCESS_KEY_ID" },
{ type = "aws_ssm_parameter", name = "/ci/aws", region = "us-east-1" },
]
コンシューマーの種類:dot_env_file、github_actions_secret、aws_ssm_parameter、
file、keychain。ローテーションごとに新しい ID を発行するプロバイダーでは、
name/principal で照合します。相対パスは設定ファイルを基準に解決されます。完全な例:
rekey.toml.example。
Credentials
検索順序:環境変数 → 保存済みのログイン(rekey login)→ プロンプト
(TTY の場合のみ。保存するかどうかを確認します)。フラグとして渡されることはありません。rekey がサインインに使用するトークンをローテーションすると
(GitLab、Cloudflare)、保存済みのログインが更新されます。
REKEY_DISABLE_KEYCHAIN=1 を設定すると、キーチェーンの読み書きが無効になります。
Providers
| プロバイダー | 方式 | ローテーション対象 | 認証情報 | 備考 |
|---|---|---|---|---|
aws | overlap | IAM アクセスキー | aws CLI セッション、AWS_PROFILE | ユーザーごとに最大 2 個のキーです。両方存在する場合は処理を拒否します。古いキーは Inactive になります。 |
gitlab | atomic | パーソナルアクセストークン | GITLAB_TOKEN(api スコープ)、GITLAB_URL、GITLAB_TOKEN_EXPIRY_DAYS | |
cloudflare | atomic | ユーザー API トークン | CLOUDFLARE_API_TOKEN(API Tokens: Edit) | トークン ID は固定です。 |
datadog | overlap | API キー | DD_API_KEY、DD_APP_KEY、DD_SITE | 無効化状態はありません。 |
npm | overlap | クラシックトークン | npm CLI セッション、NPM_REGISTRY | CLI の出力を解析します。詳細設定可能なトークンには対応していません。 |
dockerhub | overlap | パーソナルアクセストークン | DOCKERHUB_USERNAME、DOCKERHUB_PASSWORD | 新しいトークンには repo:read+repo:write が付与されます。 |
openai | overlap | 組織管理者キー | OPENAI_ADMIN_KEY | |
anthropic | manual | — | ANTHROPIC_ADMIN_KEY | 作成 API はありません。rotate は Console での手順を表示し、retire は無効化します。 |
twilio | overlap | 標準 API キー | TWILIO_ACCOUNT_SID、TWILIO_AUTH_TOKEN、TWILIO_API_USER | |
sendgrid | overlap | API キー | SENDGRID_API_KEY | 古いキーのスコープをコピーします。 |
github-app | ephemeral | インストールトークン | GITHUB_APP_ID、GITHUB_APP_PRIVATE_KEY_PATH または GITHUB_APP_PRIVATE_KEY | 有効期間は約 1 時間です。失効処理は不要です。 |
AWS には aws CLI、npm には npm、--gh-secret には gh が必要です。
別のプロバイダーをお望みですか? リクエストする。
Rotation semantics
| 方式 | 順序 | 失敗時の処理 |
|---|---|---|
| overlap | 作成 → 検証 → 配信 → 古いキーを無効化 →(古いキーを削除) | 検証に失敗するか、すべての配信に失敗した場合:新しいキーを削除し、変更はありません。一部の配信に失敗した場合:両方のキーが有効なままになり、終了コード 1 が返されます。 |
| atomic | ローテーション(プロバイダーにより古いキーが失効)→ 配信 → 検証 | 元に戻せません。すべての配信に失敗した場合:シークレットを rekey-rescue-*.secret(0600)に書き込みます。 |
| ephemeral | 発行 → 検証 → 配信 | 古いトークンは自動的に期限切れになります。 |
| manual | — | 手動での手順を表示します。 |
--delete-old-now を指定しない場合、無効化状態のない古いキーは有効なままです。
出力に retire コマンドが表示されます。対応が必要な項目がある場合、終了コードは 0 以外になります。
MCP
rekey login gitlab
claude mcp add rekey -- rekey mcp --config ~/.config/rekey/config.toml
| ツール | 有効化方法 | |
|---|---|---|
list_providers、check_connection、list_keys | デフォルト | 読み取り専用です。 |
rotate_key | --allow-rotate | 設定内のコンシューマーにのみ配信します。宛先の引数はありません。 |
retire_key | --allow-retire | サーバー自身のログインキーは拒否します。 |
シークレットの値がクライアントに返されることはありません。認証情報は環境変数または保存済みのログインから取得されます。macOS では、新しいビルドをインストールした後、キーチェーンへのアクセスを一度許可してください。
Security
- シークレットは argv ではなく、標準入力経由でサブプロセスに渡されます。
- rekey が作成するファイルの権限は 0600 です。既存の
.envの権限は保持され、書き込みはアトミックに行われます。 - シークレットの値は
--print-secretを指定した場合にのみ表示されます。 - 脆弱性はリポジトリの Security タブから非公開で報告してください。
Contributing
- 新しいプロバイダーまたは機能:issue を作成してください。
- コード:CONTRIBUTING.md を参照してください。プロバイダーは
Connectorトレイトを実装する 1 つのファイルです。
Links
- crates.io: rekey
- MCP Registry name — mcp-name: io.github.Ezra-Black/rekey
Credits
Built by Ezra Black — ezrablack.dev.
License
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。