リポジトリ、成果物、およびその他のリソースにアクセスする

Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019 |TFS 2018

Note

Microsoft Team Foundation Server (TFS) 2018 以前のバージョンでは、ビルドとリリースの "パイプライン" は "定義"、"実行" は "ビルド"、"サービス接続" は "サービス エンドポイント"、"ステージ" は "環境"、"ジョブ" は "フェーズ" と呼ばれます。

実行時に、パイプライン内の各ジョブが Azure DevOps 内の他のリソースにアクセスする可能性があります。 たとえば、ジョブは次の場合があります。

  • Git リポジトリからソース コードをチェックアウトする
  • リポジトリにタグを追加する
  • Azure Artifacts のフィードにアクセスする
  • エージェントからサービスへのログのアップロード
  • エージェントからサービスにテスト結果やその他の成果物をアップロードする
  • 作業項目を更新する

Azure Pipelines では、ジョブ アクセス トークンを使用してこれらのタスクを実行します。 ジョブ アクセス トークンは、実行時に各ジョブについて Azure Pipelines によって動的に生成されるセキュリティ トークンです。 ジョブが実行されているエージェントは、Azure DevOps 内のこれらのリソースにアクセスするためにジョブ アクセス トークンを使用します。 パイプラインがアクセスできるリソースを制御するには、ジョブ アクセス トークンに対するアクセス許可の付与方法を制御します。

トークンのアクセス許可は、(a) ジョブ承認スコープと (b) プロジェクトまたはコレクション ビルド サービス アカウントで設定したアクセス許可から派生します。

ジョブ承認スコープ

ジョブ承認スコープを コレクション または プロジェクトに設定できます。 スコープをコレクションに設定すると、パイプラインが コレクションまたは組織内のすべてのリポジトリにアクセスできるようになります。 スコープを プロジェクトに設定すると、パイプラインと同じプロジェクト内にあるリポジトリにのみアクセスを制限できます。

ジョブ承認スコープは、Azure DevOps 組織全体または特定のプロジェクトに対して設定できます。

Note

Azure DevOps Server 2020 では、ジョブ承認スコープを現在のプロジェクトに制限すると、YAML パイプラインとクラシック ビルド パイプラインにのみ適用されます。 クラシック リリース パイプラインには適用されません。 クラシック リリース パイプラインは、常にプロジェクト コレクション スコープで実行されます。

組織のジョブ承認スコープを設定するには:

  • Azure DevOps ユーザー インターフェイスで組織の設定ページに移動します。
  • [パイプライン ] で [設定] を 選択 します
  • [ ジョブ承認スコープを現在のプロジェクトに制限 ] を有効にして、スコープをプロジェクトに制限します。 これは、パイプラインのセキュリティを強化するため、推奨される設定です。

特定のプロジェクトのジョブ承認スコープを設定するには:

  • Azure DevOps ユーザー インターフェイスでプロジェクト設定ページに移動します。
  • [パイプライン ] で [設定] を 選択 します
  • [ ジョブ承認スコープを現在のプロジェクトに制限 ] を有効にして、スコープをプロジェクトに制限します。 これは、パイプラインのセキュリティを強化するため、推奨される設定です。
  • すべてのプロジェクトの組織レベルでジョブ承認スコープを設定するには、[組織の設定パイプライン>の設定>] を選択します。
  • 特定のプロジェクトのジョブ承認スコープを設定するには、[プロジェクト設定パイプライン>の設定>] を選択します。

次の 1 つ以上の設定を有効にします。 パイプラインのセキュリティが強化されるため、これらの設定を有効にすることをお勧めします。

  • 非リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限する - この設定は YAML パイプラインとクラシック ビルド パイプラインに適用され、 クラシック リリース パイプラインには適用されません。
  • リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限する - この設定は 、クラシック リリース パイプライン にのみ適用されます。

Note

スコープが組織レベルで プロジェクト に設定されている場合、各プロジェクトのスコープを変更することはできません。

重要

スコープが組織レベルまたはプロジェクト レベルで制限されていない場合、YAML パイプライン内のすべてのジョブは、コレクション スコープのジョブ アクセス トークンを取得します。 言い換えると、パイプラインは、組織の任意のプロジェクト内の任意のリポジトリにアクセスできます。 敵対者が 1 つのプロジェクト内の 1 つのパイプラインにアクセスできる場合は、組織内の任意のリポジトリにアクセスできるようになります。 このため、攻撃を 1 つのプロジェクトに含めるために、最高レベル (組織の設定) でスコープを制限することをお勧めします。

Azure DevOps Server 2019 を使用する場合、ジョブ承認スコープがコレクションに設定されているすべての YAML ジョブが実行されます。 言い換えると、これらのジョブは、プロジェクト コレクション内のすべてのリポジトリにアクセスできます。 これは、Azure DevOps Server 2019 では変更できません。

