自社固有の検査を実装する
Shisho Cloud がネイティブで有する検査機能は、多くのクラウドサービスに対して、多くの検査項目をカバーしています。 しかし、自社固有の検査項目を実装したい場合もあるでしょう。そのような場合には、Shisho Cloud が提供する検査機能を拡張できます。
本チュートリアルでは、Shisho Cloud が提供する検査機能を拡張する方法を説明します。 具体的には、以下を実践します:
- Shisho Cloud への検査仕様(Specification)の登録
- Shisho Cloud ポリシーの記述・デプロイ
準備
ポリシーを記述する言語によって手順が異なります。
- Rego
- TypeScript
以下のように Shisho Cloud Rego SDK をクローンした後、本チュートリアルで作成するポリシーコードの保管場所として your-policy
ディレクトリを作成してください:
git clone https://github.com/flatt-security/shisho-cloud-rego-libraries.git
mkdir ./your-policy
cd ./your-policy
この時点では、以下のようなディレクトリ構成になっているはずです:
.
├── your-policy
└── shisho-cloud-rego-libraries
最終的なディレクトリ構成は以下のようになります:
.
├── your-policy
│ ├── implementation
│ │ ├── decide.rego
│ │ ├── decide_test.rego
│ │ ├── decide.graphql
│ │ └── manifest.yaml
| ├── specification
│ └── dgspec.yaml
└── shisho-cloud-rego-libraries
検査ルールの実装では JavaScript/TypeScript ランタイムとして Deno を利用しますので、Deno 公式ドキュメントを参照して Deno をインストールしてください。また、お使いのエディタに対応した Deno のプラグインをインストールしておくとさらに便利です。
Shisho Cloud 向けのポリシーコードを記述する際に利用するライブラリは、shisho_cloud_policy_helpers として公開されています。Deno では以下のように import 文でライブラリを直接参照できますので、ライブラリ等のインストールは不要です。
import { DecisionPolicy } from "https://deno.land/x/shisho_cloud_policy_helpers/decision/mod.ts"
検査仕様を定義する
まずは検査仕様を定義しましょう。検査仕様は、Shisho Cloud における検査項目の定義です。検査仕様は、以下の画面例の "A test security check" や "Top-level heading 1" の箇所のような位置で表示され、Shisho Cloud 上に追加したリスクがどのような背景を持つものなのかを説明するために用います:
検査仕様の定義には YAML を用います。
./your-policy/specification/dgspec.yaml
というファイルを作成し、コメントの指示に従いながら検査の概要を説明してみてください:
version: "1.0"
# Each specification defines metadata for a single security check, identified with the pair (apiVersion, kind).
specifications:
- # A custom value to group your "kind"s; it should satisfy ^[0-9a-zA-Z./\\-_]{1,128}$
# You can change this value as you like.
apiVersion: "user.decision.api.shisho.dev/v1"
# A value to represent what this specification is for with the combination of apiVersion; it should satisfy ^[0-9a-zA-Z.\\-_]{1,128}$
# You can change this value as you like.
kind: "my-security-review"
# Any non-empty string to summarize the security check
# You can change this value as you like.
title: "A test security check"
# Any non-empty string, describing background of the security check; potential risk, how to mitigate, etc.
# You can change this value as you like in Markdown format.
explanation: |
This is a test explanation. You can use **Markdown** here.
完成したら、以下のコマンドを実行して検査仕様を Shisho Cloud に登録しましょう:
shishoctl dgspec apply -o $SHISHO_ORG_ID -f "your-policy/specification/dgspec.yaml"
登録が完了したら、以下のコマンドを実行して検査仕様が正しく登録されたことを確認してください:
$ shishoctl dgspec describe "user.decision.api.shisho.dev/v1" "my-security-review" -o $SHISHO_ORG_ID | jq -r
{
"apiVersion": "user.decision.api.shisho.dev/v1",
"kind": "my-security-review",
"title": "A test security check",
"explanationMarkdown": "This is a test explanation. You can use **Markdown** here.\n",
"createdAt": "2023-11-13T19:05:41Z",
"updatedAt": "2023-11-13T19:05:41Z"
}
これで、Shisho Cloud における検査仕様の定義が完了しました。
なお explanation
には Markdown を用いることができ、かつ dgspec.yaml
には explanation
をファイルパスで指定することもできます。
以下に定義の例を示します:
version: "1.0"
specifications:
- apiVersion: "user.decision.api.shisho.dev/v1"
kind: "my-security-review"
title: "A test security check"
explanation: !include "./explanation.md"
This is a test explanation. You can use **Markdown** here.