Snyk CLIチートシート
2020年11月26日
0 分で読めます最終更新:2022年4月
古いバージョンのSnyk CLIチートシートをお持ちですか?以下から最新版をダウンロードできます。
Snyk CLIは、アプリケーション、コンテナ、Infrastructure as Codeのセキュリティ脆弱性をスキャンするための、優れた強力なツールです。このチートシートでは、CLIの強力な機能をご紹介します。ローカルマシンでのスキャンや監視に使えるほか、パイプラインに組み込むこともできます。どのような使い方でも、Snyk CLIはアプリケーションの既知の脆弱性をテスト、監視、修正するためのツールです。
CLIは継続的に改善されており、このチートシートでは紹介しきれないほど多くの機能を備えています。CLIの詳細については、Snyk CLIのドキュメントをご覧ください。特定の言語やビルドシステムでCLIができることを知りたい場合は、言語サポートページをご確認ください。
JavaScript(npm、yarn)
JavaとKotlin(maven | Gradle)
.Net(Nuget、Paket)
Python(Pip、Poetry)
PHP(composer)
Ruby(Bundler)
Go(dep、govendor)
その他多数...

インストール
まずは基本から始めましょう。Snyk CLIをまだインストールしていない場合は、最初にインストールしてください。現在、npm、Homebrew、Scoopを使うか、GitHubから特定のバイナリをダウンロードしてインストールできます。
npm
Homebrew
Scoop
手動インストール
手動インストーラーはSnykのGitHubページから入手できます。
認証
CLIをインストールしたら、Snykアカウントで認証する必要があります。認証方法はいくつかあります。
snyk authを実行すると、ブラウザーで登録またはサインインのページが開き、認証または登録できます。
または、snyk auth [api-token]を実行し、アカウントページから取得したSnyk APIトークンを引数として指定できます。
最後の方法は、特にCIテストで推奨する方法です。SNYK_TOKENという環境変数を作成します。こうすれば、Snyk CLIのすべてのコマンドでsnyk authを明示的に実行せずに、この変数が使用されます。
プロのヒント:CLIはこまめに更新し、再インストールしてください。CLIは頻繁に修正され、新しいバージョンがリリースされています。新機能や改善された機能を見逃さないようにしましょう。
CLIコマンド
Snyk CLIでは、コマンドに続けて複数のオプションを指定します。CLIコマンドはプロジェクトのフォルダー内で実行してください。それぞれのコマンドの機能を見ていきましょう。
Snyk test
snyk testコマンドは、ローカルプロジェクトに既知の脆弱性がないかテストします。脆弱性の情報、深刻度、種類と説明、脆弱な依存関係パスの数、修正方法などが表示されます。Snyk CLIはマニフェストファイルを自動検出し、最初に見つかったファイルをテストします。Snykはローカルの依存関係を調べて脆弱性をテストします。そのため、snyk testを実行する前に、npm install, mvn install, dotnet restoreやdep ensureなどを実行し、依存関係ツリーをダウンロードしておく必要があります。
Snyk testはCIパイプラインでも便利です。バイナリのビルド時にsnyk testを実行すれば、プロジェクトに脆弱性が含まれているかどうかをすぐに確認できます。必要であれば、パイプラインを停止するように設定することもできます。スクリプトからsnyk testを呼び出す場合は、終了コードを確認してください。終了コードが0なら問題なく、脆弱性は見つかっていません。それ以外の場合は、対処が必要な可能性があります。
複数のマニフェストファイルがあるプロジェクトでは、特定のファイルをテストできます。--fileフラグを使って、スキャンするファイルを指定してください。
同様に、--package-managerフラグでパッケージマネージャーを指定できます。snykがパッケージマネージャーを自動検出できない例外的なケースで便利です。
フォルダー内のすべてのプロジェクトをテストするには、--all-projectsフラグを使います。現在のディレクトリを自動検出してスキャンし、見つかったすべてのマニフェストファイルをテストします。デフォルトでは、Snykは現在のディレクトリと、その下の3階層までをスキャンします。検出する階層数を変更するには、--detection-depthオプションを追加してください。
ただし、Snykはデフォルトでは開発用依存関係をテストしません。多くの場合、本番環境の脆弱性に比べてノイズになると考えられているためです。開発用依存関係も含めるには、--devフラグを使用してください。
testコマンドをはじめ、ほかのSnykコマンドでも使える便利なフラグに--orgがあります。テストやSnykコマンドを特定の組織に関連付けることができます。組織はプロジェクトをまとめる単位で、複数のユーザーを関連付けられます。チームで作業し、snyk monitorでスナップショットを作成する場合に特に便利です。orgを指定しない場合、結果はデフォルトの組織に関連付けられます。
コマンドラインから公開リポジトリをテストすることもできます。公開リポジトリのURLをコマンドに直接指定してください。これは、package-lock.jsonがあるnpmリポジトリでのみ機能します。試してみましょう。
npmのパッケージも、パッケージ名だけを指定して最新リリースをテストしたり、パッケージ名とバージョンを完全に指定したりして、リモートからテストできます。

