トークン失効API

トークン失効APIは、GitLab Secret Detectionによって検出されたAPIトークンやその他のシークレットを受け取り、失効させるためのGitLabとのインターフェイスで、外部デイトプロイされたHTTP APIです。シークレット検知の後処理と失効のフローを理解するには、ハイレベルアーキテクチャをご覧ください。

GitLab.comはトークン失効APIとして、内部でメンテナンスされているシークレットリボケーションサービス(チームメンバーのみ)を使用しています。GitLabセルフマネジメントの場合は、独自のAPIを作成し、それを使用するようにGitLabを設定することができます。

セルフマネージド用のトークン失効APIの実装

GitLabのセルフマネージドインスタンスでリボケーション機能を使用する場合は、次のことが必要です:

  • 独自のトークンリボケーションAPIを実装し、デプロイします。
  • トークン失効APIを使用するようにGitLabインスタンスを設定します。

あなたのサービスは

  • 以下のAPI仕様と一致していること。
  • 2つのエンドポイントを用意してください:
    • 取り消し可能なトークン・タイプの取得
    • 漏洩したトークンの取り消し。
  • レート制限と冪等性。

ドキュメント化されたエンドポイントへのリクエストは、Authorization ヘッダーで渡されたAPIトークンを使用して認証されます。リクエストボディとレスポンスボディが存在する場合は、コンテントタイプがapplication/json であることが期待されます。

すべてのエンドポイントはこれらのレスポンスを返すかもしれません:

  • 401 Unauthorized
  • 405 Method Not Allowed
  • 500 Internal Server Error

GET /v1/revocable_token_types

revoke_tokens エンドポイントで使用するために有効なtype の値を返します。

note
これらの値は、 secrets アナライザの 一次識別子をprimary_identifier.typeprimary_identifier.valueを連結したものと一致します。たとえば、値](../../user/application_security/secret_detection/index.md) は、以下の発見識別子と一致します:
{"type": "gitleaks_rule_id", "name": "Gitleaks rule ID GitLab Personal Access Token", "value": "GitLab Personal Access Token"}
ステータス・コード説明
200レスポンスボディには、有効なトークンtype の値が含まれます。

レスポンスボディの例

{
    "types": ["gitleaks_rule_id_gitlab_personal_access_token"]
}

POST /v1/revoke_tokens

適切なプロバイダによって取り消されるトークンのリストを受け入れます。あなたのサービスは、トークンを失効させるために各プロバイダと通信する責任があります。

ステータス・コード説明
204提出されたすべてのトークンは、最終的に失効するために受理されました。
400リクエスト・ボディが無効であるか、送信されたトークン・タイプのいずれかがサポートされていません。リクエストは再試行されません。
429プロバイダが受信したリクエストが多すぎます。リクエストは後で再試行する必要があります。

リクエストボディの例

[{
    "type": "gitleaks_rule_id_gitlab_personal_access_token",
    "token": "glpat--8GMtG8Mf4EnMJzmAWDU",
    "location": "https://example.com/some-repo/blob/abcdefghijklmnop/compromisedfile1.java"
},
{
    "type": "gitleaks_rule_id_gitlab_personal_access_token",
    "token": "glpat--tG84EGK33nMLLDE70zU",
    "location": "https://example.com/some-repo/blob/abcdefghijklmnop/compromisedfile2.java"
}]

トークン失効APIとインターフェースするためのGitLabの設定

GitLabインスタンスで以下のデータベース設定を行う必要があります:

設定種類説明
secret_detection_token_revocation_enabledブール値トークンの自動失効を有効にするかどうか
secret_detection_token_revocation_url文字列Token Revocation API の/v1/revoke_tokens エンドポイントへの完全修飾 URL。
secret_detection_revocation_token_types_url文字列Token Revocation API の/v1/revocable_token_types エンドポイントへの完全修飾 URL。
secret_detection_token_revocation_token文字列Token Revocation API へのリクエストを認証するための事前共有トークン。

たとえば、Railsコンソールでこれらの値を設定するには、次のようにします:

::Gitlab::CurrentSettings.update!(secret_detection_token_revocation_token: 'MYSECRETTOKEN')
::Gitlab::CurrentSettings.update!(secret_detection_token_revocation_url: 'https://example.gitlab.com/revocation_service/v1/revoke_tokens')
::Gitlab::CurrentSettings.update!(secret_detection_revocation_token_types_url: 'https://example.gitlab.com/revocation_service/v1/revocable_token_types')
::Gitlab::CurrentSettings.update!(secret_detection_token_revocation_enabled: true)

これらの値を設定すると、ハイレベルアーキテクチャ図に従ってToken Revocation APIが呼び出されます。