個人用アクセス トークンを使用する

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

個人用アクセス トークン (PAT) は、Azure DevOps に認証するための代替パスワードとして機能します。 この PAT は、ユーザーを識別し、アクセスのアクセシビリティとスコープを決定します。 そのため、パスワードと同じレベルの注意を払って、PAT を扱います。

Microsoft ツールを使用する場合、Microsoft アカウント (MSA) または Microsoft Entra ID は、認識され、サポートされている方法です。 Microsoft または Microsoft Entra アカウントをサポートしていない Microsoft 以外のツールを使用している場合、またはこれらのツールとプライマリ資格情報を共有したくない場合は、AT が適切な代替手段です。

この記事では、Azure DevOps の AT の作成、使用、変更、取り消しについて説明します。

次の方法を使用して、PAT を管理できます。

Microsoft 以外のツールの AT を確立するには、Git 資格情報マネージャーを使用するか、手動で生成します。 適切な認証メカニズムを 選択するには、認証ガイダンス を確認することをお勧めします。 AT は、広範なソリューションを必要としない小規模なプロジェクトに対して簡単な代替手段を提供します。 資格情報マネージャーを使用しない場合、ユーザーは毎回資格情報を入力します。

前提条件

  • アクセス許可:
    • AT が管理されているユーザー設定にアクセスして変更するアクセス許可を持っている。
      • アクセス許可を確認する: アクセス許可を確認するには、Azure DevOps で次のいずれかのプロセスを実行します。
        • プロファイルに移動し、[ユーザー設定>の個人用アクセス トークン] を選択します。 ここで AT を表示および管理できる場合は、必要なアクセス許可があります。
        • プロジェクトに移動し、[プロジェクト設定>の権限] を選択します。 一覧でユーザー アカウントを見つけて、自分に割り当てられているアクセス許可を確認します。 トークンまたはユーザー設定の管理に関連するアクセス許可を探します。
    • 組織にポリシーが設定されている場合、Azure DevOps 管理者が特定のアクセス許可を付与するか、許可リストに追加して、AT を作成および管理することが必要になる場合があります。
    • PAT で実行するタスクによっては、追加のアクセス許可が必要になる場合があります。 例:
      • ビルド: 読み取りおよび実行
      • コード: 読み取り、書き込み、管理
      • 環境: 読み取りと管理
      • プロジェクトとチーム: 読み取り、書き込み、管理
      • 変数グループ: 読み取りおよび作成
  • アクセス レベル: 少なくとも Basic アクセス権を持ちます。
  • セキュリティのベスト プラクティス: 必要な場合にのみ使用し、定期的にローテーションするなど、AT を管理するためのセキュリティのベスト プラクティスについて理解します。

