パーソナルアクセストークン
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
パーソナルアクセストークンは、GitLabへの認証済みアクセストークンを提供します。これらはOAuth2トークンの代替であり、グループアクセストークンおよびプロジェクトアクセストークンと似ていますが、グループまたはプロジェクトではなくユーザーに紐付けられます。
パーソナルアクセストークンを使用して、以下を認証することができます:
- GitLab APIで認証。
- HTTPSを介したGitの場合。使用方法:
- 任意の空白以外の値をユーザー名として使用します。
- パーソナルアクセストークンをパスワードとして使用します。
2要素認証(2FA)またはSAMLが有効になっている場合、パーソナルアクセストークンで認証する必要があります。
GitLabマネージドTerraformステートバックエンドやコンテナレジストリなど、ユーザー名を必要とする一部のGitLab機能では、GitLabユーザー名とパーソナルアクセストークンを使用します。これらのケースでは、ユーザー名は必須ですが、認証の一部として評価されません。詳細については、イシュー212953を参照してください。
GitLab Self-ManagedおよびGitLab Dedicatedインスタンスでは、管理者はユーザートークンAPIを使用して、特定のユーザーとして認証するための代理トークンを作成できます。
トークンの使用状況情報を表示する
パーソナルアクセストークンページには、アクセストークンに関する情報が表示されます。
このページから、以下の操作を実行できます:
- パーソナルアクセストークンの作成、ローテーション、および失効。
- アクティブおよび非アクティブなすべてのパーソナルアクセストークンを表示します。
- トークン情報(スコープ、割り当てられたロール、有効期限を含む)を表示します。
- 使用状況の情報(使用日、および最後の5つの異なる接続IPアドレスを含む)を表示します。
パーソナルアクセストークンを表示するには:
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > パーソナルアクセストークンを選択します。
詳細パネルを開くには、トークンの名前を選択します。デフォルトでは、アクティブなトークンのみが表示されます。検索バーを使用して、アクセストークンのリストをフィルタリングします。
パーソナルアクセストークンを作成する
拡張された最大許容ライフタイム制限の利用可能性は、機能フラグによって制御されます。詳細については、履歴を参照してください。
パーソナルアクセストークンを作成するには:
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > パーソナルアクセストークンを選択します。
- トークンを生成ドロップダウンリストから、レガシートークンを選択します。
- トークン名に、トークンの名前を入力します。
- オプション。トークンの説明に、トークンの説明を入力します。
- 有効期限に、トークンの有効期限を入力します。
- トークンは、その日のUTC深夜に期限が切れます。
- 日付を入力しない場合、有効期限は今日から365日後に設定されます。
- デフォルトでは、有効期限は今日から365日を超えることはできません。GitLab 17.6以降では、管理者はアクセストークンの最大ライフタイムを変更できます。
- 1つ以上のパーソナルアクセストークンスコープを選択します。
- トークンを生成を選択します。
パーソナルアクセストークンが表示されます。パーソナルアクセストークンを安全な場所に保存します。ページを離れるか更新すると、再度表示することはできません。
すべてのアクセストークンは、パーソナルアクセストークン用に設定されたデフォルトプレフィックス設定を継承します。
パーソナルアクセストークンの詳細を事前に入力する
名前、説明、およびスコープのリストをURLに付加することで、パーソナルアクセストークンの詳細を事前に入力できます。例:
https://gitlab.example.com/-/user_settings/personal_access_tokens?name=Example+Access+token&description=My+description&scopes=api,read_userパーソナルアクセストークンは慎重に取り扱う必要があります。パーソナルアクセストークンの管理に関するガイダンスについては、トークンのセキュリティに関する考慮事項を参照してください。
パーソナルアクセストークンのスコープ
スコープは、パーソナルアクセストークンで認証する際に利用できるアクションを定義します。以下のスコープが利用可能です:
きめ細かいパーソナルアクセストークンは異なるスコープを使用します。
| スコープ | 説明 |
|---|---|
api | すべてのグループとプロジェクト、コンテナレジストリ 、依存プロキシ 、およびパッケージレジストリを含む、APIへの完全な読み取りおよび書き込みアクセスを付与します。また、Git-over-HTTPを使用してレジストリとリポジトリへの完全な読み取りおよび書き込みアクセスも付与します。 |
read_api | APIへの読み取りアクセスを許可します。このアクセスの対象には、すべてのグループとプロジェクト、コンテナレジストリ、パッケージレジストリが含まれます。 |
read_registry | プロジェクトがプライベートで認可が必要な場合、コンテナレジストリイメージへの読み取りアクセス(プル)を付与します。コンテナレジストリが有効になっている場合にのみ使用できます。 |
write_registry | プロジェクトがプライベートで認可が必要な場合、コンテナレジストリイメージへの書き込みアクセス(プッシュ)を付与します。コンテナレジストリが有効になっている場合にのみ使用できます。 |
read_virtual_registry | プロジェクトがプライベートで認可が必要な場合、依存プロキシを介したコンテナイメージへの読み取りアクセス(プル)を付与します。依存プロキシが有効になっている場合にのみ使用できます。 |
write_virtual_registry | プロジェクトがプライベートで認可が必要な場合、依存プロキシを介したコンテナイメージへの読み取りおよび書き込みアクセス(プル、プッシュ、削除)を付与します。依存プロキシが有効になっている場合にのみ使用できます。 |
read_repository | Git-over-HTTPまたはリポジトリファイルAPIを使用して、プライベートプロジェクトのリポジトリへの読み取りアクセス(プル)を付与します。 |
write_repository | Git-over-HTTPを使用して、プライベートプロジェクトのリポジトリへの読み取りおよび書き込みアクセス(プルおよびプッシュ)を付与します。API認証はサポートしていません。 |
create_runner | Runnerを作成する権限を付与します。 |
manage_runner | Runnerを管理する権限を付与します。 |
admin_mode | 管理者モードが有効になっている場合にAPIアクションを実行する権限を付与します。GitLab Self-Managedインスタンスの管理者のみが使用できます。 |
ai_features | GitLab Duo、コード提案API、およびGitLab Duo Chat APIのアクションを実行する権限を付与します。GitLab Duoプラグインfor JetBrainsと連携するように設計されています。その他のすべての拡張機能については、個々の拡張機能のドキュメントを参照してください。GitLab Self-Managedバージョン16.5、16.6、16.7では動作しません。 |
k8s_proxy | Kubernetesエージェントを使用してKubernetes APIコールを実行する権限を付与します。 |
self_rotate | パーソナルアクセストークンAPIを使用して、このトークンをローテーションする権限を付与します。他のトークンのローテーションは許可しません。 |
read_service_ping | 管理者として認証すると、APIを介してService Pingペイロードをダウンロードするアクセス権を付与します。 |
sudo | 管理者として認証されている場合、システム内の任意のユーザーとしてAPIアクションを実行する権限を許可します。 |
read_user | /user APIエンドポイントを介して、認証済みユーザーのプロファイルへの読み取り専用アクセスを許可します。これには、ユーザー名、公開メール、および氏名が含まれます。また、/usersの下にある読み取り専用APIエンドポイントへのアクセスも許可します。 |
外部認可を有効にしている場合、パーソナルアクセストークンはコンテナまたはパッケージレジストリにアクセスできません。アクセスを復元するには、外部認可を無効にします。
パーソナルアクセストークンをローテーションする
トークンをローテーションして、元のトークンと同じ権限とスコープを持つ新しいトークンを作成します。元のトークンは直ちに無効になり、GitLabは監査目的で両方のバージョンを保持します。
このアクションは元に戻せません。ローテーションされたアクセストークンに依存するツールは、新しいトークンを参照するまで機能しなくなります。
パーソナルアクセストークンをローテーションするには:
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > パーソナルアクセストークンを選択します。
- アクティブなトークンの横にある縦方向の省略記号( )を選択します。
- ローテーション( )を選択します。
- 確認ダイアログで、ローテーションを選択します。
パーソナルアクセストークンを失効させる
トークンを失効すると、直ちに無効になり、それ以降の使用が防止されます。GitLabは監査目的でトークンを保持します。トークンを完全に削除することはできませんが、トークンリストをフィルタリングしてアクティブなトークンのみを表示できます。
このアクションは元に戻せません。失効したアクセストークンに依存するツールは、新しいトークンを追加するまで機能しなくなります。
パーソナルアクセストークンを失効するには:
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > パーソナルアクセストークンを選択します。
- アクティブなトークンの横にある縦方向の省略記号( )を選択します。
- 取り消し( )を選択します。
- 確認ダイアログで、取り消しを選択します。
アクセストークンの有効期限
パーソナルアクセストークン、グループアクセストークン、およびプロジェクトアクセストークンは、有効期限のUTC深夜に期限が切れます。期限切れになると、それらはリクエストを認証するために使用できなくなります。
GitLab 16.0以降では、新しいアクセストークンには有効期限が必要です。有効期限がトークン作成時に明示的に設定されていない場合、今日から365日間の有効期限が適用されます。Ultimateでは、管理者はアクセストークンの最大許容ライフタイムを設定できます。
あなたのGitLabバージョンと提供内容によっては、GitLabバージョンのアップグレード時に既存のアクセストークンに有効期限が自動的に適用される場合があります。詳細については、期限切れにならないアクセストークンを参照してください。
パーソナルアクセストークンの有効期限に関するメール
GitLabは、まもなく有効期限が切れるパーソナルアクセストークンを特定するために、毎日UTC午前1:00にチェックを実行します。トークンの有効期限が切れる7日前に、ユーザーにメールで通知されます。GitLab 17.6以降では、トークンの期限が切れる30日前と60日前にも通知が送信されます。
パーソナルアクセストークンの有効期限カレンダー
各トークンの有効期限にイベントが設定されたiCalendarエンドポイントをサブスクライブできます。サインイン後、このエンドポイントは/-/user_settings/personal_access_tokens.icsで利用できます。
有効期限のないサービスアカウントのパーソナルアクセストークンを作成する
有効期限のないサービスアカウントのパーソナルアクセストークンを作成できます。これらのパーソナルアクセストークンは、通常のアカウントのパーソナルアクセストークンとは異なり、有効期限切れになることはありません。
サービスアカウントのパーソナルアクセストークンを有効期限なしで作成できるようにすると、この設定を変更した後に作成されたトークンのみに影響します。既存のトークンには影響しません。
GitLab.com
前提条件:
- トップレベルグループのオーナーロールが必要です。
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > 一般 > 権限とグループ機能を選択します。
- サービスアカウントトークンの有効期限チェックボックスをオフにします。
これで、有効期限のないサービスアカウントユーザーのパーソナルアクセストークンを作成できます。
GitLab Self-Managed
前提条件:
- GitLab Self-Managedインスタンスの管理者である必要があります。
- 右上隅で、管理者を選択します。
- 設定 > 一般を選択します。
- アカウントと制限を展開します。
- サービスアカウントトークンの有効期限チェックボックスをオフにします。
これで、有効期限のないサービスアカウントユーザーのパーソナルアクセストークンを作成できます。
アクセストークンを無効にする
- プラン: Premium、Ultimate
- 提供形態: GitLab Self-Managed、GitLab Dedicated
前提条件:
- 管理者アクセス権が必要です。
GitLabインスタンス全体で、ユーザーがアクセストークンで認証するのを防ぐことができます。この設定は、パーソナルアクセストークン、グループアクセストークン、プロジェクトアクセストークン、および代理トークンに影響します。この設定は、サービスアカウントのパーソナルアクセストークンにも適用されます。
アクセストークンを無効にすると、次のルールが適用されます:
- ユーザーはパーソナルアクセストークンを使用してGitLabにサインインできません。
- パーソナルアクセストークンページは、
404 Not Foundエラーを返します。 - RSS、Atom、およびカレンダーフィードのフィードトークンは機能しなくなります。
- パーソナルアクセストークンで認証するされたAPIリクエストは拒否されます。
インスタンスのアクセストークンを無効にするには:
- 右上隅で、管理者を選択します。
- 設定 > 一般を選択します。
- アカウントと制限を展開します。
- アクセストークンを無効にするチェックボックスを選択します。
- 変更を保存を選択します。
アプリケーション設定APIでdisable_personal_access_tokens属性を使用することもできます。
エンタープライズユーザーのパーソナルアクセストークンを無効にする
- プラン: Premium、Ultimate
- 提供形態: GitLab.com
前提条件:
- エンタープライズユーザーが所属するグループのオーナーロール。
グループのエンタープライズユーザーのパーソナルアクセストークンを無効にすると、次のようになります。
- エンタープライズユーザーは新しいパーソナルアクセストークンを作成できなくなります。この動作は、エンタープライズユーザーがグループ管理者である場合でも適用されます。
- エンタープライズユーザーの既存のパーソナルアクセストークンが無効になります。
エンタープライズユーザーのパーソナルアクセストークンを無効にしても、サービスアカウントのパーソナルアクセストークンは無効になりません。
エンタープライズユーザーのパーソナルアクセストークンは、次の手順で無効にできます。
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > 一般を選択します。
- 権限とグループ機能を展開します。
- エンタープライズのユーザーで、パーソナルアクセストークンを無効にするを選択します。
- 変更を保存を選択します。
エンタープライズユーザーアカウントを削除またはブロックすると、そのユーザーのパーソナルアクセストークンは自動的に取り消されます。
パーソナルアクセストークンでDPoPを使用する
- 提供形態: GitLab.com、GitLab Self-Managed
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。この機能はテストには利用できますが、本番環境での使用には適していません。
Demonstrating Proof of Possession(DPoP、所有証明の実証)は、パーソナルアクセストークンのセキュリティを強化し、意図しないトークンの漏洩の影響を最小限に抑えます。アカウントでこの機能を有効にすると、PATを含むすべてのRESTおよびGraphQL APIリクエストで、署名付きDPoPヘッダーも提供する必要が生じます。署名付きDPoPヘッダーを作成するには、対応する秘密SSHキーが必要です。
この機能を有効にすると、有効なDPoPヘッダーのないすべてのAPIリクエストはDpopValidationErrorエラーを返します。
アクセストークンを含むHTTPS経由のGitオペレーションでは、DPoPヘッダーは必須ではありません。
前提条件:
- 少なくとも1つの公開SSHキーをアカウントに追加します。署名、または認証と署名の使用タイプを設定する必要があります。
- SSHキータイプはRSAである必要があります。
- GitLabアカウント用にGitLab CLIをインストールして設定する必要があります。
RESTおよびGraphQL APIへのすべての呼び出しで、DPoPを要求するには:
右上隅で、アバターを選択します。
プロファイルを編集を選択します。
左サイドバーで、アクセス > パーソナルアクセストークンを選択します。
Demonstrating Proof of Possession (DPoP)の使用セクションに移動し、DPoPを有効にするを選択します。
変更を保存を選択します。
ターミナルで次のコマンドを実行して、GitLab CLIでDPoPヘッダーを生成します。
<your_access_token>をアクセストークンに、~/.ssh/id_rsaを秘密キーの場所に置き換えます。glab auth dpop-gen --pat "<your_access_token>" --private-key ~/.ssh/id_rsa
CLIで生成したDPoPヘッダーは、以下のように使用できます。
REST APIでの使用:
curl --header "PRIVATE-TOKEN: <your_access_token>" \ --header "DPoP: <dpop-from-glab>" \ "https://gitlab.example.com/api/v4/projects"GraphQLでの使用:
curl --request POST \ --header "Content-Type: application/json" \ --header "PRIVATE-TOKEN: <your_access_token>" \ --header "DPoP: <dpop-from-glab>" \ --data '{ "query": "query { currentUser { id } }" }' \ "https://gitlab.example.com/api/graphql"
DPoPの詳細については、ブループリント送信者制約パーソナルアクセストークンを参照してください。
プログラムを利用してパーソナルアクセストークンを作成する
- 提供形態: GitLab Self-Managed、GitLab Dedicated
テストまたは自動化の一環として、事前に決定されたパーソナルアクセストークンを作成できます。
前提条件:
- GitLabインスタンスでRailsコンソールセッションを実行するための十分なアクセス権が必要です。
プログラムを利用してパーソナルアクセストークンを作成する手順は次のとおりです。
Railsコンソールを開きます。
sudo gitlab-rails console次のコマンドを実行して、ユーザー名、トークン、スコープを参照します。
トークンは20文字の長さでなければなりません。スコープは有効である必要があり、ソースコードで表示できます。
たとえば、ユーザー名が
automation-botのユーザーに属し、1年後に期限切れになるトークンは、次のコマンドで作成できます。user = User.find_by_username('automation-bot') token = user.personal_access_tokens.create(scopes: ['read_user', 'read_repository'], name: 'Automation token', expires_at: 365.days.from_now) token.set_token('token-string-here123') token.save!
このコードは、Rails runnerを使用して、単一行のシェルコマンドに短縮できます。
sudo gitlab-rails runner "token = User.find_by_username('automation-bot').personal_access_tokens.create(scopes: ['read_user', 'read_repository'], name: 'Automation token', expires_at: 365.days.from_now); token.set_token('token-string-here123'); token.save!"プログラムを利用してパーソナルアクセストークンを取り消す
- 提供形態: GitLab Self-Managed、GitLab Dedicated
テストまたは自動化の一環として、プログラムを利用してパーソナルアクセストークンを取り消すことができます。
前提条件:
- GitLabインスタンスでRailsコンソールセッションを実行するための十分なアクセス権が必要です。
プログラムを利用してトークンを取り消す手順は次のとおりです。
Railsコンソールを開きます。
sudo gitlab-rails console次のコマンドを実行して、
token-string-here123のトークンを取り消します。token = PersonalAccessToken.find_by_token('token-string-here123') token.revoke!
このコードは、Rails runnerを使用して、単一行のシェルコマンドに短縮できます。
sudo gitlab-rails runner "PersonalAccessToken.find_by_token('token-string-here123').revoke!"パーソナルアクセストークンを使用してリポジトリをクローンする
- 提供形態: GitLab Self-Managed、GitLab Dedicated
SSHが無効になっている場合にリポジトリをクローンするには、次のコマンドを実行してパーソナルアクセストークンを使用してクローンします。
git clone https://<username>:<personal_token>@gitlab.com/gitlab-org/gitlab.gitこの方法では、パーソナルアクセストークンがbashの履歴に保存されます。これを回避するには、次のコマンドを実行します。
git clone https://<username>@gitlab.com/gitlab-org/gitlab.githttps://gitlab.comのパスワードを求められたら、パーソナルアクセストークンを入力します。
cloneコマンドのusernameは、次の条件を満たす必要があります。
- 任意の文字列を指定できます。
- 空の文字列は使用できません。
認証に依存する自動化パイプラインを設定する場合は、この条件を必ず守ってください。
パーソナルアクセストークンの代替
HTTPS経由のGitの場合、パーソナルアクセストークンの代替として、OAuth認証ヘルパーを使用できます。
CI/CDジョブでの認証には、以下を考慮してください:
- パイプライン認証のための、CI/CDジョブトークンときめ細かい権限。
- プロジェクト固有の自動化のための、最小限の必要な権限を持つプロジェクトアクセストークン。