個人用アクセス トークンを使用する
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 を作成および管理します。
- ユーザー インターフェイス (UI):この記事で詳しく説明するように、ユーザー設定を使用した
- PAT ライフサイクル管理 API
Microsoft 以外のツールの AT を確立するには、 Git 資格情報マネージャーを使用するか 手動で生成します。 適切な認証メカニズムを選択するには認証ガイダンスを確認することをお勧めします。 AT は、広範なソリューションを必要としない小規模なプロジェクトに対して簡単な代替手段を提供します。 資格情報マネージャーを使用しない場合、ユーザーは毎回資格情報を入力します。
PAT の作成
組織にサインインします (
https://dev.azure.com/{Your_Organization}
)。ホーム ページからユーザー設定
を開き、[個人用アクセス トークン] を選択します。
[+ New Token] を選択します。
トークンに名前を付け、トークンを使用する組織を選択し、設定した日数後にトークンの有効期限が自動的に切れるよう設定します。
このトークンの スコープ を選択して、特定のタスク 承認します。
たとえば、 build およびリリース エージェントのトークンを作成 Azure DevOps に対して認証するには、トークンのスコープを Agent プール (読み取りおよび管理)に設定します。 監査ログ イベントを読み取り、ストリームを管理または削除するには、 [監査ログの読み取り] を選択し、[ 作成] をクリック。
Note
フル スコープの AT の作成が制限される場合があります。 その場合、Microsoft Entra ID の Azure DevOps 管理者が、特定のカスタム定義のスコープ セットに制限するポリシーを有効にしています。 詳細については、「 ポリシーを使用して AT を管理する/フル スコープの AT の作成を制限するを参照してください。 カスタム定義 PAT の場合、コンポーネント ガバナンス API
vso.governance
にアクセスするために必要なスコープは、UI では選択できません。完了したら、トークンをコピーし、安全な場所に格納します。 セキュリティ上、再び表示されることはありません。
Azure DevOps での認証にユーザー資格情報が必要な任意の場所で PAT を使用します。
重要
- パスワードと同じ注意を払って PAT を扱い、機密性を保ちます。
- Microsoft Entra ID によってサポートされている組織の場合、90 日以内に新しい PAT でサインインします。それ以外の場合、PAT は非アクティブになります。 詳細については、「条件付きアクセス ユーザーのサインイン頻度を参照してください。
通知
PAT の有効期間中、ユーザーは 2 つの通知を受け取ります。これは、作成時の最初の通知と、有効期限の 7 日前の 2 番目の通知です。
PAT を作成すると、次の例のような通知が表示されます。 この通知は、PAT が正常に組織に追加されたことを確認する役割を果たします。
次の図は、PAT の有効期限が切れる前の 7 日間の通知の例を示しています。
詳細については、「 SMTP サーバーを構成し、アラートとフィードバック要求の電子メールをカスタマイズするを参照してください。
予期しない通知
予期しない 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 を使用するには、次のコード ブロックに示すように$MyPat
をBase64-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 Credential Manager を使用します。
- Git for Windows をインストールします。
既存のリポジトリ
既存のリポジトリの場合、ユーザー名を使用して配信元を既に追加している場合は、最初に次のコマンドを実行します。
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 の スコープ を変更してアクセス許可を変更します。
ホーム ページでユーザー設定を開き、 Profile を選択します。
[セキュリティ] で、[個人アクセス トークン 選択します。 変更するトークンを選択し、編集します。
トークン名、トークンの有効期限、またはトークンに関連付けられているアクセスのスコープを編集し、 保存を選択します。
PAT を取り消す
PAT は、次のような理由でいつでも取り消すことができます。
- PAT が侵害されたと思われる場合は、PAT を取り消します。
- 不要になったら PAT を取り消します。
- PAT を取り消して、セキュリティ ポリシーまたはコンプライアンス要件を適用します。
ホーム ページでユーザー設定を開き、 Profile を選択します。
[セキュリティ] で、[個人アクセス トークン 選択します。 アクセスを取り消すトークンを選択し、 Revoke を選択します。
確認ダイアログで Revoke を選択します。
詳細については、「 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 文字形式とそのスタイルで発行されたすべてのトークンを廃止することを検討します。
関連記事
- セキュリティ、認証、および承認について説明します
- Azure DevOps の既定のアクセス許可とアクセスを確認する
- ユーザーの AT を取り消す (管理者向け)
- Azure DevOps でサービス プリンシパルとマネージド ID を管理する
よく寄せられる質問
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 資格情報プロバイダーをインストールすることをお勧めします。 詳細については、dotnet、NuGet.exe の次の例を参照してください。 Azure Pipelines を使用してパッケージを発行する場合は、 NuGet Authenticate タスクを使用して、フィード サンプルで認証します。
Q: PAT が機能しなくなったのはなぜですか?
A: PAT 認証では、完全な認証フローを使用して Azure DevOps に定期的にサインインする必要があります。 多くのユーザーは 30 日に 1 回サインインするだけで十分ですが、Microsoft Entra の構成によっては、より頻繁にサインインする必要がある場合があります。 PAT が機能しなくなった場合は、最初に組織にサインインして、完全な認証プロンプトを完了してみてください。 PAT が引き続き機能しない場合は、有効期限が切れているかどうかを確認してください。