Azure DevOps サービス |Azure DevOps Server |Azure DevOps Server 2022
個人用アクセス トークン (PAT) は、Azure DevOpsに認証するための代替パスワードとして機能します。 この PAT は、ユーザーを識別し、アクセスのアクセシビリティとスコープを決定します。 パスワードと同じレベルの注意を払って、PAT を扱います。
注意事項
より安全な認証方法を使用できる場合は、AT を使用しないでください。 PAT は、漏洩、盗難、または悪用される可能性のある有効期間の長い資格情報であるため、固有のセキュリティ リスクを伴います。 可能な限り、代わりに Microsoft Entra トークン、マネージド ID、またはサービス プリンシパルを使用します。
Microsoft ツールを使用すると、Microsoft アカウントまたはMicrosoft Entra IDが認識され、サポートされます。 Microsoft Entra アカウントをサポートしていないツールを使用する場合、またはプライマリ資格情報を共有したくない場合は、代替の認証方法として AT を使用することを検討してください。
ヒント
この記事の後半でAIを使用してこのタスクを支援することができます。また、作業を開始するには、Azure DevOps MCP ServerでAIサポートを有効にする方法を参照してください。
前提条件
| カテゴリ | 要求事項 |
|---|---|
| アクセス許可 | ユーザー設定へのアクセスと、パーソナルアクセストークン (PAT) が管理されている箇所の設定変更を許可するための権限。 - プロファイルに移動し、 ユーザー設定>個人アクセス トークンを選択します。 ここで PAT を表示および管理できる場合は、必要なアクセス許可があります。 - プロジェクトに移動し、 プロジェクト設定>Permissions を選択します。 一覧でユーザー アカウントを見つけて、自分に割り当てられているアクセス許可を確認します。 トークンまたはユーザー設定の管理に関連するアクセス許可を探します。 - 組織にポリシーが設定されている場合、管理者が特定の権限を付与するか、許可リストに追加することで、個人アクセストークン (PAT) を作成および管理できるようにする必要がある場合があります。 - PAT は、トークンを作成したユーザーアカウントに関連付けられています。 PAT で実行されるタスクによっては、追加のアクセス許可が必要になる場合があります。 |
| アクセス レベル | 少なくとも基本アクセス。 |
| タスク | 必要な場合にのみ PAT を使用し、定期的に交換してください。 「AT を 使用するためのベスト プラクティス」セクションを参照してください。 |
PAT を作成する
注
次の手順とスクリーンショットは、Azure DevOps サービスを反映しています。 Azure DevOps Serverエクスペリエンスは若干異なる場合があります。
所属組織 (
https://dev.azure.com/{Your_Organization}) にサインインします。ホーム ページからユーザー設定
を開き、[個人用アクセス トークン] を選択します。
[+ New Token] を選択します。
トークンに名前を付け、トークンを使用する組織を選択し、設定した日数後にトークンの有効期限が自動的に切れるよう設定します。
このトークン のスコープを 選択して、 特定のタスクを承認します。
たとえば、
ビルドおよびリリースエージェント のためのトークンを作成し、Azure DevOpsで認証を行うには、トークンのスコープをAgent Pools (Read & manage) に設定します。 監査ログ イベントを読み取り、ストリームを管理または削除するには、[監査ログを読み取る]を選択し、[作成] を選択します。
管理者は、 フル スコープの PAT の作成を制限したり、パッケージ化スコープの PAT のみに制限したりする場合があります。 より多くのスコープにアクセスする必要がある場合は、管理者に連絡して許可リストにアクセスしてください。 一部のスコープ (たとえば、
vso.governance) は、広く一般に使用されていない場合、ユーザー インターフェイス (UI) では使用できない可能性があります。完了したら、トークンをコピーし、セキュリティで保護された場所に格納します。 セキュリティ上、再度表示されることはありません。
Azure DevOps Server Web ポータル (
https://{server}/{collection}またはhttp://{server}:{port}/tfs/{collection}) にサインインします。ホーム ページからユーザー設定
を開き、[個人用アクセス トークン] を選択します。
[+ New Token] を選択します。
トークンに名前を付け、トークンを使用する組織を選択し、設定した日数後にトークンの有効期限が自動的に切れるよう設定します。
このトークン のスコープを 選択して、 特定のタスクを承認します。
たとえば、
ビルドおよびリリースエージェント のためのトークンを作成し、Azure DevOpsで認証を行うには、トークンのスコープをAgent Pools (Read & manage) に設定します。 監査ログ イベントを読み取り、ストリームを管理または削除するには、[監査ログを読み取る]を選択し、[作成] を選択します。
管理者は、 フル スコープの PAT の作成を制限したり、パッケージ化スコープの PAT のみに制限したりする場合があります。 より多くのスコープにアクセスする必要がある場合は、管理者に連絡して許可リストにアクセスしてください。 一部のスコープ (たとえば、
vso.governance) は、広く一般に使用されていない場合、ユーザー インターフェイス (UI) では使用できない可能性があります。完了したら、トークンをコピーし、セキュリティで保護された場所に格納します。 セキュリティ上、再度表示されることはありません。
pat は、Azure DevOpsでの認証にユーザー資格情報が必要な任意の場所で使用できます。 注意:
- パスワードと同じ注意を払って PAT を扱い、機密性を保ちます。 パーソナルアクセス トークン (PATs) は共有しないでください。
- Microsoft Entra IDによってサポートされている組織の場合は、新しいパーソナル アクセス トークン (PAT) で90日以内にサインインしないと、無効になります。 詳細については、「 条件付きアクセスのユーザー サインイン頻度」を参照してください。
通知
PAT の有効期間中、ユーザーは 2 つの通知を受け取ります。1 つは PAT が作成されたとき、もう 1 つは有効期限が切れる前です。
PAT を作成すると、次の例のような通知を受け取ることがあります。 この通知は、PAT が正常に組織に追加されたことを確認する役割を果たします。
トークンの有効期限が切れる前に、有効期限の通知メールが送信されます。 管理者が 組織内の PAT を作成する機能を削除した場合、メールは、AT を再生成できなくなったことを示します。 プロジェクト コレクション管理者に連絡して、その組織での PAT 作成を継続するための許可リストに追加してもらってください。
詳細については、「SMTP サーバーを構成し、アラートとフィードバック要求のメールをカスタマイズする」を参照してください。
予期しない通知
予期しない PAT 通知を受け取った場合は、管理者またはツールによって PAT が作成された可能性があります。 いくつかの例を次に示します。
-
git: https://dev.azure.com/{yourorganization} on YourMachineという名前のトークンは、git.exeを介して Azure DevOps Git リポジトリに接続するときに作成されます。 -
Service Hooks: Azure App Service: Deploy web appという名前のトークンは、ユーザーまたは管理者がAzure App Service Web アプリのデプロイを設定するときに作成されます。 -
WebAppLoadTestCDIntTokenという名前のトークンは、ユーザーまたは管理者が Web ロード テストをパイプラインの一部として設定するときに作成されます。 - Microsoft Teams Integration Messaging Extension を設定すると、
Microsoft Teams Integrationという名前のトークンが作成されます。
状況が深刻であると思われる場合:
- PAT がエラーで存在すると思われる場合は、PAT を取り消します (パスワードを変更してください)。
- Microsoft Entraユーザーの場合は、管理者に問い合わせて、不明なソースまたは場所が組織にアクセスしたかどうかを確認します。
- よくある質問のパブリック GitHub リポジトリへの意図しない PAT チェックインについてご確認ください。
PAT を使用する
PAT は、パスワードと同様にデジタル ID として機能します。 1 回限り要求を実行したり、アプリケーションをローカルでプロトタイプ作成したりするための簡単な方法として、AT を使用します。 コードで PAT を使用して REST API 要求を認証し、要求の承認ヘッダーに PAT を含めることでワークフローを自動化します。
アプリ コードが動作したら、Microsoft Entra OAuth に切り替えて、アプリのユーザーまたはサービス プリンシパルまたはマネージド ID のトークンを取得して、アプリケーションとしてトークンを取得します。 パーソナル アクセス トークン (PAT) を使用してアプリやスクリプトを長期間にわたって実行し続けないでください。 PAT が使用されている任意の場所で、Microsoft Entra トークンを使用できます。
計画外の要求Azure CLIを介してMicrosoft Entra トークンを取得することを検討してください。
HTTP ヘッダーを介して PAT を提供するには、まずそれを Base64 文字列に変換します。
次に、HTTP ヘッダーとして次の形式で指定します。
Authorization: Basic BASE64_USERNAME_PAT_STRING
PAT を変更する
PAT を変更するには、次の手順に従います。
- PAT を再生成して新しいトークンを作成し、前のトークンを無効にします。
- PAT を拡張して有効期間を延長します。
- PAT の スコープ を変更して、そのアクセス許可を変更します。
ホーム ページからユーザー設定
を開き、[個人用アクセス トークン] を選択します。変更するトークンを選択し、[ 編集] を選択します。
トークン名、トークンの有効期限、またはトークンに関連付けられているアクセスのスコープを編集し、[保存] を選択します。
PAT を取り消す
次のような理由で、PAT をいつでも取り消します。
- セキュリティ侵害: PAT が侵害された、漏洩した、またはログまたはパブリック リポジトリで公開されたと思われる場合は、すぐに PAT を取り消します。
- 不要: 作成したプロジェクト、サービス、または統合が完了したら、PAT を取り消します。
- ポリシー コンプライアンス: PAT を取り消して、セキュリティ ポリシー、コンプライアンス要件、または組織のトークン ローテーション スケジュールを適用します。
- ユーザーの変更: チーム メンバーが組織を離れたり、ロールを変更したり、アクセスが不要になった場合に PAT を取り消します。
- スコープの縮小: アクセス機能を制限する必要がある場合は、アクセス許可を減らした PAT を取り消して再作成します。
- 定期的なメンテナンス: 定期的なセキュリティ検疫とトークンライフサイクル管理の一環として PAT を取り消します。
PAT を取り消すには、次の手順に従います。
ホーム ページで、
ユーザー設定を開き、[ 個人用アクセス トークン] を選択します。[ セキュリティ] で、[ 個人用アクセス トークン] を選択します。 アクセスを取り消すトークンを選択し、[取り消す] を選択します。
確認ダイアログで、[取り消し] を選択します。
PAT の有効期限が切れた場合、または取り消された場合の動作
PAT の有効期限が切れたり取り消されたりすると、その PAT を使用するすべてのサービスまたはツールは、Azure DevOpsへの認証をすぐに失います。 影響を理解することは、ローテーションを計画し、サービスの中断を防ぐのに役立ちます。
シナリオ別のサービスへの影響
| Scenario | Behavior | エラー メッセージ | Timeline |
|---|---|---|---|
| Git 操作 (複製、プッシュ、プル) | 認証が失敗する。操作がブロックされました |
fatal: Authentication failed for '<url>' または 401 Unauthorized |
直ちに |
| Azure Pipelines CI/CD | 認証手順でビルドジョブまたはリリース ジョブが失敗する | Error: Personal access token (PAT) is invalid or expired |
次のパイプライン実行 |
| REST API 呼び出し | すべての API 要求は失敗します。統合の停止 |
401 Unauthorized または TF400813: Resource not available for anonymous access |
直ちに |
| Azure Artifacts (NuGet、npm、Maven) | パッケージの復元または発行が失敗する |
401 Unauthorized または Credentials could not be authenticated |
直ちに |
| Git Credential Manager | 再認証が必要 | ユーザーがもう一度サインインするように求められた | 次の認証試行 |
| スクリプトと自動化ツール | 認証エラーで実行が失敗する | ツール固有のエラー (ツールによって異なります) | 直ちに |
影響タイムライン
有効期限時 (指定した日付):
- PAT が自動的に非アクティブになる
- すべてのアクティブな接続の削除
- 新しい認証の試行が失敗する
有効期限切れ後の数時間:
- スケジュールされたジョブ (パイプライン、デプロイ) が次の実行で失敗する
- 対話型ユーザーは、次の操作を試みるまで気付かない場合があります
失効後 (即時):
- すべてのアクティブなセッションが終了する
- その PAT を使用するすべての新しい要求は拒否されます
予防的な予防戦略
サービスの中断を回避するには、次のプラクティスに従います。
- 早期に再生成する: 有効期限の少なくとも 7 日前に新しい PAT を作成し、古いものの有効期限が切れる前にすべての統合をテストして更新します。
- 監視の自動化: PAT ライフサイクル管理 API を 使用して、プログラムによって有効期限を確認します。
- PAT の有効期間をずらす: すべての PAT を同じ日に期限切れにしないでください。 異なるスケジュールで四半期ごとに回転させます。
- ドキュメント PAT 使用法: 各 PAT が使用される場所 (パイプライン、スクリプト、統合) の一覧を保持して、ローテーション中に更新できるようにします。
PAT の有効期限が予期せず切れた場合
認証エラーが発生した場合の回復方法は次のとおりです。
- 問題を特定する: ユーザー設定の [個人用アクセス トークン ] ページを確認して PAT の有効期限が切れたかどうかを確認するか、管理者に監査ログを確認するよう依頼します。
- 置換を作成する: アクセス許可が許可されている場合は、新しい PAT を生成します ( PAT の作成を参照)。
-
すべての統合を更新する: 古い PAT を次の新しい PAT に置き換えます。
- Git 構成ファイル (
.git/config) - パイプライン YAML ファイル
- エージェントをビルドする
- スクリプトと統合
- 環境変数
- Git 構成ファイル (
-
テスト接続: テスト操作 (
git clone、API 呼び出しなど) を実行して、新しい PAT が動作することを確認します。 - 古い PAT を取り消す: セキュリティ リスクを軽減するためにアカウントから削除します。
オンプレミスのシナリオの場合
Azure DevOps Serverでは、PAT の有効期限の動作は同じですが、影響はサーバーと接続されているサービスに対してローカルです。
PAT ローテーションと更新戦略
定期的に PAT をローテーションすると、資格情報が侵害されるリスクが軽減され、組織のセキュリティ ポリシーに準拠するのに役立ちます。
なぜPATをローテーションするのですか?
- 侵害の軽減: PAT が漏洩、侵害、または盗難にあった場合、その有効期間を制限すると、公開期間が短縮されます。
- コンプライアンス: 多くのセキュリティ標準 (SOC 2、ISO 27001、HIPAA) では、定期的な資格情報のローテーションが必要です。
- 検疫: 未使用または忘れたトークンを組織から削除します。
- 監査可能性: 頻繁にローテーションを行うと、資格情報の変更の明確な監査証跡が作成されます。
推奨される回転周期
有効期間の短い PAT を適用し、PAT の種類とリスク プロファイルに基づいてローテーション戦略を確立します。
- 個人用PAT: 90日ごと(少なくとも四半期ごと)にローテーションしてください。
- サービス アカウントの PAT: サービスの中断を防ぐため、可能な場合は自動更新を設定し、90 日ごとにローテーションしてください。
- 特権または広範なスコープを持つ PAT(たとえば、重要なインフラストラクチャで使用されるもの): セキュリティを強化するため、30 日ごとにローテーションしてください。
-
オフボーディング: チーム メンバーに以下のいずれかのステータス変更があった場合は、直ちに PAT を失効させてください。
- 終了または出発
- 別のチームまたは組織に転送する
- 休暇
- ロールの変更または責任のシフト
長期的な戦略: AT から強力な認証に移行する
Microsoftでは、より強力で監査可能な認証方法を優先して PAT の使用を減らすことをお勧めします。 可能であれば、次の場所に移行します。
- Microsoft Entra トークン — 時間制限付き、更新可能、Entra IDを通じて監査可能
- マネージド ID — Azureホステッド サービスの場合 (App Service、Functions、Container Apps)
- サービス プリンシパル - テナント間またはAzure以外のシナリオの場合
- Microsoft Entraを使用した OAuth 2.0 — ブラウザーベースの統合とサード パーティ製アプリ用
移行の利点:
- 攻撃対象領域の縮小: 有効期間が長い静的資格情報を排除
- 監査性の向上: ネイティブ Entra ID監査ログでは、すべての認証が追跡されます
- 自動化されたライフサイクル: トークンは既定で期限切れになります。手動回転は不要
- 条件付きアクセスのサポート: 組織全体のセキュリティ ポリシーを適用する
認証の代替方法の詳細については、Microsoft Entra認証とサービス プリンシパルとマネージド ID に関するページを参照してください。
回転ワークフロー
サービスを中断せずに PAT をローテーションするには、次の手順に従います。
手順 1: 新しい PAT を作成する
- ホーム ページでユーザー設定を開き、[ 個人用アクセス トークン] を選択します。
- [+ New Token] を選択します。
- 古いトークンと 同じ名前 を入力します (簡単に追跡できます)。
- 有効期限を今日から 90 日 に設定します。
- 古いトークン とまったく同じスコープ を選択します。
- [ 作成] を選択し、新しいトークンをすぐにコピーします (再び表示されません)。
手順 2: 新しい PAT をテストする
古い PAT を廃止する前に、新しい PAT が機能することを確認します。
# For Git (replace with your URL and new PAT)
git clone https://<user>:<new-pat>@dev.azure.com/<org>/<project>/_git/<repo>
# For REST API
curl -u :<new-pat> https://dev.azure.com/<org>/_apis/projects
手順 3: すべての統合を更新する
古い PAT を使用するサービスまたはツールごとに、次の手順を実行します。
| Integration | 更新メソッド |
|---|---|
| Git 資格情報 |
.git/configまたは Git 資格情報マネージャーを更新する |
| パイプライン YAML | サービス接続または変数参照を更新する |
| スクリプト/ツール | 構成ファイルまたは環境変数を更新する |
| Azure Artifacts |
nuget.config、.npmrc、または資格情報プロバイダーを更新する |
| ビルド エージェント | Web UI を使用してエージェントの構成を更新する |
例: パイプライン変数の更新
# Before
- script: npm install
env:
NPM_TOKEN: $(old-pat-variable)
# After
- script: npm install
env:
NPM_TOKEN: $(new-pat-variable)
手順 4: 機能を確認する
各統合を更新した後、テストします。
- パイプライン ジョブを実行します。
- スクリプトを手動で実行します。
- Git 操作を試みます。
- API 呼び出しを確認します。
手順 5: 古い PAT を取り消す
すべての統合が更新され、テストされたら、古い PAT を取り消します。
- ホーム ページでユーザー設定を開き、[ 個人用アクセス トークン] を選択します。
- 古い PAT を選択します。
- [ 取り消し ] を選択して確定します。
ローテーションのシナリオ: チームメンバーの離任対応
チーム メンバーが離れるとき:
即時措置(出発日):
- 管理者が組織設定>セキュリティ >個人用アクセス トークンからすべての AT を取り消す
- 管理者は、このユーザーによって作成されたすべての AT の監査ログを確認します
- PAT を使用するすべてのサービスが直ちに中断されます (予期される)
1 週間以内:
- そのユーザーの PAT を使用しているチームは、共有サービス アカウントまたは新しい PAT にローテーションする必要があります
- すべてのスクリプト、パイプライン、統合を更新する
進行中:
- 孤立した PAT の監査ログを毎週確認する
PAT ライフサイクル管理 API を使用したローテーションの自動化
大規模なデプロイでは、プログラムで PAT をローテーションします:
import requests
from datetime import datetime, timedelta
# 1. Get PAT metadata (using Entra token)
org_url = "https://dev.azure.com/myorg"
entra_token = "YOUR_ENTRA_TOKEN"
response = requests.get(
f"{org_url}/_apis/tokens/pats",
headers={"Authorization": f"Bearer {entra_token}"},
params={"api-version": "7.1-preview.1"}
)
pats = response.json()["value"]
# 2. Find PATs expiring in 7 days
expiring_soon = [
pat for pat in pats
if (datetime.fromisoformat(pat["expiresOn"].replace("Z", "+00:00"))
- datetime.now().astimezone()).days <= 7
]
# 3. Create new PATs for expiring ones
for old_pat in expiring_soon:
new_pat_payload = {
"displayName": old_pat["displayName"],
"scope": old_pat["scope"],
"targetAccounts": old_pat["targetAccounts"],
"validFrom": datetime.now().isoformat(),
"validTo": (datetime.now() + timedelta(days=90)).isoformat(),
}
# Create new PAT
new_response = requests.post(
f"{org_url}/_apis/tokens/pats",
json=new_pat_payload,
headers={"Authorization": f"Bearer {entra_token}"},
params={"api-version": "7.1-preview.1"}
)
new_pat = new_response.json()
print(f"Created new PAT: {new_pat['patToken']} (save securely)")
# TODO: Update integrations with new PAT
# TODO: Test new PAT
# TODO: Revoke old PAT after verification
print(f"\nRotated {len(expiring_soon)} PATs")
監査証跡: PAT の作成と失効の追跡
組織の管理者とセキュリティ チームは、コンプライアンス、トラブルシューティング、脅威の検出について PAT アクティビティを監視する必要があります。
PAT 監査ログを検索する場所
- 自分の組織に移動:
https://dev.azure.com/<org> - [組織の設定] を選択します。
- [監査ログ] を選択します。
- フィルターを使用して PAT イベントを検索します。
- Azure DevOps Server コレクションに移動します。
- [ コレクションの設定] を選択します。
- [監査ログ] を選択します。
- フィルターを使用して PAT イベントを検索します。
PAT イベントのフィルター処理
監査ログで、PAT 関連のアクティビティをフィルター処理します。
| イベントの種類 | Description | 示す |
|---|---|---|
PatCreated |
新しい PAT が作成されました | 新しい資格情報が発行されました |
PatModified |
PAT のスコープまたは有効期限が変更されました | 資格情報が更新または再取得されました |
PatRegenerated |
既存の PAT が再生成 (回転) されました | 古いトークンが無効になり、新しいトークンが発行されました |
PatRevoked |
PAT が取り消されました | 資格情報が無効 (即時効果) |
PatInactiveRevoked |
PAT は非使用のため自動的に取り消されました | 期限切れの認証情報が削除されました |
監査ログ エントリの読み取り
各監査ログ エントリには、次のものが含まれます。
- タイムスタンプ: アクションが発生したとき
- ユーザー: アクションを実行したユーザー (または自動失効の場合は "システム")
- イベント: PAT アクションの種類
- 詳細: 影響を受ける PAT ID、スコープ、組織 (使用可能な場合)
- IP アドレス: アクションのソース (脅威調査用)
監査ログの保持期間
- Azure DevOps サービス: 既定で 90 日間保持される監査ログ (管理者はこの設定を構成できます)
- Azure DevOps Server: アイテム保持ポリシーは、SQL Server構成 (通常は 1 ~ 2 年) によって異なります
例: 所有者不明の PAT を調査する
本来は有効であるべきでない古い PAT が、まだ有効になっているのを見つけたとします。
- アクティブなトークン一覧から PAT ID を書き留めます。
-
監査ログで、 その ID を持つ
PatCreatedイベントを検索します。 - 作成エントリを確認します。作成したユーザー、いつ、どの組織を作成したか。
-
使用状況を確認する:
PatModifiedまたはPatRegeneratedイベントが存在する場合、トークンはアクティブに使用されていました。 -
失効の確認:
PatRevokedイベントがない場合、PAT は引き続き有効です。 - アクションを実行する: 不要になった場合は PAT を取り消すか、ローテーションするように所有者に通知します。
監査監視のベスト プラクティス
- PAT イベントを毎月確認する: 孤立したトークンまたは疑わしいトークンを特定します。
-
アラートの設定: 組織でAzure Monitorを使用している場合は、
PatCreatedまたはPatRevokedイベントに関するアラートを生成します。 - アイテム保持ポリシーに準拠する: コンプライアンス要件に従って監査ログをエクスポートおよびアーカイブします。
- ユーザー別の追跡: 最も多くの AT を作成するユーザーを監視します (リスクの高いプラクティスを示している可能性があります)。
-
異常を調査する:
- 営業時間外の予期しない
PatCreatedイベント。 - 同じユーザーに対する複数の
PatRevokedイベント (アカウント侵害の可能性)。 -
PatCreated通常とは異なる IP アドレスから。
- 営業時間外の予期しない
監査ログへのプログラムによるアクセス (REST API)
管理者は、REST API を使用して監査ログに対してクエリを実行できます。
# List recent audit log events (last 10)
curl -u :<entra-token> \
"https://dev.azure.com/<org>/_apis/audit/auditlog?api-version=7.1-preview.1" \
| jq '.value[] | select(.eventType | contains("Pat"))'
組織の PAT 有効期限ポリシー
組織の管理者は、PAT の最小有効期間を適用し、トークンの作成を制限して、過度に広範なアクセスを防ぐことができます。 これらのポリシーにより、セキュリティ標準への準拠が保証され、有効期間が長い資格情報が侵害されるリスクが軽減されます。
- 組織の設定>ポリシー (またはセキュリティ>個人アクセス トークン) に移動します。
- 次の設定を選択:
- 完全スコープの PAT 制限: 組織へのフル アクセスを持つトークンの作成をユーザーに制限します。
- グローバル PAT の制限: 複数の組織にアクセスするトークンをユーザーが作成できないように制限します。
- トークンの有効期間の制限: PAT の最大有効期間を設定します (たとえば、90 日を超えるトークンはありません)。
詳細については、「 管理者向けのポリシーを使用した PAT の管理」を参照してください。
PAT ライフサイクル管理 API
PAT ライフサイクル管理 API は、UI を介して大量のトークンを維持できない場合に役立ちます。 PAT ローテーションをプログラムで管理することで、PAT を定期的に回転させ、既定の有効期間を短縮することもできます。 Microsoft EntraテナントとAzure DevOps組織でサンプル Python アプリを構成できます。
これらの API に関する注意事項を次に示します。
- この API にアクセスするにはMicrosoft Entraアクセス トークンが必要です。 新しいトークンを作成するときは、より強力な形式の認証を使用します。
- "代理ユーザー" フローを使用するユーザーまたはアプリのみが、個人用アクセストークン (PAT) を生成できます。 "on-behalf-of application" フローや Microsoft Entra アクセス トークンを発行しない認証フローを利用するアプリは、この API で使用することはできません。 そのため、 サービス プリンシパルまたはマネージド ID は、AT を作成または管理できません。
- 以前は、PAT ライフサイクル管理 API では
user_impersonationスコープのみがサポートされましたが、vso.patsスコープが使用可能になり、これらの API で使用することをお勧めします。 以前にこれらの API を呼び出すためにuser_impersonationに依存していたすべてのアプリをダウンスコープします。
PAT 管理にAzure CLIを使用する
az devops CLI には、カスタム スクリプトを記述せずに AT を管理するコマンドが用意されています。 完全な CLI リファレンスについては、AZURE DEVOPS CLI と PAT を使用したログインを参照してください。
# List all your PATs
az devops user list
# Create a new PAT with limited scope
az devops token list \
--organization https://dev.azure.com/myorg \
--user <user-id>
# Example: Using az devops commands in a rotation script
# Sign in with Entra token (recommended)
az login --use-device-code
# List organization members (for bulk admin operations)
az devops security group membership list \
--organization https://dev.azure.com/myorg \
--group-id <admin-group-id>
自動ローテーションに REST API を使用する
大規模な PAT 管理には、REST API エンドポイントを使用します。
# List all PATs for a user (requires Entra token)
curl -X GET \
-H "Authorization: Bearer <entra-token>" \
"https://dev.azure.com/<org>/_apis/tokens/pats?api-version=7.1-preview.1"
# Create a new PAT
curl -X POST \
-H "Authorization: Bearer <entra-token>" \
-H "Content-Type: application/json" \
-d '{
"displayName": "CI/CD PAT",
"scope": "vso.build vso.release_manage vso.code_write",
"validTo": "2026-10-07T00:00:00.000Z"
}' \
"https://dev.azure.com/<org>/_apis/tokens/pats?api-version=7.1-preview.1"
# Revoke a PAT by ID
curl -X DELETE \
-H "Authorization: Bearer <entra-token>" \
"https://dev.azure.com/<org>/_apis/tokens/pats/<pat-id>?api-version=7.1-preview.1"
PAT 形式
PAT 文字列は、 漏洩した PAT 検出ツール と パートナー オファリングのシークレット検出を改善するために設計された特定の形式を使用します。 この形式には、誤検知検出率を向上させ、検出されたリークの迅速な軽減を可能にする、識別可能なビットが含まれています。
- トークンは 84 文字で、52 文字のデータがランダム化されるため、全体的なエントロピが向上します。 トークンはブルート フォース攻撃に対して耐性があります。
- Azure DevOpsによって発行されたトークンには、76 から 80 桁の固定
AZDO署名が含まれます。
PAT と統合し、PAT 検証が組み込まれている場合は、検証コードが 84 文字のトークン長に対応していることを確認します。
個人アクセス トークン (PATs) を使用するための最良の方法
代替案を検討する
- Azure CLI を使用して、有効期間の長い PAT を作成するのではなく、計画外の要求に対してMicrosoft Entra トークンを取得します。
-
Git Credential Manager や Azure Artifacts Credential Manager などの資格情報マネージャーを使用して、認証を
oauthまたは Microsoft Entra トークンに設定して、資格情報の管理を簡略化します。
PAT の作成
- PAT 名に個人データを含めないでください。 実際の PAT トークンの一部またはすべてを含むように PAT 名の名前を変更しないでください。
- すべての組織で必要な場合を除き、グローバルな AT の作成は避けてください。
- フローまたはユース ケースごとに異なるトークンを使用します。
- 各 PAT に必要な最小スコープのみを選択します。 特定のタスクに必要な最小限の特権を付与します。 1 つの広範なスコープのトークンを使用する代わりに、異なるワークフローのスコープが制限された個別の AT を作成します。 PAT に読み取り専用アクセス許可が必要な場合は、必要になるまで書き込みアクセス許可を指定しないでください。
- PAT の有効期間を短くします。
PAT の管理
- PAT を共有しないでください。
- セキュリティで保護されたキー管理ソリューションにPATを保存します。例として、Azure Key Vaultがあります。
- UI または PAT ライフサイクル管理 API を使用して、定期的に PAT をローテーションまたは再生成します。
- 不要になったら、個人アクセストークン(PAT)を取り消します。
管理者向け
- テナント管理者は、 次の制限を行うポリシーを設定する必要があります。
- グローバル PAT の作成 (組織スコープのトークンが必要)
- フル スコープの PAT の作成 (制限付きスコープが必要)
- 有効期間が長い PAT 期間 (30 ~ 90 日の最大有効期間を適用)
- テナント管理者は、PAT が侵害された場合に組織ユーザーの PAT を取り消すことができます。
- 組織の管理者は、組織での PAT の作成を制限し、可能な場合は、サービスを AT ではなくMicrosoft Entra認証に移行する必要があります。
管理者監査のチュートリアル: 組織内のすべての PAT を管理する
組織の管理者は、組織全体のすべての AT を監査および管理して、セキュリティ ポリシーを適用し、危険なトークンを特定できます。
手順 1: 組織の PAT 管理ページにアクセスする
- 組織の設定>セキュリティ>個人アクセス トークンに移動します
- 既定では、独自の PAT が表示されます。
- 全ユーザーのトークンを表示するには、ドロップダウンから すべての PAT を選択します
- コレクション設定>セキュリティ>個人用アクセス トークンに移動します
- コレクション内のすべてのトークンを表示するには、すべてのPATを選択します。
手順 2: 危険度の高いトークンをフィルター処理して識別する
以下を探してください:
- 有効期間の長いトークン (有効期限 > 90 日): ローテーションまたは失効の候補
- フル スコープ トークン (スコープ = すべて): 最も高いセキュリティ リスク。制限するポリシーを適用する
- グローバル トークン (複数の組織にアクセス): これらのトークンは避けてください。組織スコープの代替手段を検討する
- 古いトークン (最近のアクティビティなし): 取り消しても安全です
- 業務時間外に作成されたトークン: 潜在的なセキュリティ インシデント
手順 3: PAT イベントの監査ログを確認する
- 組織の設定>Audit ログに移動します
- イベントの種類でフィルター処理する:
-
PatCreated— トークンが発行された日時を見つける -
PatRevoked— トークンが無効にされたタイミングを追跡する -
PatRegenerated— 回転アクティビティを監視する
-
- コンプライアンス レポート用の監査ログをエクスポートする (90 日間のリテンション期間)
手順 4: 侵害されたトークンまたは未使用のトークンを取り消す
侵害された PAT または不要な PAT が見つかる場合:
- 組織の設定>セキュリティ>個人アクセス トークンに移動します
- すべての PAT を選択する
- 無効にする PAT を選択してください
- [取り消し] を選択して確認する
- 必要に応じて、トークン所有者に代替 PAT を作成するよう通知する
手順 5: 組織のポリシーを適用する
- [組織の設定] に移動します>ポリシー
- 構成:
- 完全スコープの PAT の作成を制限する - スコープ付きトークンが必要
- グローバル PAT の作成を制限 する - 組織スコープのトークンが必要
- PAT の最大有効期間を設定 する — 例: トークンが 90 日を超えないようにする
- セキュリティ ハンドブックまたは Wiki でポリシーを文書化する
例: オフボーディング時の一括失効
ユーザーが離れた場合は、そのユーザーのすべてのPATを無効化します。
- 組織の設定>セキュリティ>個人アクセス トークン>すべての PAT に移動します
- 退職するユーザーの名前またはメールアドレスで絞り込む
- それらのすべての PAT を選択
- [取り消し ] (一括アクション) を選択し、確認する
すべての PAT がすぐに取り消され、サービスでこれらの資格情報が使用されなくなります。
よく寄せられる質問
質問 1 つの組織にスコープを設定した PAT を編集または再生成できないのはなぜですか?
A. PAT のスコープが設定されている組織にサインインします。 Access スコープ フィルターを変更することで、同じMicrosoft Entra ID内の任意の組織にサインインしているときに、PAT を表示できます。 特定の組織にサインインしている場合は、組織スコープのトークンのみを編集できます。
質問 ユーザー アカウントが無効になっている場合、PAT はどうなりますか?
A. ユーザーがAzure DevOpsから削除されると、PAT は 1 時間以内に無効になります。 組織がMicrosoft Entra IDに接続されている場合、PAT はユーザーに属しているため、Microsoft Entra IDでも無効になります。 PAT を別のユーザーまたはサービス アカウントにローテーションして、サービスを実行し続けます。
質問 すべてのAzure DevOps REST API で PAT を使用できますか?
A. No. ほとんどのAzure DevOps REST API で PAT を使用できますが、組織化とプロファイル PAT 管理ライフサイクル API では、Microsoft Entra トークンのみがサポートされます。
質問 PAT を誤って GitHub のパブリック リポジトリにチェックインした場合はどうなりますか?
A. Azure DevOps は公開されている GitHub リポジトリ内で漏洩した個人用アクセス トークン (PAT) をスキャンします。 検出されると、Azure DevOpsはトークン所有者に通知し、イベントを audit ログに記録します。 無効化されていない限り、リークした PAT は自動的に取り消されます。 詳細については、「漏洩した PAT を自動的に取り消す」を参照してください。
質問 dotnet/nuget.exe コマンド ラインを使用して NuGet パッケージを Azure Artifacts フィードに発行する API キーとして個人用アクセス トークンを使用できますか?
A. No. Azure Artifactsでは、API キーとして PAT を渡すことはできません。
ローカル開発環境を使用する場合は、Azure Artifacts Credential Provider をインストールしてAzure Artifactsで認証します。
詳細については、 dotnet と NuGet.exeの例を参照してください。
Azure Pipelinesを使用してパッケージを発行する場合は、NuGet Authenticate タスクを使用してフィードで認証します。
詳細については、Azure Pipelines (YAML/クラシック) を使用した
質問 PAT が機能しなくなったのはなぜですか?
A. PAT 認証では、完全な認証フローを使用してAzure DevOpsに定期的にサインインする必要があります。 多くのユーザーには 30 日に 1 回サインインするだけで十分ですが、Microsoft Entra構成によっては、より頻繁にサインインする必要がある場合があります。 PAT が機能しなくなった場合は、最初に組織にサインインし、完全な認証プロンプトを完了してみてください。 PAT が引き続き機能しない場合は、有効期限が切れているかどうかを確認します。
Azure DevOps Serverの場合、IIS 基本認証 を有効にすると PAT の使用が無効になります。 IIS 基本認証をオフのままにします。
質問 特定のユーザーに関連付けられていないアクセス トークンを作成するにはどうすればよいですか?
A. PATは常に、それを作成したユーザーのIDに関連付けられます。 特定のユーザーに関連付けられていないトークンを使用するには、アプリケーション サービス プリンシパルまたはマネージド ID によって発行されたMicrosoft Entra トークンを使用します。 パイプラインの場合は、 サービス接続 を使用して、ユーザー固有の資格情報なしで認証します。 Azure DevOps 全体での PAT 使用の削減について詳しく知るには、こちらをご覧ください。
質問 API 経由で PAT を再生成またはローテーションするにはどうすればよいですか? UI でそのオプションを見ましたが、API に同様のメソッドが表示されません。
A. UI の 再生成 機能は、実際にはいくつかのアクションを実行します。これは API を介してレプリケートできます。
PAT を回転するには、次の手順に従います。
- GET 呼び出しを使用して PAT メタデータを 取得 します。
- 古い PAT ID を持つ POST 呼び出しを使用して、新しい PAT を作成します。
- DELETE 呼び出しを使用して、古い PAT を取り消します。
質問 有効期限が切れた、取り消された、または非アクティブな PAT がAzure DevOpsトークンの一覧に表示される期間はどのくらいですか?
A. 有効期限が切れている、または取り消された AT を使用または再生成することはできません。 これらの非アクティブなトークンは、有効期限が切れた後、または失効後数か月間表示され、自動的に削除されます。
質問 Microsoft Entra アプリを使用して PAT ライフサイクル管理 API を呼び出そうとすると、"管理者の承認が必要です" というメッセージが表示されるのはなぜですか?
A. アプリケーションが組織のリソースにアクセスするには、テナントのセキュリティ ポリシーに管理者の同意が必要です。 テナント管理者に問い合わせてください。
AI を使用して個人用アクセス トークンを管理する
Azure DevOps MCP Server を構成する場合は、AI アシスタントを使用して、自然言語プロンプトを使用して個人用アクセス トークンを管理および確認できます。 MCP サーバーは、AI アシスタントにAzure DevOps データへの安全なアクセスを提供するため、Web インターフェイスを移動することなく、トークンの一覧表示、有効期限の確認、トークンスコープの確認を行うことができます。
個人用アクセス トークンを管理するためのプロンプトの例
| Task | プロンプトの例 |
|---|---|
| 最小特権トークンを作成する | Help me create a PAT for <organization-name> that only has read access to work items and code in the <project-name> project, valid for 30 days |
| 期限切れのトークンをローテーションする | Show me all my PATs in <organization-name> expiring in the next 14 days, their scopes, and what I need to update when I regenerate them |
| トークンの管理状況を監査する | List all my active PATs in <organization-name>, when each was last used, and flag any that have broader scopes than necessary |
| 認証エラーをトラブルシューティングする | My PAT stopped working for Git push to <repo-name> in <project-name> - help me check if it expired, has the right scope, or if a policy is blocking it |
| Entra 認証に置き換えるトークンを検索する | Show me which of my PATs in <organization-name> are used for interactive scenarios that could switch to Microsoft Entra authentication instead |
| CI/CD サービス接続を設定する | What's the minimum PAT scope needed for an Azure Pipelines service connection to <organization-name> that runs builds and deploys releases? |
ヒント
Visual Studio Code、agent mode を使用している場合は、ローテーションが必要なトークンや過剰なスコープを持つトークンの識別など、AT の確認と監査に特に役立ちます。
- 以前のクエリの古いデータやキャッシュされたデータを使用しないようにするには、プロンプトに
Do not use previously fetched data追加します。