[小ネタ] Snykの認証情報はここに保存されているまとめ #snyk

認証情報がどこに書き込まれ保存されるのか、気になりますよね?
2022.12.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本記事はアラカツアドベントカレンダーの 12/2 の記事であり、
同時に Snyk アドベントカレンダーの 12/5 の記事でもあります。

Snyk

Snyk は「デベロッパーファーストのセキュリティプラットフォーム」を標榜する、SaaS 型の SAST(静的解析)ツールです。弊社でも取り扱っています。

Snyk は専用 CLI をつかってローカルでスキャンしたり、IDE と連携させたり、GitHub や Docker Hub と連携させたり CI/CD に組み込んだりと、様々な形態でコードのスキャンが可能なのですが、そうなると気になるのは「どこに認証情報が保存されているのか」というところ。

というわけで、まとめてみました。

ローカル

Snyk は SaaS ですが、利用するための CLI や IDE プラグイン・機能拡張はローカル(PC)にて動作します。
それらのツールが使う認証情報も、もちろんローカルに保存されます。

Snyk CLI

こちらに書いてあるとおり、 ~/.config/configstore/snyk.json ファイルに JSON の形式で保存されています。

JSON は下記の様なシンプルなものです。

{
    "api": "< Snyk 認証トークン文字列 >"
}

パス形式が完全に UN*X のそれだったので「じゃあ Windows は?」と気になったのですが、試してみたところそのままのようです。
つまり、以下のようになります:

  • C:\Users\< ユーザ名 >\.config\configstore\snyk.json

Visual Studio Code Extension

こちらのドキュメントに To store the token securely, Snyk uses Secret Storage API, which uses the system's keychain to manage the token. とあります。つまり macOS でいえば「キーチェーン」に登録されることになります。

実際にみてみたらこんな感じでした。しっかり保持されてますね。

なお、Token を書き換える場合も VSCode 上から操作できる ため、特にキーチェーンを意識する必要はなさそうです。

ですがキーチェーンを iCloud により複数端末で同期している場合は、「なんでトークンが同期されてるの?」となりそうな気がするので注意が必要ですね。

ちなみに認証情報ではないのですが、 VSCode 用の機能拡張を導入すると言語サーバ(language server)として Snyk CLI がインストールされます。
こちらは機能拡張を削除しても残り続けるので、気になる方は意識しておいてください。macOS の場合は以下のパスに保存されます:

  • /Users/< ユーザ名 >/Library/Application Support/snyk-ls/

他の環境・OS の場合は、VSCodeの snyk.advanced.cliPath キーの設定を参照してください:

Visual Studio Extension

VSCode と同じ系統だから同じ仕組みかと思いきや、こちらは Settings の画面から Token を設定する形式でした。
未確認ですが、保管場所も IDE の管理下にありそうです。

JetBrains / Eclipse IDE Plugin

IntelliJ を含む JetBrains 系や Eclipse 用の IDE プラグインの場合も Visual Studio と同じ方式でした。

その他

Jenkins などに Snyk を組み込む場合は、環境変数 SNYK_TOKEN を経由して Snyk CLI にクレデンシャルを渡すパターンになるようです。
クレデンシャルをどのように持つかはアプリケーションに依りますが、例として Jenkins 向けの公式プラグインのドキュメントを貼っておきます。この辺りはオンプレだろうが SaaS だろうが、あまり違わないと思われます。

また、コンテナ内に Snyk を組み込むような場合であれば、静的なファイルとして持つことは考えにくいので、下のドキュメントのようにこちらも環境変数を使うパターンになるかと思います。

ちなみに Snyk CLI 自身は OAuth 認証にも対応しているようです。

リモート・SaaS

ローカルでなく SaaS と組み合わせる場合には、上述のようなトークンによる認証の他に、OAuth による認証もあります。

GitHub

導入時にお分かりと思いますが、Snyk の GitHub Integration は OAuth 認証を行っています。

ちなみに Snyk には「GitHub アカウントによるログイン」も選択できます。

両方別々のアプリケーションとして認識されるため、GitHub の Settings >> Applications を見ると、2 つのアプリがあることが分かりますね。

Docker Hub

Docker Hub との連携はトークン方式なので、登録状況は Account Settings >> Security にある Access Tokens で確認出来ます。

CircleCI

CircleCI Orb もトークン方式ですね。

Snyk には他にも様々なインテグレーション先があるので、以下のドキュメントも是非いちどご一読ください:

まとめ

Snyk 連携の認証情報がどこに置かれているかをまとめてみました。
こういったクレデンシャルは、一度設定してしまうとどこにあるのか分からなくなりがちかなと思ってます。マイグレーションする時にも欲しくなる情報ですし、トークン方式は定期的なローテーションも視野にいれておきたいところです。