Azure Pipelines セキュリティ管理の要点|管理者が確認すべき権限・移行・展開ポイント

Azure Pipelines セキュリティで最初に確認すべき結論は、サービス接続、Environment、Library、Agent pool、Pipeline本体の権限が「必要なパイプラインだけ」に絞られているかです。2026年5月9日時点で確認すべきポイントは、緊急の移行作業というより、既存のAzure DevOps環境に残りやすい「Open access」「継承された強すぎる権限」「共有されたサービス接続」を棚卸しすることにあります。Microsoft Learnの対象ドキュメントは、Azure Pipelinesのビルド、リリース、タスクグループ、エージェントプール、サービス接続などへのアクセスを、ユーザーとセキュリティグループの階層で管理する内容として整理しています。(Microsoft Learn)

目次

Microsoft Azureのセキュリティ更新、管理者が確認すべき影響範囲と対応ポイント

今回の「Manage security in Azure Pipelines」は、Azure Pipelinesの権限管理を一つの機能だけで見るのではなく、パイプラインが触るリソース全体のアクセス制御として見直すための情報です。

公式ドキュメントの履歴では、2026年5月7日と5月8日に対象ファイルの更新が確認できます。ただし、コミット内容は「ms.assetidメタデータの削除」や「Related articlesをRelated contentへ置き換える」といったドキュメント整備が中心で、Azure Pipelinesの権限仕様そのものが大きく変わったことを示す更新ではありません。(GitHub)

そのため、管理者が取るべき対応は「急いで何かを移行する」ではなく、既存のパイプライン権限が現在のセキュリティ方針に合っているかを点検することです。特に、過去に作成されたプロジェクトでは、開発効率を優先して広い権限を残したままになっているケースがあります。

変更点として押さえるべきこと

今回の更新で実務上重要なのは、ドキュメントの更新日そのものよりも、Azure Pipelinesのセキュリティ管理で見落としやすい範囲が明確に整理されている点です。対象はパイプライン単体ではなく、サービス接続、Environment、Library、Release、Task group、Agent poolまで広がります。

確認項目変更・整理された見方管理者への影響
パイプライン権限プロジェクトレベルとオブジェクトレベルの階層で管理する全パイプラインに効く設定と個別パイプラインの例外を分けて確認する
継承多くのリソースはプロジェクトレベルの権限を継承する例外設定が増えると、誰に何が許可されているか追いにくくなる
Open accessEnvironment、サービス接続、Agent poolなどで全パイプライン利用を許可できる本番環境や機密情報に接続するリソースでは危険度が高い
LibraryVariable groupやSecure filesを一括・個別に管理するシークレットや証明書ファイルの利用範囲を絞る必要がある
Agent pool組織、コレクション、プロジェクト、個別プールで権限管理する自己ホストエージェントの横展開リスクを抑える必要がある

Azure Pipelinesの権限は、プロジェクトレベルの設定がオブジェクトレベルへ継承される階層モデルです。プロジェクト全体の既定権限は変更できますが、システムによって設定された権限は変更できません。(Microsoft Learn)

影響範囲は「パイプラインを実行できる人」だけではない

Azure Pipelines セキュリティの見直しでよくある誤解は、「誰がパイプラインを編集・実行できるか」だけを確認して終わることです。実際には、パイプラインが利用する接続先、変数、ファイル、エージェント、デプロイ先まで確認しなければ、権限の抜け道が残ります。

たとえば、ある開発者がパイプラインの編集権限を持っていなくても、広く共有されたサービス接続やAgent poolを別のパイプラインから利用できる場合があります。逆に、パイプライン自体の権限を厳しくしていても、Variable groupやSecure filesの利用範囲が広いと、意図しないジョブから機密値を参照できる可能性があります。

特に確認すべき影響範囲は次のとおりです。

リソース何が問題になりやすいか優先度
Service connectionsAzure、GitHub、外部サービスへの接続権限が広すぎる高
Environments本番環境へのデプロイを多くのパイプラインが利用できる高
Library変数グループ、Secure files、証明書、キーの参照範囲が広い高
Agent pools自己ホストエージェントが複数プロジェクトから使われる高
Release pipelinesClassic releaseのステージ権限が古いまま残る中
Task groupsClassic系の再利用部品に過剰な編集権限が残る中

管理者が最初に確認すべき設定

パイプライン本体のプロジェクトレベル権限を確認する

まず、プロジェクト全体で「誰がパイプラインを作成、編集、削除、キュー投入できるか」を確認します。Azure Pipelinesでは、Readers、Contributors、Build Administrators、Project Administratorsなどの既定グループに権限が割り当てられます。Contributorsはパイプラインやビルドを管理できますが、ビルドキューの管理は含まれないなど、グループごとに許可範囲が異なります。(Microsoft Learn)

