Share via


Azure Pipelines で共有インフラストラクチャをセキュリティで保護するための推奨事項

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

Azure Pipelines の保護されたリソースは、実際のインフラストラクチャを抽象化したものです。 基になるインフラストラクチャを保護するには、次の推奨事項に従ってください。

Microsoft によってホストされているプールを使用する

Microsoft によってホストされているプールは、パイプラインの実行ごとに分離とクリーンな仮想マシンを提供します。 できるだけ、セルフホステッド プールではなく、Microsoft によってホストされているプールを使用してください。

プロジェクトごとにエージェントを分離する

エージェントは 1 つのプールにのみバインドできます。 プールを複数のプロジェクトで共有することで、プロジェクト間でエージェントを共有することができます。 言い換えると、複数のプロジェクトが同じエージェントでジョブを 1 つずつ実行することができます。 この方法ではインフラストラクチャのコストを節約できますが、横方向の移動が可能になります。

横方向の移動の形式を排除し、1 つのプロジェクトが別のプロジェクトのエージェントを "汚染" しないようにするには、プロジェクトごとに個別のエージェントを使用してエージェント プールの分離状態を保持します。

低い権限のアカウントを使用してエージェントを実行する

Azure DevOps リソースに直接アクセスできる ID でエージェントを実行したくなりますが、それは危険です。 この問題のあるセットアップは、Microsoft Entra ID を使用する組織で一般的です。 Microsoft Entra ID によってサポートされている ID でエージェントを実行すると、ジョブのアクセス トークンを使用せずに Azure DevOps API に直接アクセスできます。 代わりに、"ネットワーク サービス" などの権限のないローカル アカウントとしてエージェントを実行する必要があります。

Azure DevOps には、"プロジェクト コレクション サービス アカウント" という紛らわしい名前のグループがあります。 継承により、プロジェクト コレクション サービス アカウントのメンバーが、プロジェクト コレクション管理者のメンバーにもなります。 お客様は、Microsoft Entra ID によってサポートされ、プロジェクト コレクション サービス アカウントのメンバーである ID を使用してビルド エージェントを実行することがあります。 攻撃者がこれらのビルド エージェントのいずれかでパイプラインを実行すると、Azure DevOps 組織全体を引き継ぐことができます。

また、セルフホステッド エージェントが高い特権を持つアカウントで実行されるのも確認されています。 多くの場合、これらのエージェントは権限があるアカウントを使用してシークレットまたは運用環境にアクセスします。 しかし、攻撃者がこれらのビルド エージェントのいずれかで侵害されたパイプラインを実行すると、それらのシークレットにアクセスできてしまいます。 その後、攻撃者は、それらのアカウントを介してアクセスできる他のシステムを横方向に移動できます。

システムのセキュリティを維持するには、最も低い権限のアカウントを使用してセルフホステッド エージェントを実行してください。 たとえば、マシン アカウントやマネージド サービス ID を使用してください。 Azure Pipelines でシークレットと環境へのアクセスを管理できるようにしましょう。

サービス接続のスコープを最小限に抑える

サービス接続は、必要なリソースにのみアクセスできる必要があります。 可能であれば、ワークロード ID フェデレーションを使用します(Azure サービス接続のサービス プリンシパルではなく)。 ワークロード ID フェデレーションでは、業界標準のテクノロジーである Open ID Connect (OIDC) を使用して、Azure と Azure DevOpsの間の認証を支援し、シークレットを使用しません。

Azure サービス接続の範囲は、サービス接続がアクセスする必要があるリソースに設定する必要があります。 ユーザーは、Azure サブスクリプション全体に広範な投稿者権利を付与するべきではありません。

新しい Azure Resource Manager サービス接続を作成するときは、常にリソース グループを選択してください。 リソース グループに、ビルドに必要な VM またはリソースのみが含まれるようにしましょう。 同様に、GitHub アプリを構成するときは、Azure Pipelines を使用してビルドするリポジトリにのみアクセス権を付与してください。

次のステップ

セキュリティに関するいくつかの一般的な推奨事項を考えてみましょう。