コンテンツにスキップ

Local Code ScanningのJenkinsセットアップ

目次:

Local Code ScanningのJenkinsセットアップ

Section titled “Local Code ScanningのJenkinsセットアップ”

Aikido Security Local Scannerは、お使いの環境内でAikido Securityのスキャンを実行できるツールで、コードが社内から一切出ないことを保証します。スキャンはローカルで行われ、その結果のみがAikido Securityプラットフォームにアップロードされます。このセットアップにより、レポート作成のためにLocal ScannerをJenkinsプロジェクトへ簡単に組み込むことができます。

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

ノードに十分なリソースがあることを確認してください。4GB RAM、2コアCPU、14GBのストレージを備えたマシンでテスト済みです。

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

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

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

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

Dockerを使用する場合、スキャナーはコンテナ内で実行されるため、Jenkinsノードに必要なのはDockerのインストールのみで、glibcやOSアーキテクチャの要件は適用されません。

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

  • 効率的なスキャンを行うため、一部のlockfileをコピーします。
  • スキャナーの結果を書き込みます。

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

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

Local Scanningのセットアップ方法

Section titled “Local Scanningのセットアップ方法 ”

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

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

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

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

  4. このトークンをJenkinsに保存します。これを行うには、Jenkinsの設定にある「Credentials」ページに移動します。

    説明付きの新しいグローバルシークレットテキストクレデンシャルを作成するJenkinsのインターフェース

2. プロジェクトへのLocal Scannerの追加

Section titled “2. プロジェクトへのLocal Scannerの追加 ”

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

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

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

あとはリポジトリでスキャナーを実行するだけです。

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

CI/CDパイプライン設定でビルド対象の「main」ブランチを選択する

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

特定のクレデンシャルを使ってビルド環境用のシークレットAPIキーを設定する

以下のいずれかのコマンドを使って、プロジェクトにExecute shellステップを追加します。

オプションA: バイナリ

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

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

コマンドを実行する際は、--branchnameオプションで対象のブランチを指定してください。

オプションB: Docker

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

Terminal window
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>フラグを使って、リリースゲーティングモードでスキャナーを実行することもできます。この機能は、リリース前にリポジトリをスキャンする際に有用で、リリース候補にオープンな問題がないことを保証します。リリースゲーティングモードで実行すると、スキャン終了後に選択した深刻度以上のオープンな問題が存在する場合、スキャナーのプロセスは失敗します。

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

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

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