プロジェクトでsnyk testを実行すると、結果は3つのセクションに分けて表示されます。
アップグレードで修正できる問題:推奨されるとおりにライブラリを更新すると、プロジェクトで見つかった1つ以上の脆弱性を解消できます。
パッチ適用可能な問題:問題を修正する更新版はありませんが、Snykが脆弱性を修正するパッチを作成しています。
直接アップグレードもパッチ適用もできない問題:インポートした依存関係には、利用可能な更新版がありません。脆弱性は、推移的依存関係のいずれかに存在する可能性があります。脆弱性を修正した推移的依存関係の新しいバージョンがすでにある場合は、それも表示されます。エコシステムによっては、推移的依存関係を手動で置き換えられるため、この情報が役立ちます。
CLIが3つのセクションのいずれかに表示する脆弱性について、説明、深刻度、詳細を確認できるリンクが表示されます。
CLIの出力をJSON形式で確認したい場合は、--jsonフラグを使用できます。JSON出力を使えば、結果を自由にフォーマットできます。
スキャン結果をJSONファイルに保存するのはさらに簡単です。--json-file-output flagを使うと、結果を指定したファイル名で直接保存し、後から確認できます。その間、先ほどのようにコンソールには読みやすい形式で結果が表示されます。たとえば、ダッシュボードに特定のビルド結果を表示したい場合、CIパイプラインに最適です。次のように実行してください。
また、結果を見やすいHTMLレポートに整形できる、Snyk JSONからHTMLへの変換ツールもあります。マネージャーに結果を見せる際などに活用できます。
--severity-thresholdフラグを使うと、CLIの出力を深刻度で絞り込めます。中程度または低い深刻度の脆弱性が不要な場合は、次のように除外できます。
Snyk monitor
snyk monitorコマンドはプロジェクトのスナップショットを作成し、結果をSnykのウェブサイトにアップロードします。snyk monitorは内部でsnyk testを使用しますが、置き換えではない点に注意してください。Snyk monitorはスナップショットを作成し、その状態を継続的に監視します。新たな脆弱性や、プロジェクトに役立つ新たな修正方法が見つかると、選択した連絡手段でアラートが届きます。
CI環境では通常、まずsnyk testを実行して、現時点で脆弱性があるかを確認します。脆弱性が見つかった場合は、ユースケースに応じてビルドを停止できます。その後、通常はsnyk monitorでそのバージョンのスナップショットを作成し、継続的に監視します。実行するタイミングとしては、本番環境へのリリース直前が最適です。許容できる脆弱性のレベルを決めたら、snyk monitorを使って、その状態が時間とともに悪化しないようにしましょう。
snyk monitorを実行する際は、スナップショットが想定した場所に保存されるよう、十分な情報を指定することが重要です。複数の組織に所属している場合は、--orgフラグでスナップショットの送信先を指定してください。似た名前のプロジェクトがある場合は、--project-nameフラグで任意の名前を入力し、Snykが付けるデフォルトの名前を上書きできます。
Snyk ignore
アプリケーションに、修正パッチや更新版がない脆弱性、または現時点では悪用される可能性がないと考える脆弱性が含まれているとします。その場合、一定期間その脆弱性を無視するようSnykに指示できます。ignoreコマンドを使うには、まずsnyk testを実行し、CLIの出力から脆弱性IDを取得します。次のコマンドを使って、この脆弱性を無視できます。
--expiryと--reasonのフラグは省略可能です。デフォルトでは、セキュリティ脆弱性は30日間無視されます。
注:snyk ignoreコマンドを実行すると、無視するセキュリティ問題の情報を格納した.snykファイルが作成されます。
Snyk Container
Snyk Containerは、DockerイメージなどのコンテナイメージをスキャンするCLI機能です。以前はCLIの--dockerフラグを使って利用できました。
アプリケーションのスキャンや監視と同様に、Snykを使ってDockerイメージをスキャンできます。
Docker Hubからイメージをダウンロードする場合は、次のようにスキャンおよび監視できます。
いずれかのコマンドにDockerfileを追加すると、使用しているベースイメージへの修正方法などがSnykから提示されます。ビルドしたイメージで別のベースイメージを利用できる場合は、代替候補もご案内します。
Snyk ContainerはDockerコンテナだけでなく、distrolessイメージもサポートしています。これらのイメージは次のようにスキャンできます。
Snykのコンテナ機能では、コンテナアーカイブのスキャンや監視も可能です。DockerコンテナアーカイブとOpen Container Initiative(OCI)イメージの両方をスキャンできます。
アプリケーションのスキャンと同様に、--jsonと--json-file-outputのフラグを利用できるため、独自のシステムにシームレスに統合できます。
Snyk Infrastructure as Code(Snyk IaC)
Snyk Infrastructure as Codeのスキャン機能を使うと、開発者はセキュリティ上の問題につながる設定ミスを検出して修正できます。snyk iacコマンドを使えば、ローカルマシンやCI環境のSnyk CLIでもこの機能を利用できます。これにより、開発サイクルのできるだけ早い段階でフィードバックを得られます。Snyk IaCはKubernetes、Helm Charts、TerraformのAWSリソースに対応しています。
KubernetesファイルやTerraformファイルをスキャンするには、次のように実行します。
snyk testと同様に、snyk iacで見つかった問題には説明と深刻度が表示されます。システムとの連携にJSON形式の出力が必要な場合は、ここでも--jsonと--json-file-outputのフラグを利用できます。
Snyk IaCでは、インフラストラクチャのドリフトや管理されていないリソースの検出、追跡、アラートも可能です。
$ snyk iac describe <OPTIONS>
トラブルシューティング
どのコマンドを使えばよいかわからない場合や、特定のフラグの動作を確認したい場合は、--helpスイッチを使うか、snyk help.を実行してください。
デバッグ
うまく動作しない場合は、-dフラグを使ってCLIにデバッグログを出力させることができます。サポートチームにお問い合わせいただく際にも、デバッグログの出力をお願いすることがあります。
オープンソースプロジェクトのテスト回数が上限に達しましたか?
オープンソース開発では、Snykのスキャンを無料で無制限にご利用いただけます。ただし、オープンソースプロジェクトとして認識されない場合があります。CLIの出力にテストの残り回数が少ないというメッセージが表示された場合は、次の手順でプロジェクトがオープンソースであることを確認できます。
snyk monitorを実行しますブラウザーでアプリケーションに移動します(直接アクセスできるURLはCLIの出力に表示されています)。
メニューからSettingsをクリックします
Git remote URIフィールドに、オープンソースリポジトリのURLを入力します。

テスト結果が予想と異なりますか?
最良の結果を得るには、CLIコマンドを実行する前にプロジェクト全体を再ビルドしてください。snyk testまたはsnyk monitorの出力が予想と異なる場合は、ビルドツールを実行して、すべての依存関係をダウンロード、インストールしてください。
例:
APIキーと設定を削除する
snyk authを使用してCLIを認証した場合は、次のコマンドで設定からトークンを削除できます。
その他の設定については、次のコマンドを実行してください。
バージョンを確認する
常に最新バージョンのCLIをご利用ください。週に複数回、場合によってはそれ以上の頻度で新しいバージョンをリリースしています。
最初のセクションの説明に従って、パッケージマネージャーを使って最新バージョンをインストール(または再インストール)してください。または、GitHubリポジトリで最新のビルドをご確認ください。
現在のバージョンを確認するには、次を実行します。
ドキュメントを確認する
プロジェクトやエコシステムごとに必要なものは異なります。特定のユースケースに関する情報は、CLIドキュメントと言語サポートのドキュメントをご確認ください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。
