リポジトリの保護

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

ソース コード、パイプラインの YAML ファイル、必要なスクリプトとツールはすべて、バージョン管理リポジトリに格納されます。 アクセス許可とブランチ ポリシーを使って、コードとパイプラインの変更が安全であることを確認する必要があります。 パイプラインのアクセス許可とチェックをリポジトリに追加することもできます。

また、リポジトリの既定のアクセス制御を確認する必要があります。

Git の設計上、ブランチ レベルで保護できる範囲は限定されます。 通常、リポジトリへのプッシュ アクセスを持つユーザーが新しいブランチを作成できます。 GitHub オープンソース プロジェクトを使用する場合、GitHub アカウントを持っていればだれでもリポジトリをフォークし、コントリビューションを提案できます。 パイプラインはリポジトリに関連付けられ、特定のブランチには関連付けられないため、コードと YAML ファイルは信頼されないものと考える必要があります。

フォーク

GitHub からパブリック リポジトリをビルドする場合は、フォーク ビルドに対する態度を検討する必要があります。 フォークは組織外から来るので、特に危険です。 投稿されるコードから製品を保護するには、次の推奨事項を検討してください。

注意

次の推奨事項は、主に GitHub からパブリック リポジトリを構築する場合に適用されます。

フォーク ビルドにシークレットを提供しない

既定では、パイプラインはフォークをビルドするように構成されていますが、シークレットと保護されたリソースは、既定ではそれらのパイプライン内のジョブで使用できません。 この後者の保護をオフにしないでください。

Screenshot of fork build protection UI.

Note

フォーク ビルドによるシークレットへのアクセスを有効にすると、Azure Pipelines は既定でフォーク ビルドに使われるアクセス トークンを制限します。 通常のアクセス トークンより、リソースを開くためのアクセスがいっそう制限されます。 通常のビルドと同じアクセス許可をフォーク ビルドに付与するには、[Make fork builds have the same permissions as regular builds] (フォーク ビルドが通常のビルドと同じアクセス許可を持つようにする) の設定を有効にします。

Screenshot of fork build protection UI in Azure DevOps Server 2020 and lower.

Note

フォーク ビルドによるシークレットへのアクセスを有効にした場合でも、Azure Pipelines はフォーク ビルドに使われるアクセス トークンを制限します。 通常のアクセス トークンより、リソースを開くためのアクセスがいっそう制限されます。 この保護を無効にすることはできません。

フォーク ビルドを手動でトリガーすることを検討する

自動フォーク ビルドをオフにし、これらの投稿を手動でビルドする方法として、代わりに pull request のコメントを使用できます。 この設定により、ビルドをトリガーする前にコードを確認するチャンスがあります。

フォーク ビルドには Microsoft ホステッド エージェントを使用する

セルフホステッド エージェントでフォークからビルドを実行しないようにします。 そうすることで、企業ネットワーク内のコンピューターで外部コードを実行するための外部組織へのパスを効果的に提供できます。 可能な限り、Microsoft ホステッド エージェントを使用します。 セルフホステッド エージェントの場合は、何らかの形のネットワーク分離を使用し、エージェントがジョブ間で状態を保持しないようにします。

コードの変更を確認する

フォークされた pull request でパイプラインを実行する前に、提案された変更を慎重に検討し、実行しても問題がないことを確認します。

実行する YAML パイプラインのバージョンは、pull request からのものです。 したがって、YAML コードと、パイプラインの実行時に実行されるコード (コマンド ライン スクリプトや単体テストなど) に対する変更に特に注意してください。

GitHub のトークン スコープの制限

GitHub でフォークされた pull request をビルドすると、Azure Pipelines は、パイプラインで GitHub リポジトリの内容を変更できないようにします。 この制限は、GitHub との統合に Azure Pipelines GitHub アプリを使用する場合に "のみ" 適用されます。 OAuth アプリなど、他の形式の GitHub 統合を使用する場合、制限は適用されません。

ユーザー ブランチ

適切なアクセス許可を持っている組織のユーザーは、新しいコードまたは更新されたコードを含む新しいブランチを作成できます。 そのコードは、保護されたブランチと同じパイプラインを介して実行できます。 さらに、新しいブランチ内の YAML ファイルが変更されると、更新された YAML がパイプラインの実行に使用されます。 この設計により、柔軟性に優れ、セルフサービスが可能になりますが、すべての変更が (悪意を持って行われたかどうかに関係なく) 安全であるわけではありません。

パイプラインが、ソース コードを使用する場合や、Azure Repos で定義されている場合は、Azure Repos のアクセス許可モデルを完全に理解している必要があります。 特に、リポジトリ レベルでブランチの作成アクセス許可を持つユーザーは、コントリビューション アクセス許可がなくても、リポジトリにコードを取り込むことができます。

次のステップ

次に、保護されたリソースのチェックによって提供されるその他の保護について理解してください。