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

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

## ローカルスキャンのセットアップ方法 <a href="#how-to-set-up-local-scanning" id="how-to-set-up-local-scanning"></a>

**前提条件**: Local Scanning を許可するアカウントを作成しておいてください。 [Local Scanning アカウントの作成方法の詳細](https://help.aikido.dev/code-scanning/local-code-scanning/account-creation-for-local-scanning-on-aikido).

## 1. 認証トークンを取得する <a href="#id-1-get-your-authentication-token" id="id-1-get-your-authentication-token"></a>

1. へ移動 [Local Scanner セットアップページ](https://app.aikido.dev/settings/integrations/localscan).
2. 認証トークンを生成してコピーします。このトークンを表示できるのは 1 回だけです。
3. 認証トークンを Bitbucket の Plan variables に追加して、プランで使用できるようにします。これを行うには、プランの設定 > Variables に移動する必要があります。そこで、認証トークンを `AIKIDO_API_KEY` をキーとして、コピーしたトークンの内容を値として追加できます。変数を Project または Global レベルで定義することもできます（参照 [こちら](https://confluence.atlassian.com/bamboo/bamboo-variables-289277087.html)).

## 2. ローカルスキャナーの実行 <a href="#id-2-running-the-local-scanner" id="id-2-running-the-local-scanner"></a>

ローカルスキャナーは、必ずデフォルトブランチでのみ起動されるようにしてください。Aikido は既定で、リポジトリ内の 1 つのブランチについて依存関係とコードの問題をスキャンできます。通常は main または master ブランチです。そのため、Aikido プラットフォーム上でスキャン結果が混ざらないように、ローカルスキャナーはそのブランチのみで実行することを推奨します。

## Docker を使用する <a href="#using-docker" id="using-docker"></a>

エージェントで Docker を実行できる場合は、Aikido Local Scanner の Docker イメージを使用してスキャンを実行できます。まず、コードをスキャンできるようにするために 'Source Code Checkout' タスクがあることを確認してください。その後、次のような 'Docker' タスクを追加します:

![Atlassian のインテグレーションのタスク選択ウィンドウで、Docker のタスクタイプを検索します。](https://help.aikido.dev/_assets/86fb6a750d0b/ucarecdn-5d3adf06-608c-4533-97c2-921d2059ac5e.png)

コマンドとして 'Run a Docker container' を選択します。イメージは次の場所にあります [Docker Hub](https://hub.docker.com/r/aikidosecurity/local-scanner) または [AWS Elastic Container Registry](https://gallery.ecr.aws/z1o3v2w5/aikidosecurity/local-scanner).

Container Command フィールドには、次のように入力します: `scan . --apikey ${bamboo.AIKIDO_API_KEY} --repositoryname ${bamboo.planRepository.1.name} --branchname ${bamboo.planRepository.1.branch}`

## バイナリを使用する <a href="#using-the-binary" id="using-the-binary"></a>

エージェントに Docker を実行する機能がない場合は、Aikido Local Scanner のバイナリを直接使用できます。これを行うには、正しいバイナリを次の場所から [Local Scanner Setup ページ](https://app.aikido.dev/settings/integrations/localscan).\
次に、これをエージェントに機能として追加する必要があります。

* **対象のエージェントに移動します:**
  * Bamboo で、次へ移動します: **Build Resources** > **エージェント**.
  * 機能を追加したいエージェントを選択します。
* **実行可能ファイルの機能を追加します:**
  * 次の **エージェント固有の機能** セクションで、 **機能を追加**.
  * 選択 **機能タイプ** > **実行可能ファイル**.
  * 次の **実行可能ファイルのラベル**、実行可能ファイルの名前として、Aikido Local Scanner などを入力します。
  * 次の **パス** フィールドで、エージェントマシン上の aikido-local-scanner バイナリへのパスを指定します。

これで、Aikido Local scanner をプラン内のタスクとして使用できます。まず、コードをスキャンできるようにするために 'Source Code Checkout' タスクがあることを確認してください。その後、次のような 'Command' タスクを追加します:

![ビルド自動化ツールでコマンド実行オプションを表示するタスクタイプのメニュー。](https://help.aikido.dev/_assets/6b306bd310da/ucarecdn-63dfcf44-02c7-46fc-b16b-b549f8df5ecd.png)

実行可能ファイルとして 'Aikido Local Scanner' を選択し、コマンドパラメータを Argument フィールドに追加します:

```shellscript
scan . --apikey ${bamboo.AIKIDO_API_KEY} --repositoryname ${bamboo.planRepository.1.name} --branchname ${bamboo.planRepository.1.branch}
```

これがこのリポジトリの最初のスキャンである場合、Aikido は指定した名前のリポジトリを作成し、すべてのスキャン結果を含めます。以降のスキャン結果は、Aikido ではこのリポジトリ名の下に集約されます。

デフォルトではすべてのスキャンタイプが実行されます。SAST スキャンのみなど、一部のスキャンだけを実行したい場合は、 `--scan-types` オプション。CLI オプションの詳細は [こちら](https://help.aikido.dev/code-scanning/local-code-scanning/cli-options-for-local-scanner).

を指定してスキャンタイプを渡すことで実行できます。リリースゲートまたは PR ゲートモードでスキャナーを実行することもできます。リリースゲートモードは、公開前にリポジトリをスキャンする際に役立ちます。これにより、公開の可能性がある時点で未解決の問題がないことを確認できます。リリースゲートモードで実行すると、スキャン完了後に選択した重大度以上の未解決の問題がある場合、スキャナープロセスは失敗します。PR ゲートモードは、PR で新たに導入された可能性のある問題をスキャンするために使用できます。

リリースまたは PR ゲートモードの詳細は [この記事](https://help.aikido.dev/docs/docs-ja/code-scanning/local-code-scanning/pr-gating-for-code-using-local-scanner).

### 3. スキャン結果を確認する <a href="#id-3-check-your-scanning-results" id="id-3-check-your-scanning-results"></a>

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