Sysdig Secureのレジストリスキャンを試してみた（Google Artifact Registry編）

先日、Sysdig SecureのレジストリスキャンがGoogle Artifact Registry（以下GAR）に対応したので、さっそく試しみてみました。

# 参照ドキュメント
https://docs.sysdig.com/en/docs/sysdig-secure/vulnerabilities/registry/

https://docs.sysdig.com/en/docs/installation/container-registry-scanner/

# 前提条件
レジストリスキャンを実施するregistry-scannerはKubernetes上でコンテナとして動作します。そのため、__Kubernetes環境が必要__ です。

# レジストリスキャンを実施するService Accountの作成
1. レジストリスキャンを実施するService Accountを作成し、`Project Viewer`と`Artifact Registry Reader`の権限を割り当てます。
```
gcloud projects add-iam-policy-binding <YOUR_PROJECT_ID> --member='serviceAccount:my-iam-account@my-project.iam.gserviceaccount.com' --role='roles/viewer'  --role='roles/artifactregistry.reader'	
```

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/aa170588-be6e-fa37-9e5f-edbfd610cf28.png width=50%>

2\. Service AccountのJSONタイプのService Account Keyを作成し、ダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/c423582d-842b-1bbb-327d-9dff9ca88b24.png)

# Helmによるregistry-scannerのインストール
https://charts.sysdig.com/charts/registry-scanner/

1. 以下のコマンドでregistry-scannerをKubernetes環境にインストールします。

:::note 
SYSDIG_SECURE_URLの値はご利用のSysdig SaaSリージョンにより異なります。下記ドキュメントをご参照ください。
https://docs.sysdig.com/en/docs/administration/saas-regions-and-ip-ranges/
:::

```
helm repo add sysdig https://charts.sysdig.com
helm repo update
helm upgrade --install registry-scanner sysdig/registry-scanner --version=1 \
--set config.secureBaseURL=<SYSDIG_SECURE_URL> \
--set config.secureAPIToken=<SYSDIG_SECURE_API_TOKEN> \
--set config.registryType=gar \
--set config.registryURL=<GAR_REGISTRY_URL> \
--set config.registryPassword=<GAR_REGISTRY_PASSWORD>
```
__\<GAR_REGISTRY_PASSWORD\>__ には、先ほどダウンロードしたService Account Keyをbase 64にエンコードした`--set config.registryPassword="$(cat <GAR_SA_FILE_NAME>.json | base64)"`を指定します。

:::note info
異なるリージョンでGARをセットアップしている場合、異なるリージョンのURL用に別々のスキャナーをデプロイする必要があります。
* us-east1-docker.pkg.dev (us-east1リージョンのレジストリ)
* us-docker.pkg.dev (usマルチリージョンのレジストリ)
:::

2\. 下記コマンドで、Cronjobとして登録されていることを確認します。
```
kubectl get cronjob
```
デフォルトでは毎週土曜日の午前6時にスキャンが実行される設定で登録されています。
```
NAME               SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
registry-scanner   0 6 * * 6   False     0        <none>          88s
```

# 手動によるレジストリスキャン
1. レジストリスキャンを手動で実行する場合は、下記コマンドを実行します。
```
kubectl create job --from=cronjob/registry-scanner registry-scanner-manual-test
```
2\. 起動したregistry-scannerのPodを確認します。
```
kubectl get pod
```
```
NAME                                    READY   STATUS      RESTARTS   AGE
registry-scanner-manual-test-s2xhz      0/1     Completed   0          41s
registry-scanner-worker-dd42x-1-mk8gj   0/1     Completed   0          33s
```
3\. Podのログを確認します。
```
kubectl logs registry-scanner-manual-test-s2xhz
```

# スキャン結果のSysdig UIでの確認
Sysdig UIにログインし、<b>Vulnerabilities > Registry</b> に移動します。
レジストリ内のイメージのスキャン結果が表示されていることを確認します。
![スクリーンショット 2023-10-23 15.48.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2802821/bfaaa662-19ae-da4d-c043-0c40d6c5a6f3.png)

# クリーンアップ
registry-scannerをアンインストールするには以下のコマンドを実行します。
```
kubectl delete job registry-scanner-manual-test
```
```
sudo helm uninstall registry-scanner
```

# まとめ
registry-scannerを使って、Google Artifact Registryのレジストリスキャンを簡単に実行できることが確認できました。