PAT の作成

  1. 組織にサインインします (https://dev.azure.com/{Your_Organization})。

  2. ホーム ページからユーザー設定 を開き、[個人用アクセス トークン] を選択します。

    選択した [個人用アクセス トークン] を示すスクリーンショット。

  3. [+ New Token] を選択します。

    選択した [新しいトークン] を示すスクリーンショット。

  4. トークンに名前を付け、トークンを使用する組織を選択し、設定した日数後にトークンの有効期限が自動的に切れるよう設定します。

    基本的なトークン情報のエントリを示すスクリーンショット。

  5. このトークンのスコープを選択して、特定のタスク承認します。

    たとえば、ビルドおよびリリース エージェントのトークンを作成して Azure DevOps に対して認証するには、トークンのスコープをエージェント プール (読み取りおよび管理)設定します。 監査ログ イベントを読み取り、ストリームを管理または削除するには、[監査ログの読み取り] を選択し、[作成] を選択します

    PAT の選択されたスコープを示すスクリーンショット。

    Note

    フル スコープの AT の作成が制限される場合があります。 その場合、Microsoft Entra ID の Azure DevOps 管理者が、特定のカスタム定義のスコープ セットに制限するポリシーを有効にしています。 詳細については、「ポリシーを使用した PAT の管理/フル スコープの PAT の作成を制限する」を参照してください。 カスタム定義 PAT の場合、コンポーネント ガバナンス API にアクセスするために必要なスコープは、 vso.governanceUI では選択できません。

  6. 完了したら、トークンをコピーし、安全な場所に格納します。 セキュリティ上、再び表示されることはありません。

    トークンをクリップボードにコピーする方法を示すスクリーンショット。

Azure DevOps での認証にユーザー資格情報が必要な任意の場所で PAT を使用します。

重要

  • パスワードと同じ注意を払って PAT を扱い、機密性を保ちます。
  • Microsoft Entra ID によってサポートされている組織の場合、90 日以内に新しい PAT でサインインします。それ以外の場合、PAT は非アクティブになります。 詳細については、「条件付きアクセスのユーザー サインイン頻度」を参照してください

通知

PAT の有効期間中、ユーザーは 2 つの通知を受け取ります。最初の通知は作成時と有効期限の 7 日前です。

PAT を作成すると、次の例のような通知が表示されます。 この通知は、PAT が正常に組織に追加されたことを確認する役割を果たします。

PAT で作成された通知を示すスクリーンショット。

次の図は、PAT の有効期限が切れる前の 7 日間の通知の例を示しています。

有効期限に近い PAT 通知を示すスクリーンショット。

詳細については、「SMTP サーバーを構成し、アラートとフィードバック要求の電子メールをカスタマイズする」を参照してください

予期しない通知

予期しない PAT 通知が表示された場合は、管理者またはツールによって PAT が作成された可能性があります。 いくつか例を挙げます。

  • git.exe経由で Azure DevOps Git リポジトリに接続すると、"git: https://dev.azure.com/{Your_Organization} on YourMachine" という名前のトークンが作成されます。
  • "Service Hooks: : Azure アプリ Service: : Deploy Web app" という名前のトークンは、ユーザーまたは管理者が Azure アプリ Service Web アプリのデプロイを設定するときに作成されます。
  • "WebAppLoadTestCDIntToken" という名前のトークンは、ユーザーまたは管理者が Web ロード テストをパイプラインの一部として設定するときに作成されます。
  • Microsoft Teams Integration Messaging Extension が設定されると、"Microsoft Teams Integration" という名前のトークンが作成されます。

警告

  • PAT がエラーで存在すると思われる場合は、PAT を取り消します。 手順に従って PAT取り消し、パスワードを変更します。
  • Microsoft Entra ユーザーの場合は、管理者に問い合わせて、不明なソースまたは場所によって組織がアクセスされたかどうかを確認します。
  • パブリック GitHub リポジトリへの偶発的な PAT チェックインに関 する FAQ を確認します

PAT を使用する

PAT は、パスワードと同様にデジタル ID として機能します。

Git

Git の操作にはユーザー名が必要です。これは空の文字列以外の任意のユーザー名です。 HTTP 基本認証で PAT を使用するには、 Base64-encode 次のコード ブロックに示すようにします $MyPat

PowerShell で、次のコードを入力します。

$MyPat = 'yourPat'
$headerValue = "Authorization: Basic " + [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":" + $MyPat))
$env:GIT_AUTH_HEADER = $headerValue

git --config-env=http.extraheader=GIT_AUTH_HEADER clone https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName

資格情報マネージャーを使用して、毎回資格情報を入力しないようにし、トークンの安全性を高めます。

既存のリポジトリ

  • 既存の配信元を削除する: ユーザー名を使用して配信元を以前に追加した場合は、次のコマンドを実行して削除します。

    git remote remove origin

  • PAT による認証: 標準認証で問題が発生した場合は、次のコマンドを実行してコマンド ラインを使用して認証します。

    git remote add origin https://dev.azure.com/<PAT>@<company_machineName>:/<project-name>/_git/<repo_name>

    git push -u origin --all

    これは path to git repo = /_git/do 、Git リポジトリ用の Azure DevOps で使用される URL パス構造を指します。 このセグメントは /_git/ 、Git リポジトリにアクセスしていることを示しており、リポジトリの実際の名前に置き換える do 必要があります。 たとえば、リポジトリに名前が付けられている my-repo場合、パスは '/_git/my-repo' になります。

  • リポジトリの複製: Git を使用していて認証が必要な場合は、次のコマンドを実行します。

    git clone https://{organization}@dev.azure.com/{organization}/_git/{repository}

    Azure DevOps 組織名と{repository}リポジトリの名前に置き換えます{organization}

コードで PAT を使用する

コードで PAT を使用して API 要求を認証し、ワークフローを自動化できます。 これを行うには、HTTP 要求の承認ヘッダーに PAT を含めます。