TFS では YAML パイプラインを使用できません。

Note

パイプラインが パブリック プロジェクト内にある場合、ジョブ承認スコープは、任意の設定で構成した内容に関係なく、 自動的にプロジェクト に制限されます。 パブリック プロジェクト内のジョブは、ビルド成果物やテスト結果などのリソースにアクセスできるのはプロジェクト内のみで、組織の他のプロジェクトからはアクセスできません。

ジョブ承認スコープを参照されている Azure DevOps リポジトリに制限する

前のセクションで説明したジョブ承認スコープの設定に加えて、Azure Pipelines では、 参照先の Azure DevOps リポジトリ設定にジョブ承認スコープを制限 します。

参照先の Azure DevOps リポジトリへのジョブ承認スコープの制限が有効になっていない限り、パイプラインは承認されたプロジェクト内のすべての Azure DevOps リポジトリ にアクセスできます。 このオプションを有効にすると、すべてのパイプラインのアクセススコープを、そのリポジトリを使用するパイプライン ジョブのステップまたはusesステートメントによってcheckout明示的に参照される Azure DevOps リポジトリのみに減らすことができます。

詳細については、「Azure Repos Git リポジトリ - 参照先の Azure DevOps リポジトリにジョブ承認スコープを制限する」を参照してください。

YAML パイプライン内のリポジトリへのアクセスを保護する

前のセクションで説明したジョブ承認スコープの設定に加えて、Azure Pipelines には YAML パイプラインのリポジトリへのアクセスを保護する 設定が用意されています。

YAML パイプライン内のリポジトリへのアクセスを保護するが有効になっていない限り、パイプラインは承認されたプロジェクト内のすべての Azure DevOps リポジトリにアクセス できます。 このオプションを有効にすると、すべてのパイプラインのアクセススコープを、そのリポジトリを使用するパイプライン ジョブのステップまたはusesステートメントによってcheckout明示的に参照される Azure DevOps リポジトリのみに減らすことができます。

詳細については、「Azure Repos Git リポジトリ - YAML パイプライン内のリポジトリへのアクセスを保護する」を参照してください。

重要

YAML パイプラインのリポジトリへのアクセスの保護 は、2020 年 5 月以降に作成された新しい組織とプロジェクトに対して既定で有効になっています。

スコープ付きビルド ID

Azure DevOps では、2 つの組み込み ID を使用してパイプラインを実行します。

  • コレクション内のすべてのプロジェクト (またはAzure DevOps Servicesの組織) にアクセスできるコレクション スコープ ID
  • 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-tailspinSpaceGameWeb場合、このアカウントは名前を持ちますSpaceGameWeb Build Service (fabrikam-tailspin)

既定では、前の ジョブ承認 スコープ セクションで説明したように特に構成されていない限り、コレクション スコープ ID が使用されます。

ビルド サービス アカウントのアクセス許可を管理する

プロジェクト スコープのアクセスを設定した結果の 1 つは、プロジェクト スコープ ID に、コレクション スコープの 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 組織の組織設定 (またはプロジェクト コレクションのコレクション設定) に移動します。
    • [セキュリティ] で [ アクセス許可] を選択 します
    • [ ユーザー ] タブで、 Project Collection Build Service (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-collection-name) を探します。
    • このアカウントのパイプライン関連以外のアクセス許可に変更を加えます。
    • Your-project-name Build Service (your-collection-name) は組織またはコレクションのユーザーであるため、このアカウントを任意のリソース (たとえば、Azure Artifacts のフィード) に明示的に追加できます。

同じプロジェクト コレクション内の別のプロジェクトにアクセスするためのプロジェクトのアクセス許可を構成する

この例では、プロジェクト スコープの fabrikam-tailspin/SpaceGameWeb ビルド ID に、プロジェクトにアクセスするためのアクセス許可が fabrikam-tailspin/FabrikamFiber 付与されています。

  1. FabrikamFiber プロジェクトで、[プロジェクトの設定] の [アクセス許可] に移動します。

    プロジェクト設定を構成する方法のスクリーンショット。

  2. 外部プロジェクトという名前の新しいグループを作成し、SpaceGameWeb Build Service アカウントを追加します。 新しいセキュリティ グループの作成のスクリーンショット。

  3. [ユーザー] を選択し、SpaceGameWeb という名前を入力し、SpaceGameWeb Build Service アカウントを選択します。 最初に検索結果が表示されない場合は、[ 検索の展開] を選択します。

    SpaceGameWeb プロジェクト スコープのビルド ID ユーザーの選択のスクリーンショット。

  4. そのユーザーに 対してプロジェクト レベルの情報の表示 権限を付与します。

    ユーザーにプロジェクト レベルの情報の表示アクセス許可を付与する方法のスクリーンショット。

例 - 同じプロジェクト コレクション内の別のリポジトリにアクセスするためのアクセス許可を構成する

