日本語

ローカルコードスキャンのためのJenkinsセットアップ

目次:

ローカルコードスキャンのためのJenkinsセットアップ

Aikido Security Local Scannerは、お使いの環境内でAikido Securityのスキャンを実行できるツールであり、コードが社外に出ることはありません。スキャンはローカルで実行され、その結果がAikido Securityプラットフォームにアップロードされます。このセットアップにより、レポート作成を目的としてLocal ScannerをJenkinsプロジェクトに簡単に統合できます。

要件

Local Scannerを実行するには、Jenkins Nodeが一定の要件を満たしている必要があります。現在、Linux**、**macOS ARM64、およびWindowsのオペレーティングシステムアーキテクチャをサポートしています。バイナリをインストールする代わりに、Dockerイメージを直接実行することも可能です。

Nodeに十分なリソースがあることを確認してください。当社では、4GBのRAM、2コアCPU、14GBのストレージを搭載したマシンでテストを行っています。

Linux Nodeを使用している場合、バイナリを実行するにはglibcのバージョンも重要です。2018年にリリースされたバージョン2.27以上が必要です。そのため、比較的新しいLinuxオペレーティングシステムのほとんどは、このバージョン以上を搭載しています。対応するオペレーティングシステムは以下のとおりです。

  • CentOS 8以上
  • Ubuntu 18.04以上
  • Debian 10以上
  • Fedora 28以上

お使いのオペレーティングシステムのglibcのバージョンを確認するには、次のコマンドを実行します。

$ ldd --version ldd 
(Ubuntu GLIBC 2.30-0ubuntu2.1) 2.30

Dockerを使用する場合、Jenkins NodeにはDockerがインストールされていれば十分です。スキャナーはコンテナ内で実行されるため、glibcやOSアーキテクチャの要件は適用されません。

一時フォルダー​

スキャナーは、特定の処理を行うためにローカルに一時フォルダー(デフォルトは.aikidotmp)を作成します。

  • 効率的なスキャンを実行するために、特定のロックファイルをコピーします。
  • スキャナーの結果を書き込みます。

このフォルダーはスキャン完了後にクリーンアップされます。

さらに、一部のファイルは一時作業ディレクトリにコピーされます。十分な空き容量があることを確認してください。最低2GBを推奨します。​

Local Scanningのセットアップ方法

前提条件: Local Scanningが利用可能なアカウントを作成済みであることを確認してください。Local Scanningアカウントの作成に関する詳細。

1. 認証トークンを取得する

  1. Local Scannerセットアップページに移動します

  2. 認証トークンを生成してコピーします。このトークンは一度しか表示できないことに注意してください。

  3. プロジェクトでLocal Scannerを実行する際に、このトークンを引数--apikeyとして追加します。

  4. このトークンをJenkinsに保存します。そのためには、Jenkinsの設定で「Credentials」ページに移動します。

    説明付きの新しいグローバルシークレットテキスト認証情報を作成するJenkinsの画面。

2. プロジェクトにLocal Scannerを追加する

オプションA(バイナリ): Aikido UIからローカルスキャナーのバイナリをダウンロードします。Jenkinsでビルドノードに追加し、名前でアクセスできるように/usr/local/binに配置します。バイナリが実行可能であることを確認してください(例: chmod +x -R aikido-local-scanner)。

オプションB(Docker): Jenkins NodeにDockerがインストールされていることを確認してください。バイナリのダウンロードは不要で、スキャナーイメージはDocker Hubから自動的に取得されます。イメージは以下から入手できます。

  • Docker Hub: aikidosecurity/local-scanner
  • AWS ECR: public.ecr.aws/z1o3v2w5/aikidosecurity/local-scanner

3. Local Scannerを実行する

あとはリポジトリでスキャナーを実行するだけです。
​
ローカルスキャナーがデフォルトブランチに対してのみトリガーされるようにしてください。デフォルトでは、Aikidoは依存関係とコードの問題について、リポジトリ内の1つのブランチ(通常はmainまたはmasterブランチ)のスキャンをサポートしています。そのため、Aikidoプラットフォーム上でスキャン結果が混在しないよう、ローカルスキャナーはそのブランチでのみ実行することを推奨します。gitを使用している場合は、_Branches to build_セクションでこれを指定できます。

CI/CDパイプライン設定でビルドする「main」ブランチを選択している画面。

次に、APIキーをビルド環境に追加して、プロジェクトで使用できるようにします。

特定の認証情報を使用してビルド環境のシークレットAPIキーを設定している画面。

プロジェクトにExecute shellステップを追加し、次のいずれかのコマンドを指定します。

オプションA: バイナリ

--branchnameオプションを使用して、対象のブランチを指定します。

aikido-local-scanner scan ./ --apikey $AIKIDO_API_KEY --repositoryname DemoApp --branchname main

コマンドを実行する際に、--branchnameオプションを使用して対象のブランチを指定します。

オプションB: Docker

リポジトリのディレクトリに移動し、Dockerイメージを使用してスキャナーを実行します。-vフラグにより、ソースコードがコンテナにマウントされます。

docker run --rm \
  -v "$(pwd):/scan-target" \
  aikidosecurity/local-scanner \
  scan /scan-target \
  --apikey $AIKIDO_API_KEY \
  --repositoryname DemoApp \
  --branchname main

注意: Jenkinsワークスペースのパスにスペースが含まれる場合は、引用符で囲んでください。--rmフラグにより、スキャン完了後にコンテナが自動的に削除されます。

このリポジトリに対する初回のスキャンの場合、Aikidoは指定した名前でリポジトリを作成し、すべてのスキャン結果をそこに格納します。以降のスキャン結果は、Aikido内のこのリポジトリ名の下に集約されます。

CLIオプションの詳細については、こちらをご覧ください。

--fail-on <severity>フラグを使用して、リリースゲーティングモードでスキャナーを実行することもできます。この機能は、リリース前にリポジトリをスキャンする際に役立ち、リリース前に未解決の問題がないことを確認できます。リリースゲーティングモードで実行すると、スキャン完了後に選択した重大度以上の未解決の問題がある場合、スキャナーのプロセスは失敗します。

リリースゲーティングのコマンド例:

aikido-local-scanner scan ./ --apikey $AIKIDO_API_KEY --repositoryname DemoApp --branchname main --fail-on critical

4. スキャン結果を確認する

初回のスキャンが完了したら、Aikido Feedに移動して結果を確認できます。指定した名前のリポジトリが作成されており、スキャンのすべての結果が格納されています。