実務では、次の判断基準が使いやすいです。

権限許可してよい対象見直しが必要な例
View builds / View build pipeline開発チーム、監査担当、運用担当機密プロジェクトを全社ユーザーが閲覧できる
Create build pipelineCI/CDを設計する担当者全Contributorsが自由に作成できる
Delete or edit build pipelineパイプライン管理者、リード開発者一般開発者が本番用パイプラインを編集できる
Queue builds開発者、QA、運用担当本番デプロイを含むパイプラインを誰でも実行できる
Administer build permissionsプロジェクト管理者、限定されたDevOps管理者一時対応用に付けた管理権限が残っている

注意したいのは、Azure DevOpsの権限にはAllow、Deny、Not setなどの状態があり、多くの場合DenyはAllowより強く働くことです。安易にDenyを多用すると、別グループで必要な権限を与えても操作できない原因になります。まずはNot setとグループ設計で整理し、明確に禁止したい操作だけDenyを使うのが安全です。(Microsoft Learn)

オブジェクトレベル権限で例外が増えすぎていないか見る

個別パイプラインでは、プロジェクトレベルの権限をオーバーライドできます。これは本番デプロイ用パイプラインや、特定チームだけが扱うパイプラインでは有効です。一方で、個別設定が増えすぎると、退職者、異動者、外部委託メンバーの権限が残りやすくなります。

確認する際は、次の順番で見ると効率的です。

手順確認内容
1本番環境、顧客データ、重要なAzureリソースに関係するパイプラインを洗い出す
2各パイプラインのManage securityを開く
3個人アカウントに直接付与された権限を確認する
4不要な個別権限を削除し、Microsoft Entra IDグループやAzure DevOpsグループへ寄せる
5継承を無効化している場合、その理由を記録する

継承されたユーザーやグループは、継承を無効にしない限り削除できないケースがあります。公式ドキュメントでも、継承されたユーザーやグループを削除するには継承の無効化が必要であることが示されています。(Microsoft Learn)

Service connectionsは最優先で棚卸しする

Service connectionsは、Azure、GitHub、コンテナレジストリ、外部クラウド、SaaSなどへ接続するための入口です。ここが広く開いていると、パイプライン権限の弱点がそのままクラウドリソースへの操作権限につながります。

公式ドキュメントでは、サービス接続に対してユーザー・グループのロール、パイプラインアクセス、プロジェクトアクセスを設定できると説明されています。また、ロールにはReader、User、Creator、Administratorがあり、Administratorはサービス接続の利用だけでなく他ユーザーのロール管理もできます。(Microsoft Learn)

特に確認すべき項目は次の3つです。

確認項目推奨される考え方
Pipeline permissions本番・準本番向けサービス接続はOpen accessではなく、利用するパイプラインを明示的に追加する
User permissionsAdministratorを最小限にし、利用だけならUserにする
Project permissions他プロジェクトへの共有は必要な場合だけ行い、共有理由を記録する

サービス接続のパイプライン権限は、すべてのパイプラインに利用を許可するOpen accessと、特定パイプラインのみに制限する設定を選べます。さらに、サービス接続は既定では他プロジェクトに共有されません。共有する場合は、組織レベルの管理者権限や対象プロジェクトでの作成権限が関係します。(Microsoft Learn)

実務での判断例

本番Azureサブスクリプションへデプロイするサービス接続は、次のように分けると事故を減らせます。

用途設定例
開発環境デプロイ開発用パイプラインのみ許可。権限は対象リソースグループに限定
検証環境デプロイQA用パイプラインのみ許可。手動承認を追加
本番環境デプロイ本番用YAMLパイプラインだけ許可。Open accessは避ける
共通読み取り用途Reader権限中心。書き込みや削除権限を持たせない

Microsoftのセキュリティ推奨でも、サービス接続のスコープは必要最小限にし、Azure Resource Managerサービス接続では必要なリソースグループだけを選ぶこと、可能であればWorkload identity federationを使うことが推奨されています。(Microsoft Learn)

Environmentsは「誰がデプロイできるか」と「どのパイプラインが使えるか」を分けて見る

YAMLパイプラインでデプロイ先を管理する場合、Environmentsの権限は重要です。EnvironmentはYAMLパイプライン向けのデプロイターゲットをまとめる機能で、Classic pipelineとは互換性がありません。ロールにはCreator、Reader、User、Administratorがあり、Environment作成者にはそのEnvironmentのAdministratorロールが自動付与されます。(Microsoft Learn)

ここで見るべきポイントは2つあります。

観点確認内容
ユーザー・グループのロール誰がEnvironmentを閲覧、利用、管理できるか
パイプラインアクセスすべてのパイプラインに開放しているか、特定パイプラインだけに制限しているか

