トークン失効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
の値を返します。
secrets
アナライザの 一次識別子を、primary_identifier.type
とprimary_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が呼び出されます。