[小ネタ] Snykの認証情報はここに保存されているまとめ #snyk
本記事はアラカツアドベントカレンダーの 12/2 の記事であり、
同時に Snyk アドベントカレンダーの 12/5 の記事でもあります。
- アライアンス統括部アドベントカレンダー2022 の記事一覧 | DevelopersIO
- Snykを使って開発者セキュリティにまつわる記事を投稿しよう! by Snykのカレンダー | Advent Calendar 2022 - Qiita
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 と同じ方式でした。
- Authentication for the JetBrains plugins - Snyk User Docs
- Authentication for the Eclipse plugin - Snyk User Docs
その他
Jenkins などに Snyk を組み込む場合は、環境変数 SNYK_TOKEN
を経由して Snyk CLI にクレデンシャルを渡すパターンになるようです。
クレデンシャルをどのように持つかはアプリケーションに依りますが、例として Jenkins 向けの公式プラグインのドキュメントを貼っておきます。この辺りはオンプレだろうが SaaS だろうが、あまり違わないと思われます。
- Environment variables for Snyk CLI - Snyk User Docs
- 3. Configure a Snyk API Token Credential - jenkinsci/snyk-security-scanner-plugin: Test and monitor your projects for vulnerabilities with Jenkins. This plugin is officially maintained by Snyk.
- Add Snyk to your CI/CD - snyk/cli: Snyk CLI scans and monitors your projects for security vulnerabilities.
また、コンテナ内に 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 連携の認証情報がどこに置かれているかをまとめてみました。
こういったクレデンシャルは、一度設定してしまうとどこにあるのか分からなくなりがちかなと思ってます。マイグレーションする時にも欲しくなる情報ですし、トークン方式は定期的なローテーションも視野にいれておきたいところです。