Environmentのパイプライン権限は、プロジェクト内のすべてのパイプラインに許可するOpen accessと、特定のパイプラインだけを許可する制限アクセスを選べます。Open accessを設定できるのはProject administratorsです。(Microsoft Learn)

本番Environmentでは、Open accessを避け、次のように管理すると安全です。

環境推奨設定
dev開発チームの主要パイプラインを許可
staging検証・リリース候補パイプラインだけ許可
production本番リリース用パイプラインだけ許可し、承認プロセスを追加
shared-test一時利用を許可する場合も、定期的に利用パイプラインを棚卸しする

Library、Variable group、Secure filesはシークレット管理の要

Libraryは、Variable groupやSecure filesをビルド・リリースパイプライン間で共有するための領域です。ロールにはAdministrator、Creator、Reader、Userがあり、Libraryレベルで設定したロールは配下のアセットへ適用されますが、個別アセットで調整することもできます。(Microsoft Learn)

Secure filesとVariable groupは、既定ではプロジェクトレベルのLibraryロールを継承します。個別ファイルや個別変数グループで権限を上書きできますが、継承されたユーザーやグループを削除したり、権限を下げたりするには継承を無効にする必要があります。(Microsoft Learn)

失敗しやすいのは、次のような設定です。

ありがちな設定リスク対応
Project Valid Usersに広くReaderを残す変数名や構成情報の露出につながる機密グループは閲覧者も限定する
ContributorsにCreatorを広く許可誰でも変数グループを作れて管理が分散する作成権限をチームリードやDevOps担当に絞る
Secure filesを複数パイプラインで使い回す証明書や秘密鍵の利用経路が追いにくい用途別にファイルを分け、利用パイプラインを限定する
個人にAdministratorを直接付与異動・退職時に権限が残りやすいグループ付与へ変更する

シークレットは、可能であればYAML内に書かず、UI、Variable group、Azure Key Vaultなどから参照します。Microsoftのセキュリティ推奨でも、シークレットをYAMLに平文で置かないこと、ログやコマンドラインに出力しないこと、必要に応じてローテーションすることが示されています。(Microsoft Learn)

Agent poolは横展開リスクを意識して分ける

Agent poolは、ビルドやリリースジョブを実行するエージェントの集合です。Azure Pipelinesでは、組織スコープまたはプロジェクトスコープのAgent poolを作成できます。組織スコープのAgent poolは既存または新規プロジェクトから利用でき、プロジェクトスコープのAgent poolは対象プロジェクトだけで利用されます。(Microsoft Learn)

自己ホストエージェントを使っている場合は、特に慎重に確認してください。エージェントは社内ネットワーク、ビルド成果物、キャッシュ、ツールチェーン、クラウド認証に近い場所で動くため、パイプラインの悪用時に影響が広がりやすいからです。

公式ドキュメントでは、Agent poolのセキュリティロールを組織、コレクション、プロジェクト、個別プールの単位で管理できること、個別Agent poolではパイプライン権限を特定パイプラインに制限できることが示されています。(Microsoft Learn)

実務では、次の分離が有効です。

Agent pool用途注意点
dev-build-pool開発ビルド、単体テスト機密情報を置かない
staging-deploy-pool検証環境デプロイ利用パイプラインを制限する
prod-deploy-pool本番デプロイ最小権限、承認、監査ログ確認を徹底する
external-pr-pool外部PRやforkビルドMicrosoft-hosted agentの利用を優先する

Microsoftのセキュリティ推奨でも、Microsoft-hosted agentsの利用、プロジェクトごとのエージェント分離、自己ホストエージェントの低権限アカウント運用、機密プールの分離、定期的な更新が推奨されています。(Microsoft Learn)

Classic pipelineからYAMLへの移行で注意すべき点

Azure Pipelinesでは、Classic pipelineよりもYAML pipelineを使うことがセキュリティ面で推奨されています。YAMLはパイプライン定義をコードとして扱えるため、Pull Request、ブランチポリシー、レビュー、テンプレートによる統制と相性がよいからです。Microsoftの推奨でも、Classic pipelineを使っている場合はYAMLへの移行が案内されています。(Microsoft Learn)

ただし、移行は単純な置き換えではありません。特に次の点に注意してください。

移行時の確認点理由
Classic releaseのステージ権限YAMLへ移行すると管理単位が変わるため、承認やEnvironment権限で再設計する必要がある
Task groupTask groupはYAML pipelineではサポートされず、代わりにテンプレートを使う
Service connection旧パイプライン用にOpen accessになっている可能性がある
Variable group移行後のYAMLから参照できる範囲を確認する
Agent poolClassic時代の共有プールをそのまま使うと分離が不十分になりやすい

