アクセストークンとは?API に提示する認証情報
アクセストークンとは、保護されたリソースへ到達する権限を持つことを証明するために、クライアントが各リクエストで提示する認証情報です。
アクセストークンは現代の API における主力の認証情報です。認可の後、クライアントはトークンを受け取り、すべてのリクエストに含めます。リソースサーバーはそれを検証してアクセスを許可します。アクセストークンは通常、短命でスコープが限定されており、漏洩時の被害を抑えます。CI/CD では、トークンはパイプラインが deploy、push、レポートを行うために提示するものです。
アクセストークンが表すもの
アクセストークンは、特定のクライアントが特定のスコープに対して、多くの場合は短時間だけ認可されたことをエンコードします。リソースサーバーは呼び出しのたびにユーザーを再確認するのではなく、トークンを信頼します(その署名を検証するか、ルックアップします)。
bearer トークン
- ほとんどのアクセストークンは bearer トークンです。保持している者は誰でもそれを使用できます。
- デフォルトでは所持の追加証明はありません。
- そのため、漏洩防止と短いライフタイムが不可欠になります。
なぜ短いライフタイムが重要なのか
ログやメモリダンプから漏洩した短命なトークンは、期限切れになるまでのわずかな間しか攻撃者にとって有用ではありません。短いアクセストークンをリフレッシュの仕組みと組み合わせることで、安全性とスムーズなユーザー体験の両方が得られます。
CI/CD におけるアクセストークン
パイプラインはイメージの push、deploy、API 呼び出しのためにアクセストークンを提示します。最も強力なパターンは、job ごとに OIDC 経由で新しく狭くスコープされたトークンを発行することで、実行間で盗まれうる永続的な認証情報が存在しないようにします。
トークンを安全に扱う
トークンを決してログに記録せず、可視のコマンド引数として渡さず、コミットしないでください。CI プラットフォームは既知のシークレットをログでマスクしますが、誤って出力されたトークンは依然として漏洩しうります。すべてのトークンを必要最小限にスコープしましょう。
トークンと runner
アクセストークンは runner 上の job 環境内に存在します。ephemeral で隔離された runner(Latchkey の managed runner など)では、その環境は job が終了すると破棄されるため、トークンが次の job に読み取られることはありません。
重要なポイント
- アクセストークンは、リソースへの認可を証明するために各リクエストで提示されます。
- ほとんどが bearer トークンであるため、短いライフタイムと漏洩防止が極めて重要です。
- job ごとに OIDC で発行されるトークンは、盗まれうる永続的な認証情報をなくします。