JetBrainsは、TeamCityプラットフォーム向けの新しいOIDC JWTプラグインを発表しました。このプラグインは、CI/CD環境内に固定の鍵やパスワードを保持することなく、ビルドがAWS、Google Cloudなど、OpenID Connectをサポートするサービスで認証できるようにするものです。このプラグインは、ビルドパイプラインにおける運用上およびセキュリティ上のリスク要因の一つに対処します。固定認証情報はログやビルドファイルを通じて漏えいする可能性があり、セキュリティ要件を満たすために通常は定期的なローテーションも必要です。
認証はどのように機能するのか?
このフローでは、TeamCityがビルドプロセスに代わって、暗号学的に署名されたJSON Web Tokenを発行します。トークンには、ワークロードの識別情報、有効期間、対象となるオーディエンス、発行者のURLを示すクレームが含まれます。トークンを受け取った外部サービスは、発行者に関連付けられた公開鍵を使用して署名を検証し、その後、対象オーディエンスと有効期間を確認してから、クレームを利用してビルドプロセスを認証します。
一部のサービスはIDプロバイダーのトークンを直接受け入れますが、別のサービスではトークン交換を実行して独自の一時的な認証情報を発行します。JetBrainsは、このフローの設定の詳細を各サービスに委ねており、オーディエンスと検証条件を設定する際にはAWSまたはGoogle Cloudのドキュメントを参照するよう利用者に呼びかけています。
このプラグインはTeamCityに何を追加するのか?
OIDC JWTは、トークンの発行に必要なIDプロバイダー機能をTeamCityサーバーに追加します。このプラグインは、RSAまたはECDSAベースのアルゴリズムによるトークン署名をサポートしており、Webインターフェースまたは認証済みリクエスト専用のHTTPエンドポイントから署名鍵をローテーションできます。JetBrainsによると、デフォルトでは、鍵をローテーションしても実行中のビルドが停止したり、以前に発行されたトークンが無効化されたりすることはありません。
インターネットからアクセス可能なTeamCityサーバー向けに、このプラグインは.well-known/openid-configurationドキュメントと公開JWKS鍵セットを提供します。インターネットに公開されていないサーバーでは、カスタムの発行者URLを設定し、HTTPSを使用する公開ホスト上で識別ドキュメントをホストできます。この場合も、TeamCityサーバー自体を公開する必要はありません。また、このプラグインは、他のプラグインが新しい署名方式を追加できるAPIを提供しており、ハードウェアセキュリティモジュール(HSM)や、Google Cloud KMSなどの鍵管理サービスとの統合も可能です。
トークン発行のオプションと利用要件
JetBrains Marketplaceからプラグインをインストールして有効化した後、Admin | Integrations | OIDC Tokensから管理できます。Java 17が必要で、TeamCity 2025.11以降をサポートします。管理者は、発行者URL、署名設定、署名鍵を管理できます。
このプラグインには、トークンを発行する2つのビルド機能があります。1つ目のOIDC Token (in build parameters)は、ビルド開始時にトークンを生成し、指定されたビルドパラメーターに保存します。有効期間は設定可能で、デフォルトではビルドのタイムアウト時間となり、タイムアウトが指定されていない場合は10分です。また、1つまたは複数のオーディエンス向けにトークンを発行できます。サービスが単一のオーディエンス向けに個別のトークンを必要とする場合は、別個の機能を追加することも可能です。
2つ目のOIDC Token (on demand via HTTP request)は、長時間実行されるビルドに適しています。実行中にスクリプトからHTTP経由で短期間有効なトークンを要求できます。これらのトークンの有効期間は常に5分で、変更できません。
なぜこのニュースが重要なのか?
ここでの実務上の変化は、長期間有効なシークレットによる認証から、ビルドプロセスに関連付けられ、有効期間とオーディエンスが限定されたトークンによる認証へ移行することです。これにより、トークンが漏えいした場合の価値は低下しますが、権限を適切に設定し、発行者URLとオーディエンスを慎重に検証する必要性がなくなるわけではありません。JetBrainsは、プラグインの設定を変更すると既存の統合が機能しなくなる可能性があると警告しており、ビルドをOIDC認証に接続する前に設定することを推奨しています。また、このソリューションの有効性は対象サービスがOIDCをサポートしているかどうかと、その公式設定に左右されるため、統合ごとに確認する必要があります。