Task groupについては、公式ドキュメントでYAML pipelineではサポートされず、テンプレートが利用できると説明されています。ClassicからYAMLへ移行する際は、Task groupの処理をYAMLテンプレートへ置き換え、テンプレートリポジトリの権限もあわせて管理してください。(Microsoft Learn)

開発者が確認すべきポイント

管理者だけでなく、パイプラインを作成・修正する開発者もAzure Pipelines セキュリティの一部を担います。特に、YAMLに書く内容はレビュー対象にし、実行時に任意のコマンドや変数を受け付けすぎないようにする必要があります。

開発者が確認すべきポイントは次のとおりです。

項目確認すること
YAML内のシークレットパスワード、キー、トークンを平文で書いていないか
Queue-time variables実行時に任意の変数を追加できる状態になっていないか
Parameters選択肢や型を制限し、任意文字列をそのままシェルへ渡していないか
ScriptsPATHに依存せず、必要に応じてフルパスや入力検証を使っているか
Templates共通テンプレートを安全なリポジトリで管理しているか
Fork builds外部forkにシークレットを渡していないか

Microsoftの推奨では、シェルタスク引数の検証、キュー時に設定できる変数の制限、変数よりパラメーターの利用、settableVariablesによる変数設定の制限などが紹介されています。(Microsoft Learn)

展開時の実践手順

Azure Pipelines セキュリティの見直しは、一度に全設定を変えるとビルド停止やデプロイ失敗を招きます。次の順番で進めると、影響を抑えながら安全性を上げられます。

フェーズ作業内容成果物
棚卸しパイプライン、サービス接続、Environment、Library、Agent poolを一覧化するリソース一覧
リスク分類本番接続、シークレット利用、自己ホストエージェント利用を高リスクに分類する優先度リスト
権限確認Open access、個人付与、継承無効、Administrator付与を確認する権限レビュー表
制限設定高リスクなリソースから特定パイプラインのみに制限する変更履歴
テスト開発、検証、本番前の順にパイプライン実行を確認するテスト結果
定着月次または四半期で権限レビューを行う運用ルール

最初の対象は、本番Azureリソースへ接続するサービス接続、production Environment、本番デプロイ用Agent pool、Secure filesです。この4つを先に確認するだけでも、実害につながる設定ミスを減らしやすくなります。

失敗しやすいポイント

Open accessを「便利だから」で残す

Open accessは、すべてのパイプラインから対象リソースを使えるため便利です。しかし、本番サービス接続や本番Environmentで使うと、別チームのパイプラインや検証用パイプラインから重要リソースへ到達できる可能性が高まります。

個人アカウントにAdministratorを直接付ける

一時対応のために個人へAdministratorを付与し、そのまま残るケースはよくあります。権限はできるだけグループへ付与し、個人付与が必要な場合は期限と理由を記録します。

継承を無効にした理由が残っていない

継承の無効化は有効な手段ですが、理由が残っていないと後から戻せません。例外設定には「なぜ必要か」「誰が承認したか」「いつ見直すか」を残してください。

Classic時代の設定をYAML移行後も放置する

YAMLへ移行しても、古いRelease pipeline、Task group、Deployment group、共有Agent poolが残っていることがあります。使っていないリソースでも、権限が残っていれば管理対象です。

シークレットをログで漏らす

Azure Pipelinesはシークレットのマスクを試みますが、すべての漏えいパターンを防げるわけではありません。JSONのような構造化データを1つのシークレットにする、コマンドライン引数に直接渡す、ログにechoする、といった運用は避けるべきです。(Microsoft Learn)

まず今日やるべきチェックリスト

最後に、管理者がすぐ実行できるチェックリストをまとめます。

チェック完了
本番向けService connectionがOpen accessになっていないか確認する□
production Environmentを利用できるパイプラインを確認する□
Secure filesとVariable groupのAdministratorを確認する□
自己ホストAgent poolを使えるパイプラインを確認する□
個人アカウントに直接付与された管理権限を洗い出す□
継承を無効にしているリソースと理由を記録する□
Classic pipeline、Task group、Deployment groupの残存を確認する□
YAML内にシークレットや過度に自由な変数入力がないか確認する□
forkビルドにシークレットを渡していないか確認する□
変更後に主要パイプラインの実行テストを行う□

Azure Pipelines セキュリティは、単に「パイプラインを実行できる人」を制限するだけでは不十分です。サービス接続、Environment、Library、Agent poolまで含めて、どのパイプラインが何にアクセスできるかを整理することが重要です。まずは本番環境に関わるリソースからOpen accessとAdministrator付与を確認し、必要なパイプラインだけに絞るところから始めてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次