この例では、プロジェクト スコープの fabrikam-tailspin/SpaceGameWeb ビルド ID に、プロジェクト内のリポジトリにアクセス FabrikamFiber するためのアクセス許可が fabrikam-tailspin/FabrikamFiber 付与されています。

  1. 手順に従って、 プロジェクトスコープの SpaceGameWeb ビルド ID にプロジェクトへのアクセス許可を FabrikamFiber 付与します

  2. FabrikamFiber プロジェクトで、プロジェクト設定リポジトリFabrikamFiber に移動します。

    リポジトリ アクセスを構成します。

  1. アイコンを + 選択し、 SpaceGameWeb という名前を入力し、 SpaceGameWeb Build Service アカウントを選択します。

    リポジトリ アクセス用のユーザーを追加します。

  1. SpaceGameWeb という名前を入力し、SpaceGameWeb ビルド サービス アカウントを選択します。

    リポジトリ アクセス用のユーザーを追加する方法のスクリーンショット。

  1. そのユーザーに 読み取り アクセス許可を付与します。

    リポジトリのアクセス許可を構成する方法のスクリーンショット。

例 - 同じプロジェクト コレクション内の他のリソースにアクセスするためのアクセス許可を構成する

この例では、プロジェクト スコープの fabrikam-tailspin/SpaceGameWeb ビルド ID に、プロジェクト内の他のリソースにアクセスするためのアクセス許可が fabrikam-tailspin/FabrikamFiber 付与されています。

  1. 手順に従って、 プロジェクトスコープの SpaceGameWeb ビルド ID にプロジェクトへのアクセス許可を FabrikamFiber 付与します

  2. そのユーザーに必要なアクセス許可を構成します。

    ユーザーのアクセス許可を構成します。

よく寄せられる質問

操作方法 YAML パイプラインのジョブ承認スコープを決定しますか?

  • プロジェクトがパブリック プロジェクトの場合、ジョブ承認スコープは、他の設定に関係なく常に プロジェクト になります。

Azure DevOps Server 2019 のすべての YAML パイプラインは、コレクション ジョブ承認スコープで実行されます。

  • Azure DevOps 組織の設定の下にあるパイプライン 設定を確認します。
    • [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります
    • [ジョブの承認スコープを現在のプロジェクトに制限する] が有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
      • [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります
      • それ以外の場合、スコープは コレクションです。
  • パイプラインがプライベート プロジェクト内にある場合は、Azure DevOps 組織の設定の下にあるパイプライン設定を確認します。
    • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
    • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
      • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
      • それ以外の場合、スコープは コレクションです。

クラシック ビルド パイプラインのジョブ承認スコープを決定操作方法

  • パイプラインがパブリック プロジェクト内にある場合、ジョブ承認スコープは他の設定に関係なく プロジェクト になります。
  • パイプラインのエディターを開き、[ オプション] タブに移動します。
    • ビルド ジョブ承認スコープ現在のプロジェクトの場合、スコープは project です
    • それ以外の場合、スコープは コレクションです
  • Azure DevOps 組織の設定の下にあるパイプライン 設定を確認します。
    • [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります
    • [ジョブの承認スコープを現在のプロジェクトに制限する] が有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
      • [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっている場合、スコープは project になります
      • [ジョブ承認スコープを現在のプロジェクトに制限する] が有効になっていない場合は、パイプラインのエディターを開き、[オプション] タブに移動します。
        • ビルド ジョブ承認スコープ現在のプロジェクトの場合、スコープは project です
        • それ以外の場合、スコープは コレクションです
  • パイプラインがプライベート プロジェクト内にある場合は、Azure DevOps 組織の設定の下にあるパイプライン設定を確認します。
    • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
    • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっていない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
      • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープはプロジェクトになります。
      • リリース以外のパイプラインのジョブ承認スコープを現在のプロジェクトに制限しない場合は、パイプラインのエディターを開き、[オプション] タブに移動します。
        • ビルド ジョブ承認スコープ現在のプロジェクトの場合、スコープは project です
        • または、スコープが コレクションです。

クラシック リリース パイプラインのジョブ承認スコープを決定操作方法

Azure DevOps Server 2020 以降のクラシック リリース パイプラインは、コレクション スコープで実行されます。

  • パイプラインがパブリック プロジェクト内にある場合、ジョブ承認スコープは他の設定に関係なく プロジェクト になります。
  • パイプラインがプライベート プロジェクト内にある場合は、Azure DevOps 組織の設定の下にあるパイプライン設定を確認します。
    • リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープは project になります
    • リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限しない場合は、Azure DevOps のプロジェクト設定の下にあるパイプライン設定を確認します。
      • リリース パイプラインのジョブ承認スコープを現在のプロジェクトに制限するが有効になっている場合、スコープは project になります
      • それ以外の場合、スコープは コレクションです。