次の方法で共有


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

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

個人用アクセス トークン (PAT) は、Azure DevOps に認証するための代替パスワードとして機能します。 この記事では、Azure DevOps の AT の作成、使用、変更、取り消しについて説明します。

PAT について

AZURE DevOps のセキュリティ資格情報として PAT を使用します。 この PAT は、ユーザーを識別し、アクセスのアクセシビリティとスコープを決定します。 そのため、パスワードと同じレベルの注意を払って、PAT を扱います。

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

次の方法を使用して、PAT を作成および管理します。

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

PAT の作成

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

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

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

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

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

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

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

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

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

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

    Note

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

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

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

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

重要

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

通知

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

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

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

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

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

予期しない通知

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

  • git.exe経由で Azure DevOps Git リポジトリに接続すると、"git: yourMachine に https://dev.azure.com/{Your_Organization} " という名前のトークンが作成されます。
  • "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 リポジトリへの accidental PAT チェックインに関する FAQ を確認

PAT を使用する

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

Git

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

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

それ以外の場合は、次のコマンドを実行します。

git remote add origin https://dev.azure.com/<PAT>@<company_machineName>:/<path-to-git-repo> path to git repo = <project name>/_git/<repo_name> git push -u origin --all

コードで 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());
    }
}

ヒント

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

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. ホーム ページでユーザー設定を開き、 Profile を選択します。

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

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

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

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

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

PAT を取り消す

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

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

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

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

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

  3. 確認ダイアログで Revoke を選択します。

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

詳細については、「 Revoke user PAT for admins」を参照してください。

書式の変更

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

主な変更:

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

アクションが必要です:

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

重要

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

よく寄せられる質問

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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