HTTP ヘッダーを介して PAT を提供するには、まずそれを文字列に Base64 変換します。 次の例は、C# を使用して変換する方法を Base64 示しています。


Authorization: Basic BASE64_USERNAME_PAT_STRING

結果の文字列は、次の形式で HTTP ヘッダーとして指定できます。

次の例では、C# の HttpClient クラス を使用します。

public static async void GetBuilds()
{
    try
    {
        var personalaccesstoken = "PATFROMWEB";

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(
                new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                Convert.ToBase64String(
                    System.Text.ASCIIEncoding.ASCII.GetBytes(
                        string.Format("{0}:{1}", "", personalaccesstoken))));

            using (HttpResponseMessage response = client.GetAsync(
                        "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
            {
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseBody);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

ヒント

変数を使用している場合は、次の例のように、文字列の先頭に a を追加 $ します。

public static async void GetBuilds()
{
   try
  {
      var personalaccesstoken = "PATFROMWEB";

      using (HttpClient client = new HttpClient())
       {
           client.DefaultRequestHeaders.Accept.Add(
              new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

           client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
               Convert.ToBase64String(
                   System.Text.ASCIIEncoding.ASCII.GetBytes(
                       string.Format("{0}:{1}", "", personalaccesstoken))));

          using (HttpResponseMessage response = client.GetAsync(
                       $"https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
           {
               response.EnsureSuccessStatusCode();
               string responseBody = await response.Content.ReadAsStringAsync();
               Console.WriteLine(responseBody);
           }
       }
   }
   catch (Exception ex)
   {
       Console.WriteLine(ex.ToString());
   }
}

コードが動作している場合は、基本認証 から OAuth に切り替えるのが良い時期です

AT の使用方法の詳細と例については、次の記事を参照してください。

PAT を変更する

次の手順を実行します。

  • PAT を再生成して新しいトークンを作成すると、前のトークンが無効になります。
  • PAT を拡張して有効期間を延長します。
  • PAT のスコープ変更して、そのアクセス許可を変更します。
  1. ホーム ページでユーザー設定を開き、[プロファイル] を選択 します

    PAT を変更するために選択するボタンのシーケンスを示すスクリーンショット。

  2. [セキュリティ] で、[個人用アクセス トークン] を選択 します。 変更するトークンを選択し、[編集] を選択します

    PAT を変更するために強調表示された [編集] ボタンを示すスクリーンショット。

  3. トークン名、トークンの有効期限、またはトークンに関連付けられているアクセスのスコープを編集し、[保存] を選択 します

    変更された PAT を示すスクリーンショット。

PAT を取り消す

PAT は、次のような理由でいつでも取り消すことができます。

  • PAT が侵害されたと思われる場合は、PAT を取り消します。
  • 不要になったら PAT を取り消します。
  • PAT を取り消して、セキュリティ ポリシーまたはコンプライアンス要件を適用します。
  1. ホーム ページでユーザー設定を開き、[プロファイル] を選択 します

    選択するボタンのシーケンス、Team Services、プレビュー ページ、PAT の取り消しを示すスクリーンショット。

  2. [セキュリティ] で、[個人用アクセス トークン] を選択 します。 アクセスを取り消すトークンを選択し、[取り消し] を選択します

    1 つのトークンまたはすべてのトークンを取り消す選択を示すスクリーンショット。

  3. 確認ダイアログで [取り消し] を選択します。

    PAT を取り消す確認画面を示すスクリーンショット。

詳細については、「管理者のユーザーの AT を取り消す」を参照してください

書式の変更

2024 年 7 月の時点で、Azure DevOps によって発行された PAT の形式が大幅に変更されました。 これらの変更により、Azure DevOps 向けの GitHub Advanced Security などの パートナー オファリングを通じて利用できる、より多くのセキュリティ上の利点が提供され、シークレット検出ツールが向上します。 この新しい PAT 形式は、すべての Microsoft 製品で推奨される形式に従います。 より識別可能なビットを含めることで、これらのシークレット検出ツールの誤検知率が向上し、検出されたリークをより迅速に軽減できます。

主な変更:

  • トークン長の増加: 新しいトークンの長さが 84 文字になり、52 文字のデータがランダム化されるようになりました。 この長さを増やすと、全体的なエントロピが向上し、トークンはブルート フォース攻撃の可能性に対してより耐性が高くなります。
  • 固定署名: サービスによって発行されたトークンには、76 から 80 桁の固定 AZDO 署名が含まれます。

アクションが必要です:

  • 既存の PAT を再生成する: これらのセキュリティ強化を利用するために、現在使用中のすべての AT を再生成することを強くお勧めします。
  • インテグレーターのサポート: インテグレーターは、新しいトークンと既存のトークンの長さの両方に対応するようにシステムを更新する必要があります。

重要

どちらの形式も、近い将来有効なままですが 、新しい 84 文字の形式に移行することをお客様に積極的に推奨しています。 新しい形式の採用が増えるにつれて、古い 52 文字形式とそのスタイルで発行されたすべてのトークンを廃止することを検討します。

よく寄せられる質問

Q: 1 つの組織にスコープされた PAT を編集または再生成できないのはなぜですか?

A: PAT のスコープが設定されている組織にサインインしていることを確認します。 同じ Microsoft Entra ID で任意の組織にサインインしている間は、すべての PAT を表示できますが、組織スコープのトークンは、スコープが設定されている組織にサインインしている場合にのみ編集できます。

Q: ユーザー アカウントが無効になっている場合、PAT はどうなりますか?

A: ユーザーが Azure DevOps から削除されると、PAT は 1 時間以内に無効になります。 組織が Microsoft Entra ID に接続されている場合、PAT はユーザーに属しているため、Microsoft Entra ID でも無効になります。 サービスを実行し続けるために、PAT を別のユーザーまたはサービス アカウントにローテーションすることをお勧めします。

Q: REST API を使用して PAT を更新する方法はありますか。

A: はい。PAT ライフサイクル管理 API を使用して 、PAT を更新、管理、作成する方法があります。 詳細については、REST APIFAQ を使用した PAT の管理に関するページを参照してください。

Q: すべての Azure DevOps REST API で基本認証を使用できますか。

A: いいえ。 ほとんどの Azure DevOps REST API で基本認証を使用できますが、組織とプロファイルでは OAuth のみがサポートされています。 詳細については、REST API を使用した PAT の管理に関するページを参照してください

Q: PAT を GitHub のパブリック リポジトリに誤ってチェックインした場合はどうなりますか?

A: Azure DevOps は、GitHub 上のパブリック リポジトリにチェックインされた AT をスキャンします。 漏洩したトークンが見つかると、すぐにトークン所有者に詳細な電子メール通知が送信され、Azure DevOps 組織の監査ログにイベントが 記録されます。 漏洩した個人用アクセス トークン自動取り消しポリシーを無効にした場合を除き、漏洩した PAT は直ちに取り消されます。 漏洩したトークンを取り消し、新しいトークンに置き換えることで、影響を受けるユーザーに問題を軽減することをお勧めします。

詳細については、「リークした AT を自動的に取り消す」を参照してください

Q: 個人用アクセス トークンを ApiKey として使用して、dotnet/nuget.exe コマンド ラインを使用して NuGet パッケージを Azure Artifacts フィードに発行することはできますか。

A: いいえ。 Azure Artifacts では、個人用アクセス トークンを ApiKey として渡すことはサポートされていません。 ローカル開発環境を使用する場合は、Azure Artifacts で認証するために Azure Artifacts 資格情報プロバイダーをインストールすることをお勧めします。 詳細については、dotnetNuGet.exe の次の例を参照してください。 Azure Pipelines を使用してパッケージを発行する場合は、NuGet 認証タスクを使用してフィードの例で認証します。

Q: PAT が機能しなくなったのはなぜですか?

A: PAT 認証では、完全な認証フローを使用して Azure DevOps に定期的にサインインする必要があります。 多くのユーザーは 30 日に 1 回サインインするだけで十分ですが、Microsoft Entra の構成によっては、より頻繁にサインインする必要がある場合があります。 PAT が機能しなくなった場合は、最初に組織にサインインして、完全な認証プロンプトを完了してみてください。 PAT が引き続き機能しない場合は、有効期限が切れているかどうかを確認します。

Q: 展開目的で特定のユーザーに関連付けられていないアクセス キーを作成操作方法。

A: Azure DevOps では、サービス プリンシパルまたは ID の管理を使用して、特定のユーザーに関連付けられていないアクセス キーを作成できます。 詳細については、「サービス接続の管理」、Azure Pipelines での Azure Key Vault シークレットの使用に関するページを参照してください。