トークン管理
このガイドは、トークンローテーション手順や自動トークン期限切れ監視を含む、Customer Support Operations のトークン管理プラクティスについて説明します。
適切なトークン管理は、私たちのシステム全体のセキュリティを維持するために不可欠です。定期的なトークンローテーションにより、漏洩した認証情報からの不正アクセスのリスクが軽減され、Token Checker 自動化によりトークンが期限切れになる前にローテーションできます。このドキュメントでは、各種プラットフォーム(Zendesk、GitLab)でトークンをローテーションする手順を段階的に示し、Token Checker のアラートを扱う方法を説明します。
トークンのローテーション
Zendesk API トークンのローテーション
Zendesk でトークンをローテーションするには:
- 対象の Zendesk インスタンスの管理パネルに移動します:
Apps and integrations > APIs > API tokensに移動します:- 既存トークンを無効化します(無効化しないと削除できないため)
- 既存のトークンエントリを見つけ、その右側にある縦三点リーダーをクリックします
Deactivateをクリックします- 確認のため、ポップアップボックスで
Deactivateをクリックします
- 既存トークンを削除します
- 既存のトークンエントリを見つけ、その右側にある縦三点リーダーをクリックします
Deleteをクリックします- 確認のため、ポップアップボックスで
Deleteをクリックします
- 新しいトークンを作成します
- ページ右上の
Add API tokenをクリックします - 説明を入力します
SaveをクリックしますTokenフィールドのトークンをコピーします- もう一度
Saveをクリックします
- ページ右上の
GitLab パーソナルアクセストークンのローテーション
GitLab パーソナルアクセストークンをローテーションするには、curl コマンドを使用する必要があり、以下の情報が必要です。
- ローテーション対象のパーソナルアクセストークンを所有するユーザーの有効なパーソナルアクセストークン
- ローテーションするパーソナルアクセストークンの ID
そして、以下の curl リクエストを実行します。
curl -ss -X POST "https://gitlab.com/api/v4/personal_access_tokens/TOKEN_ID/rotate?expires_at=$(DATE_COMMAND)" \
--header "Content-Type: application/json" \
--header "PRIVATE-TOKEN: VALID_TOKEN"
置き換える項目:
TOKEN_ID: ローテーションするパーソナルアクセストークンの IDVALID_TOKEN: ローテーション対象のパーソナルアクセストークンを所有するユーザーの有効なパーソナルアクセストークンDATE_COMMAND: 以下のいずれか(OS による):- Linux:
date -I -d'+1 year' - Mac:
date -v+1y +%Y-%m-%d
- Linux:
これにより該当のトークンがローテーションされ、新しいトークンが出力されます。新しいトークンの値だけを出力できるよう、コマンドを jq '.token' にパイプすることをよくおすすめします。例:
curl -ss -X POST "https://gitlab.com/api/v4/personal_access_tokens/123456/rotate?expires_at=$(date -I -d'+1 year')" \
--header "Content-Type: application/json" \
--header "PRIVATE-TOKEN: abc123" | jq '.token'
"def456"
GitLab プロジェクトアクセストークンのローテーション
GitLab プロジェクトアクセストークンをローテーションするには、curl コマンドを使用する必要があり、以下の情報が必要です。
- プロジェクトに
Maintainer権限を持つユーザーの有効なパーソナルアクセストークン - プロジェクトアクセストークンを含むプロジェクトの ID
- ローテーションするプロジェクトアクセストークンの ID
そして、以下の curl リクエストを実行します。
curl -ss -X POST "https://gitlab.com/api/v4/projects/PROJECT_ID/access_tokens/TOKEN_ID/rotate?expires_at=$(DATE_COMMAND)" \
--header "Content-Type: application/json" \
--header "PRIVATE-TOKEN: VALID_TOKEN"
置き換える項目:
PROJECT_ID: プロジェクトアクセストークンを含むプロジェクトの IDTOKEN_ID: ローテーションするパーソナルアクセストークンの IDVALID_TOKEN: プロジェクトにMaintainer権限を持つユーザーの有効なパーソナルアクセストークンDATE_COMMAND: 以下のいずれか(OS による):- Linux:
date -I -d'+1 year' - Mac:
date -v+1y +%Y-%m-%d
- Linux:
これにより該当のトークンがローテーションされ、新しいトークンが出力されます。新しいトークンの値だけを出力できるよう、コマンドを jq '.token' にパイプすることをよくおすすめします。例:
curl -ss -X POST "https://gitlab.com/api/v4/projects/1234/access_tokens/5678/rotate?expires_at=$(date -I -d'+1 year')" \
--header "Content-Type: application/json" \
--header "PRIVATE-TOKEN: abc123" | jq '.token'
"def456"
GitLab パイプライントリガートークンのローテーション
ユーザーとして
ユーザーとして GitLab パイプライントリガートークンをローテーションするには:
- トークンを作成する gitlab.com ユーザーにログインします
- プロジェクト自体に移動します
CI/CDページ(Settings 配下)に移動しますPipeline trigger tokensセクションを展開します- 既存のトークンリストを確認し、ローテーションが必要なものを特定します
- 既存トークンを削除します
- セクション右上の
Add new tokenボタンをクリックします - 適切な名前を入力します:
- Zendesk webhook の場合は webhook 自体へのリンクを入力
- Zendesk アプリの場合は
INSTANCE - NAME_OF_APPの形式でINSTANCEは Zendesk インスタンス自体(例: Zendesk Global、Zendesk US Government)NAME_OF_APPは Zendesk が表示するアプリ名
- 同じプロジェクト内の CI/CD ジョブの場合はジョブ名
- 別のプロジェクトの場合はプロジェクトへのリンク
- 生成された API トークンをコピーします
- 必要な場所にトークンを設定します
サービスボットとして
サービスボットとして GitLab パイプライントリガートークンをローテーションするには:
該当プロジェクトのプロジェクトアクセストークンを作成します
プロジェクトの ID 番号を控えます
その API トークンを使用して、gitlab.com API 経由でパイプライントリガートークンを作成します
curl --request POST \ --header "PRIVATE-TOKEN: TOKEN_YOUR_COPIED" \ --form description="APPROPRIATE_DESCRIPTION_HERE" \ "https://gitlab.com/api/v4/projects/PROJECT_ID/triggers"TOKEN_YOUR_COPIEDはコピーしたプロジェクトアクセストークンAPPROPRIATE_DESCRIPTION_HEREは適切な説明:- Zendesk webhook の場合は webhook 自体へのリンク
- Zendesk アプリの場合は
INSTANCE - NAME_OF_APPの形式でINSTANCEは Zendesk インスタンス自体(例: Zendesk Global、Zendesk US Government)NAME_OF_APPは Zendesk が表示するアプリ名
- 同じプロジェクト内の CI/CD ジョブの場合はジョブ名
- 別のプロジェクトの場合はプロジェクトへのリンク
生成された API トークンをコピーします
必要な場所にトークンを設定します
トークンの適用
Zendesk アプリへの適用
Zendesk アプリにトークンを適用するには:
- 対象の Zendesk インスタンスの管理パネルに移動します:
Apps and integrations > Apps > Zendesk Support appsに移動します- 該当アプリを見つけてクリックします
- 該当 API トークンが必要なフィールドを見つけます
- そのフィールドにトークンを入力します
- 注意 他のフィールドを設定または編集しないでください
- ページ下部の青い
Updateボタンをクリックします
Zendesk webhook への適用
Zendesk webhook にトークンを適用するには:
- 対象の Zendesk インスタンスの管理パネルに移動します:
Apps and integrations > Webhooks > Webhooksに移動します- 該当 webhook を見つけます
- 該当 webhook の右端にある縦三点リーダーをクリックします
Editオプションをクリックします- 必要な箇所で古いトークンを新しいトークンに置き換えます
- ページ右下の青い
Updateボタンをクリックします
GitLab webhook への適用
webhook 内のマスクされたセクションの値は編集できないため、トークンをローテーションするには「削除して作成」する必要があります。
- プロジェクト自体に移動します
Webhooksページ(Settings 配下)に移動します- 該当 webhook を見つけ、関連するすべての情報(URL、トリガー条件など)をコピーします
- 該当 webhook を削除します
- 関連情報と新しいトークンを使って webhook を再作成します
GitLab CI/CD 変数への適用
GitLab CI/CD 変数にトークンを適用するには:
- プロジェクト自体に移動します
CI/CDページ(Settings 配下)に移動しますVariablesセクションを展開します- 既存変数のリストを確認し、置き換える必要のあるものを特定します
- 変数の右端にある鉛筆アイコン(マウスオーバーすると
Editと表示)をクリックします Valueフィールドに新しいトークンを入力します- 青い
Save changesボタンをクリックします
OAuth 統合
新しい OAuth アプリケーションを Zendesk に統合する
注意
- OAuth 統合の追加には Zendesk への
Ownerアクセスが必要です。
新しい OAuth アプリケーションを Zendesk に統合するには:
- SSO の管理者バイパスを有効化します
- 対象の Zendesk インスタンスの管理パネルに移動します:
Account > Security > Advancedに移動しますSSO bypassの下でAdminsをクリックします- ページ右下の
Saveボタンをクリックします
- 新しいブラウザを開いて
https://gitlab.zendesk.com/access/sso_bypassに移動します - 統合ユーザーとしてログインします
- アプリケーションの指示に従って OAuth フローを実行します。
- 要求されたスコープがアクセスリクエストでドキュメント化・承認されているかを確認します。されていない場合は中止してください。
- 統合ユーザーをログアウトします
- SSO の管理者バイパスを無効化します:
- 対象の Zendesk インスタンスの管理パネルに移動します:
Account > Security > Advancedに移動しますSSO bypassの下でAccount ownerをクリックします- ページ右下の
Saveボタンをクリックします
Token Checker
技術的な詳細
- デプロイメントタイプ:
Ad-hoc - プロジェクトリポジトリ: Token Checker
Token Checker の理解
Token Checker とは
Token Checker は、GitLab のスケジュールパイプラインを使って、今後 3 週間以内に期限切れになるトークンをチェックするためのセットアップです。チェックされるトークンの種類は以下の通りです。
- パーソナルアクセストークン
- プロジェクトアクセストークン
Token Checker の動作
毎週月曜日 1400 UTC(0 14 * * 1)に、GitLab スケジュールパイプラインが bin/run スクリプトを実行し、以下を行います。
- Customer Support Operations チームが管理する gitlab.com ユーザーの有効なパーソナルアクセストークン(今後 3 週間以内に期限切れになるもの)をすべて取得し、情報を配列に格納
- Customer Support Operations が管理する gitlab.com グループ内のすべてのプロジェクトを取得し、それらをループして:
- プロジェクトの取り消されていないプロジェクトアクセストークン(今後 3 週間以内に期限切れになるもの)をすべて取得し、情報を配列に格納
- 期限切れが近いトークンを報告する Issue を作成(配列に格納された場合)
Token Checker が作成した Issue の対応
注意
- これには、Customer Support Operations が管理するすべての gitlab.com ユーザー、グループ、プロジェクトへのアクセスが必要です。
Token Checker が生成した Issue に対応するには、リスト内の項目を順に確認し、列挙されたトークンを取り消すかローテーションします。
- 該当トークンが使用されていない場合は、取り消します。取り消し後、リスト上の該当項目のチェックボックスをオンにし、トークンが取り消されたことを示すコメントを追加します。
- 該当トークンが現在使用中の場合は、ローテーションします。完了後、リスト上の該当項目のチェックボックスをオンにします。
リストのすべての項目を対応したら、必要なタスクがすべて完了したことを示すコメントを追加し、Issue をクローズします。
Token Checker への変更
注意
- これには、Token Checker プロジェクトへの少なくとも
Developerアクセスが必要です。 - これは対応するリクエスト Issue(機能リクエスト、管理、バグなど)がある場合のみ実施してください。存在しない場合は、まず作成し(標準プロセスを通してから対応)してください。
Token Checker に変更を加えるには、プロジェクトリポジトリで MR を作成する必要があります。実際の変更内容はリクエスト自体によります。
ピアレビューと承認の後、MR をマージできます(次回のスケジュール実行時に適用されます)。
bfd74782)