Azure Pipelines をセキュリティで保護する

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

Azure Pipelines には、固有のセキュリティ上の課題があります。 パイプラインを使って、スクリプトを実行したり、運用環境にコードをデプロイしたりできます。 しかし、CI/CD パイプラインが悪意のあるコードを実行する手段になってほしくはありません。 また、デプロイするつもりのコードだけがデプロイされるようにする必要もあります。 セキュリティは、チームが独自のパイプラインを実行するために必要な柔軟性とパワーを提供することと、バランスを取る必要があります。

注意

Azure Pipelines は Azure DevOps Services のコレクションの 1 つであり、Azure 内の同じセキュリティ保護されたインフラストラクチャ上に構築されます。 すべての Azure DevOps Services のセキュリティに関する主要な概念を理解するには、 Azure DevOps のデータ保護の概要および Azure DevOps のセキュリティと ID に関する記事をご覧ください。

従来の組織は、極めて厳しいロックダウンを通じてセキュリティを実装しました。 コード、パイプライン、運用環境のアクセスと使用には厳しい制限がありました。 ユーザーとプロジェクトが少ない小規模な組織では、比較的容易にこの方針を管理できました。 しかし、大規模な組織ではそうはいきません。 多くのユーザーがコードへの共同作成者アクセス権を持っている場合は、"侵害を想定する" 必要があります。 侵害を想定するとは、敵対者がリポジトリの (すべてでなくても) 一部に対する共同作成者アクセス権を持っているものとして行動することを意味します。

この場合の目標は、その敵対者がパイプラインで悪意のあるコードを実行できないようにすることです。 悪意のあるコードは、シークレットを盗んだり、運用環境を破壊したりする可能性があります。 もう 1 つの目標は、侵害されたパイプラインから他のプロジェクト、パイプライン、リポジトリへと横方向に侵害が広がらないようにすることです。

YAML パイプラインでは、Azure Pipelines に最適なセキュリティが提供されます。 クラシック ビルドおよびリリース パイプラインとは対照的に、YAML パイプラインでは次のようになります。

  • "コードをレビューできます"。 YAML パイプラインと他のコードに違いはありません。 悪意のあるアクターが pull request を使って変更のマージを強制的に行うことでパイプラインに悪意のあるステップを導入するのを、防ぐことができます。 ブランチ ポリシーを使うと、これを簡単に設定できます。
  • "リソース アクセス管理を提供します"。 リソース所有者は、YAML パイプラインがリソースにアクセスできるかどうかを決定します。 このセキュリティ機能は、別のリポジトリの盗み出しのような攻撃を制御します。 承認とチェックにより、パイプラインの実行 "ごと" にアクセス制御が提供されます。
  • "ランタイム パラメーター" をサポートします。 ランタイム パラメーターは、引数の挿入のような、変数に関連するセキュリティの問題のホストを回避するのに役立ちます。

この一連の記事では、セキュリティ保護された YAML ベースの CI/CD パイプラインを組み立てるのに役立つ推奨事項の概要を示します。 また、セキュリティと柔軟性の間でトレードオフを行うことができる場所についても説明します。 このシリーズでは、Azure Pipelines、中核となる Azure DevOps のセキュリティ コンストラクトGit に関する知識も想定されています。

対象となるトピック: