TeamCity オンプレミス 2024.03 ヘルプ

信頼できないビルド

信頼できないビルドセクションでは、外部ユーザーが作成した悪意のあるコードが TeamCity で実行されるのを防ぐことを目的とした変更検証プロセスを設定できます。

Pending approval

共通情報

VCS ルートが、外部ユーザーがプルリクエストを介して変更をコミットできる設定になっているパブリックリポジトリをターゲットにしている場合、新しい変更が検出されると VCS トリガーが自動的に新しいビルドを開始し、次のいずれかが当てはまる場合、TeamCity は悪意のあるコードを実行できます。

  • プルリクエスト機能が有効になっており、その設定によりすべてのユーザーからの変更のビルドが許可されます (プルリクエストのフィルタリングは「全員」に設定されています)。

  • プロジェクトの VCS ルートのブランチ仕様には、プルリクエストブランチ (たとえば、GitHub の場合は refs/pull/*) が含まれます。

この場合、外部ユーザーはパブリックリポジトリをフォークし、悪意のある変更を導入して、プル (マージ) リクエストを送信する可能性があります。TeamCity はこのリクエストを検出し、これらの変更を含む新しいビルドをトリガーします。

正確なビルド構成の設定と望ましい動作に応じて、次の調整を行う必要があります。

  • TeamCity がプルリクエストブランチを自動的にビルドしないようにするには、VCS トリガーのブランチ仕様を変更します。ビルドをトリガーする権限を持つ TeamCity ユーザーは、適切なコードレビューなしにビルドを手動で開始できるため、このソリューションではセキュリティリスクが完全に軽減されるわけではありません。

  • 外部ユーザーから送信されたリクエストを無視するには、プルリクエスト機能の設定で作成者によるフィルタリングを設定します。このオプションにより、外部ユーザーのリクエストが完全に遮断され、TeamCity からそのユーザーのブランチにアクセスできなくなります。

  • 外部ユーザーのビルド要求を、信頼できるレビュー担当者による必須の検証に合格するまで延期するには、信頼できないビルド設定を構成します。この構成はトリガー設定に依存せず、自動的に (トリガーによって) 開始されたビルドと手動で (TeamCity ユーザーによって) 開始されたビルドの両方に対して検証が必要です。

信頼できないビルド設定を構成する

信頼できないビルドに対応する設定はプロジェクトレベルで構成されます。つまり、このプロジェクトとそのサブプロジェクトが所有するすべてのビルド構成に影響します。

  1. プロジェクト設定 ( 管理 | <あなたのプロジェクト>) に移動し、サイドバーの信頼できないビルドセクションに切り替えます。

    Untrusted build settings
  2. デフォルトのアクションを選択してください。

    • 何もしない - 外部ユーザーが作成した変更を処理するビルドでは、開始するために追加の承認は必要ありません。

    • ビルドのキャンセル - TeamCity は、外部ユーザーが作成した変更を処理するビルドをキャンセルします。これには、プルリクエスト機能によって開始されたビルドと手動で開始されたビルドの両方が含まれます。

    • 承認が必要 - 外部ユーザーが作成した変更を処理するビルドはキューに入れられますが、必要な数のレビュー担当者が承認するまで開始されません。

  3. 信頼できないビルドをログに記録するかどうかを選択します。TeamCity はビルドログでビルドが信頼できないことを警告します ...

    Warning in build log

    ... また、対応するメッセージを teamcity-server.log に書き込みます (選択されたデフォルトのアクションに関係なく)。

    [2024-02-21 11:31:05,337] WARN — jetbrains.buildServer.SERVER — Build(promotion id: 7004, configuration id: MyProject_Build) detected as untrusted. Reasons: {Pull request from a fork in a public repository (target repository url: https://github.com/...)} Build URL: http://localhost:8111/buildConfiguration/MyProject_Build/-1
  4. 承認規則フィールドを使用して、受信した変更を確認し、対応するビルドを承認またはブロックするユーザーを任命します。user:<username> 構文を使用して個々のユーザーを任命するか、信頼できるすべてのレビュー担当者を専用のユーザーグループに追加して、group:<group key>:<count> 構文を使用します。count は、ビルドを許可するために必要な投票数です。

  5. タイムアウト (分単位) を設定すると、このしきい値よりも長く検証されていないキュー内のビルドが自動的にキャンセルされます。

  6. 手動で開始されたビルドを承認する設定がオンの場合、レビュー担当者 ( 承認規則に追加された人物) によって開始されたビルドは、自動的にその人からの承認投票を取得します。新しいビルドをユーザーグループによって検証する必要がある場合は、他の人が残りの投票を行ってこのビルドを開始する必要があることに注意してください。

Kotlin DSL

次の Kotlin DSL スニペットは、コード内で信頼できないビルドを構成する方法を示しています。

project { features { untrustedBuildsSettings { id = "PROJECT_EXT_42" defaultAction = UntrustedBuildsSettings.DefaultAction.APPROVE enableLog = true approvalRules = "group:CODE_REVIEWERS:2" timeoutMinutes = 120 } } }

関連ページ:

ビルド承認

ビルド承認ビルド機能を使用すると、ユーザーは承認を使用してビルドの開始を手動で制御できます。このビルド機能により、承認ルールで定義された個々のユーザーまたはグループによって承認されない限り、ビルドが開始されないことが保証されます。この機能は、デプロイ、リソースを消費するビルド、リソースの削除操作など、複数の人の承認が必要なプロセスに役立ちます。承認により、ユーザーが誤ってビルドをトリガーすることも防止されます。指定された期間内にビルドが承認されない場合、ビルドはキャンセルされます。承認設定を作成...

VCS トリガーの設定

VCS トリガーは、TeamCity が構成済みの VCS ルートの新しい変更を検出するたびに新しいビルドを自動的に開始し、保留中の変更の変更を表示します。複数の VCS トリガーをビルド構成に追加できます。ビルド構成に保留中の変更があると、デフォルト設定の新しい VCS トリガーがビルドをトリガーします。構成されている場合、VCS コミットフックを尊重する VCS ルートの変更間隔のチェックに従って、バージョン管理が変更についてポーリングされます。チェックアウトルールに一致した変更のみが保留中と...

プルリクエスト

プルリクエストビルド機能は、GitHub、Bitbucket サーバー、Bitbucket クラウド、GitLab、Azure DevOps、JetBrains Space リポジトリの pull (マージ) リクエストとの TeamCity 統合を強化します。共通情報:ビルド構成にプルリクエスト機能を追加すると、次のことが可能になります。ビルド構成の概要ページで、プルリクエストブランチと保留中の変更を表示します。ビルド結果ページの概要タブでプルリクエストの詳細を表示します。ドラフトプルリクエス...

ビルドログ

ビルドログは、ビルドの拡張コンソール出力です。これは、ビルド中に発生したイベントの構造化リストによって表されます。通常、TeamCity で実行されたアクションに関するエントリと、ビルド中に開始されたプロセスの出力が含まれます。TeamCity は、プロセスの出力をキャプチャーし、階層表示を可能にする内部形式で保存します。ビルドログを表示する:完全なログの詳細を表示するには、ビルド結果ページに移動し、ビルドログタブに切り替えます。このタブには、ログを表示するための次のオプションがあります。すべ...

Kotlin DSL

XML 形式のバージョン管理で設定を保存することに加えて、TeamCity では(Kotlin 言語に基づいて)DSL に設定を保存できます。バージョン管理に保存された DSL を使用すると、プログラムで設定を定義できます。Kotlin は静的に型指定されるため、IDE で自動補完機能を自動的に受け取ります。これにより、利用可能な API オプションの発見がはるかに簡単になります。TeamCity での Kotlin DSL の使用に関するブログ投稿シリーズと推奨リファクタリングの記事を確認して...

エージェント要件の設定

エージェント要件は、ビルド構成を実行できるエージェントを指定する条件です。エージェント要件は式で、次のようになります。は、定義済みまたはカスタム (ユーザー定義) のビルドパラメーターです。例: エージェントにインストールされているオペレーティングシステムを報告するパラメーター。要件では、エージェントがこの特定のビルド構成のビルドを実行できるかどうかを識別する必要があるため、エージェントに応じて値が異なる可能性があるパラメーターのみを使用する必要があることに注意してください。たとえば、パラメーター...