Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
実行時に、パイプライン内の各ジョブが Azure DevOps 内の他のリソースにアクセスする場合があります。 たとえば、ジョブは次の場合があります。
- Git リポジトリからソース コードをチェックアウトする
- リポジトリにタグを追加する
- Azure Artifacts のフィードにアクセスする
- エージェントからサービスにログをアップロードする
- エージェントからサービスにテスト結果やその他の成果物をアップロードする
- 作業項目を更新する
Azure Pipelines では、ジョブ アクセス トークンを使用してこれらのタスクを実行します。 ジョブ アクセス トークンは、実行時に各ジョブについて Azure Pipelines によって動的に生成されるセキュリティ トークンです。 ジョブが実行されているエージェントは、Azure DevOps 内のこれらのリソースにアクセスするためにジョブ アクセス トークンを使用します。 ジョブ アクセス トークンに対するアクセス許可の付与方法を制御することで、パイプラインがアクセスできるリソースを制御できます。
トークンのアクセス許可は、(a) ジョブ承認スコープと (b) プロジェクトまたはコレクション ビルド サービス アカウントで設定したアクセス許可から派生します。
ジョブ承認スコープ
ジョブ承認スコープを コレクション または プロジェクトに設定できます。 スコープを コレクションに設定すると、パイプラインがコレクションまたは組織内のすべてのリポジトリにアクセスできるようになります。 スコープを プロジェクトに設定すると、パイプラインと同じプロジェクト内にあるリポジトリのみにアクセスを制限できます。
ジョブ承認スコープは、Azure DevOps 組織全体または特定のプロジェクトに対して設定できます。
注
Azure DevOps Server 2020 では、 ジョブ承認スコープを現在のプロジェクトに制限 すると、YAML パイプラインとクラシック ビルド パイプラインにのみ適用されます。 クラシック リリース パイプラインには適用されません。 クラシック リリース パイプラインは、常にプロジェクト コレクション スコープで実行されます。
組織のジョブ承認スコープを設定するには:
- Azure DevOps ユーザー インターフェイスで組織の設定ページに移動します。
- [パイプライン ] で [設定] を 選択 します。
- [ ジョブ承認スコープを現在のプロジェクトに制限 する] を有効にして、スコープをプロジェクトに制限します。 これは、パイプラインのセキュリティを強化するため、推奨される設定です。
特定のプロジェクトのジョブ承認スコープを設定するには:
- Azure DevOps ユーザー インターフェイスのプロジェクト設定ページに移動します。
- [パイプライン ] で [設定] を 選択 します。
- [ ジョブ承認スコープを現在のプロジェクトに制限 する] を有効にして、スコープをプロジェクトに制限します。 これは、パイプラインのセキュリティを強化するため、推奨される設定です。
- すべてのプロジェクトの組織レベルでジョブ承認スコープを設定するには、 組織の設定>Pipelines>Settings を選択します。
- 特定のプロジェクトのジョブ承認スコープを設定するには、 プロジェクト設定>Pipelines>Settings を選択します。
次の 1 つ以上の設定を有効にします。 パイプラインのセキュリティが強化されるため、これらの設定を有効にすることをお勧めします。
- 非リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限 する - この設定は YAML パイプラインとクラシック ビルド パイプラインに適用され、 クラシック リリース パイプラインには適用されません。
- リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限する - この設定は 、クラシック リリース パイプライン にのみ適用されます。
注
スコープが組織レベルで プロジェクト に設定されている場合、各プロジェクトのスコープを変更することはできません。
Important
スコープが組織レベルまたはプロジェクト レベルで制限されていない場合、YAML パイプライン内のすべてのジョブは、コレクション スコープのジョブ アクセス トークンを取得します。 言い換えると、パイプラインは、組織の任意のプロジェクト内の任意のリポジトリにアクセスできます。 敵対者が 1 つのプロジェクト内の 1 つのパイプラインにアクセスできる場合は、組織内の任意のリポジトリにアクセスできます。 このため、攻撃を 1 つのプロジェクトに含めるために、最高レベル (組織の設定) でスコープを制限することをお勧めします。
注
パイプラインが パブリック プロジェクト内にある場合、ジョブ承認スコープは、任意の設定で構成した内容に関係なく、自動的に プロジェクト に制限されます。 パブリック プロジェクト内のジョブは、ビルド成果物やテスト結果などのリソースに、組織の他のプロジェクトからではなく、プロジェクト内でのみアクセスできます。
ジョブ承認スコープを参照先の Azure DevOps リポジトリに制限する
前のセクションで説明したジョブ承認スコープの設定に加えて、Azure Pipelines では、 参照先の Azure DevOps リポジトリ設定にジョブ承認スコープを制限 します。
参照先の Azure DevOps リポジトリにジョブ承認スコープを制限しない限り、パイプラインは承認されたプロジェクト内のすべての Azure DevOps リポジトリに アクセスできます。 このオプションを有効にすると、すべてのパイプラインのアクセススコープを、そのリポジトリを使用するパイプライン ジョブの checkout ステップまたは uses ステートメントによって明示的に参照される Azure DevOps リポジトリのみに減らすことができます。
詳細については、「 Azure Repos Git リポジトリ - ジョブ承認スコープを参照先の Azure DevOps リポジトリに制限する」を参照してください。
YAML パイプライン内のリポジトリへのアクセスを保護する
前のセクションで説明したジョブ承認スコープの設定に加えて、Azure Pipelines には 、YAML パイプラインのリポジトリへのアクセスを保護する設定が用意されています 。
YAML パイプライン内のリポジトリへの保護アクセスが有効になっていない限り、パイプラインは承認されたプロジェクト内のすべての Azure DevOps リポジトリにアクセス できます。 このオプションを有効にすると、すべてのパイプラインのアクセススコープを、そのリポジトリを使用するパイプライン ジョブの checkout ステップまたは uses ステートメントによって明示的に参照される Azure DevOps リポジトリのみに減らすことができます。
詳細については、「 Azure Repos Git リポジトリ - YAML パイプライン内のリポジトリへのアクセスを保護する」を参照してください。
Important
YAML パイプラインのリポジトリへの保護アクセス は、2020 年 5 月以降に作成された新しい組織とプロジェクトに対して既定で有効になっています。
スコープ付きビルド ID
Azure DevOps では、2 つの組み込み ID を使用してパイプラインを実行します。
- コレクションスコープ ID。コレクション内のすべてのプロジェクト (または Azure DevOps Services の組織) にアクセスできます。
- 1 つのプロジェクトにアクセスできるプロジェクト スコープ ID
これらの ID には、Azure DevOps システムへの呼び戻し時にビルド/リリース実行時間アクティビティを実行するために必要なアクセス許可が割り当てられます。 既定のアクセス許可が組み込まれており、必要に応じて独自のアクセス許可を管理することもできます。
コレクション スコープの ID 名の形式は次のとおりです。
Project Collection Build Service ({OrgName})- たとえば、組織名が
fabrikam-tailspinされている場合、このアカウントの名前はProject Collection Build Service (fabrikam-tailspin)。
プロジェクト スコープ ID 名の形式は次のとおりです。
{Project Name} Build Service ({Org Name})- たとえば、組織名が
fabrikam-tailspinされ、プロジェクト名がSpaceGameWeb場合、このアカウントの名前はSpaceGameWeb Build Service (fabrikam-tailspin)。
既定では、前の ジョブ承認 スコープ セクションで説明したように特に構成されていない限り、コレクション スコープ ID が使用されます。
ビルド サービス アカウントのアクセス許可を管理する
プロジェクト スコープのアクセスを設定した結果の 1 つは、プロジェクト スコープ ID がコレクション スコープのリソースに対するアクセス許可を持たない可能性があることです。
次のようなシナリオで、ジョブ アクセス トークンのアクセス許可を変更できます。
- パイプラインで、別のプロジェクト内のフィードにアクセスする必要があります。
- リポジトリ内のコードの変更をパイプラインに制限する必要があります。
- パイプラインに作業項目の作成を制限する必要があります。
ジョブ アクセス トークンのアクセス許可を更新するには:
まず、パイプラインのジョブ承認スコープを決定します。 ジョブ承認スコープについては、上記のセクションを参照してください。 ジョブ承認スコープが コレクションの場合、アクセス許可を管理する対応するビルド サービス アカウントは Project Collection Build Service (your-collection-name) です。 ジョブ承認スコープが プロジェクトの場合、アクセス許可を管理するビルド サービス アカウントは Your-project-name Build Service (your-collection-name) です。
Project Collection Build Service (your-collection-name) への追加アクセスを制限または許可するには:
- [パイプライン] ページのオーバーフロー メニューで [セキュリティの管理] を選択します。
- [ ユーザー] で、[ Project Collection Build Service (your-collection-name)]\(プロジェクト コレクション ビルド サービス (your-collection-name)\) を選択します。
- このアカウントのパイプライン関連のアクセス許可に変更を加えます。
- Azure DevOps 組織の組織設定 (またはプロジェクト コレクションのコレクション設定) に移動します。
- [セキュリティ] で [ アクセス許可] を選択 します。
- [ ユーザー ] タブで、 プロジェクト コレクション ビルド サービス (your-collection-name) を探します。
- このアカウントのパイプライン関連以外のアクセス許可に変更を加えます。
- Project Collection Build Service (your-collection-name) は組織またはコレクションのユーザーであるため、Azure Artifacts のフィードなど、任意のリソースにこのアカウントを明示的に追加できます。
Your-project-name Build Service (your-collection-name) への追加アクセスを制限または許可するには:
- アクセス許可を管理できるビルド サービス アカウントは、パイプラインを 1 回実行した後にのみ作成されます。 パイプラインを既に 1 回実行していることを確認します。
- [パイプライン] ページのオーバーフロー メニューで [セキュリティの管理] を選択します。
- [ ユーザー] で、 プロジェクト名のビルド サービス (your-collection-name) を選択します。
- このアカウントのパイプライン関連のアクセス許可に変更を加えます。
- Azure DevOps 組織の組織設定 (またはプロジェクト コレクションのコレクション設定) に移動します。
- [セキュリティ] で [ アクセス許可] を選択 します。
- [ ユーザー ] タブで、 Your-project-name ビルド サービス (your-collection-name) を探します。
- このアカウントのパイプライン関連以外のアクセス許可に変更を加えます。
- Your-project-name Build Service (your-collection-name) は組織またはコレクションのユーザーであるため、このアカウントを任意のリソース (Azure Artifacts のフィードなど) に明示的に追加できます。
同じプロジェクト コレクション内の別のプロジェクトにアクセスするためのプロジェクトのアクセス許可を構成する
この例では、 fabrikam-tailspin/SpaceGameWeb プロジェクト スコープのビルド ID に、 fabrikam-tailspin/FabrikamFiber プロジェクトにアクセスするためのアクセス許可が付与されています。
FabrikamFiber プロジェクトで、[プロジェクトの設定] の [アクセス許可] に移動します。
外部プロジェクトという名前の新しいグループを作成し、SpaceGameWeb Build Service アカウントを追加します。
[ ユーザー] を選択し、 SpaceGameWeb という名前で入力を開始し、 SpaceGameWeb ビルド サービス アカウントを選択します。 最初に検索結果が表示されない場合は、[ 検索の展開] を選択します。
そのユーザーに 対してプロジェクト レベルの情報の表示 権限を付与します。
例 - 同じプロジェクト コレクション内の別のリポジトリにアクセスするためのアクセス許可を構成する
この例では、fabrikam-tailspin/SpaceGameWeb プロジェクト スコープのビルド ID に、FabrikamFiber プロジェクトのfabrikam-tailspin/FabrikamFiber リポジトリにアクセスするためのアクセス許可が付与されています。
SpaceGameWebプロジェクトにアクセスするためのFabrikamFiberプロジェクト スコープのビルド ID アクセス許可を付与するには、手順に従います。FabrikamFiber プロジェクトで、プロジェクト設定、リポジトリ、FabrikamFiber に移動します。
+ アイコンを選択し、SpaceGameWeb という名前で入力を開始し、SpaceGameWeb Build Service アカウントを選択します。
SpaceGameWeb という名前を入力し、SpaceGameWeb ビルド サービス アカウントを選択します。
そのユーザー に読み取り アクセス許可を付与します。
例 - 同じプロジェクト コレクション内の他のリソースにアクセスするためのアクセス許可を構成する
この例では、 fabrikam-tailspin/SpaceGameWeb プロジェクト スコープのビルド ID に、 fabrikam-tailspin/FabrikamFiber プロジェクト内の他のリソースにアクセスするためのアクセス許可が付与されています。
SpaceGameWebプロジェクトにアクセスするためのFabrikamFiberプロジェクト スコープのビルド ID アクセス許可を付与するには、手順に従います。そのユーザーに必要なアクセス許可を構成します。
FAQ
YAML パイプラインのジョブ承認スコープを決定するにはどうすればよいですか?
- プロジェクトがパブリック プロジェクトの場合、ジョブ承認スコープは、他の設定に関係なく常に プロジェクト になります。
- Azure DevOps 組織の設定の下にあるパイプライン 設定を確認します。
- [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります。
-
[ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
- [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります。
- それ以外の場合、スコープは コレクションです。
- パイプラインがプライベート プロジェクト内にある場合は、Azure DevOps 組織の設定の下にあるパイプライン設定を確認します。
- 非リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
-
リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限しない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
- 非リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
- それ以外の場合、スコープは コレクションです。
クラシック ビルド パイプラインのジョブ承認スコープを決定するにはどうすればよいですか?
- パイプラインがパブリック プロジェクト内にある場合、ジョブ承認スコープは他の設定に関係なく プロジェクト になります。
- Azure DevOps 組織の設定の下にあるパイプライン 設定を確認します。
- [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります。
-
[ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
- [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります。
-
[ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっていない場合は、パイプラインのエディターを開き、[オプション] タブに移動します。
- ビルド ジョブ承認スコープが現在のプロジェクトの場合、スコープは project です。
- それ以外の場合、スコープは コレクションです。
- パイプラインがプライベート プロジェクト内にある場合は、Azure DevOps 組織の設定の下にあるパイプライン設定を確認します。
- 非リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
-
リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限しない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
- 非リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
-
リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限しない場合は、パイプラインのエディターを開き、[オプション] タブに移動します。
- ビルド ジョブ承認スコープが現在のプロジェクトの場合、スコープは project です。
- または、スコープが コレクションです。
新しいクラシック パイプラインを作成すると、 ジョブ承認スコープ が 現在のプロジェクト に設定され、 ビルド ジョブ承認スコープ が既定で project に設定されます。
クラシック リリース パイプラインのジョブ承認スコープを決定するにはどうすればよいですか?
Azure DevOps Server 2020 以降のクラシック リリース パイプラインは、 コレクション スコープで実行されます。
- パイプラインがパブリック プロジェクト内にある場合、ジョブ承認スコープは他の設定に関係なく プロジェクト になります。
- パイプラインがプライベート プロジェクト内にある場合は、Azure DevOps 組織の設定の下にあるパイプライン設定を確認します。
- リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープは project になります。
-
リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
- リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープは project になります。
- それ以外の場合、スコープは コレクションです。