メインコンテンツまでスキップ

shishoctl CLI から操作する

shishoctl CLI は Shisho Cloud を操作するための CLI です。 このツールを用いると、docker コマンド や kubectl コマンドに近い体験で Shisho Cloud へのポリシーのデプロイや管理を行えます。

インストール

現在 shishoctl がサポートしている各環境で、shishoctl をインストールするコマンドを以下に示します:

以下のコマンドにより、shishoctl/usr/local/bin にインストールできます:

SHISHOCTL_URL="https://shisho.dev/releases/shishoctl-0.13.1-x86_64-unknown-linux-gnu"
sudo curl -L $SHISHOCTL_URL -o /usr/local/bin/shishoctl
sudo chmod +x /usr/local/bin/shishoctl

サインイン

shishoctl コマンドが実行できる環境で以下のコマンドを実行することで、shishoctl から Shisho Cloud にサインインすることができます:

shishoctl auth signin
note

shishoctl auth signin コマンドで Shisho Cloud から取得された認証情報は、一定時間経過後に無効になります。 認証状態に関するエラーが発生した場合には、再度 shishoctl auth signin コマンドを実行してください。

例: ワークフローの一覧を取得する

shishoctl CLI からのサインインに成功すると、Shisho Cloud に関する操作の一部が shishoctl から行えるようになります。 例えば以下は、組織 ID org-a に登録されたワークフローの一覧を取得するコマンドの例です:

shishoctl workflow list -o org-a
info

組織 ID とは、組織の作成時に登録した ID のことです。 組織 ID が不明な場合は、以下の手順で組織 ID を確認してください:

  1. Shisho Cloud のダッシュボード画面を Web ブラウザ上で開く
  2. その際に Web ブラウザに表示される以下のような URL に含まれる組織 ID ([oid] 部分) を確認する
https://cloud.shisho.dev/[oid]/dashboard

例: 複数のコマンドをつなげて実行する

shishoctl CLI では、データを取得するためのコマンドの結果は JSON か YAML 形式で出力されます。 これを利用し、あるコマンドの結果を加工・抽出して次のコマンドの引数とすることで、複数のコマンドをつなげて複雑な処理を実現することができます。

たとえば、以下はある組織に含まれる検知事項の一覧を取得したあと、それぞれの検知事項が対象とするリソースの情報を取得し、それらをまとめて表示する Python スクリプトの例です。 実行の際は、環境変数 SHISHOCTL_ORG_ID (組織 ID) と SHISHOCTL_PROJECT_ID (プロジェクト ID) を事前に設定してください。

import subprocess
import yaml
import os

org_id = os.getenv("SHISHOCTL_ORG_ID")
project_id = os.getenv("SHISHOCTL_PROJECT_ID")

result = subprocess.run(
["shishoctl", "project", "finding", "list", "--org", org_id, "--project", project_id, "--format", "yaml"],
capture_output=True,
text=True,
)
parsed = yaml.safe_load(result.stdout)

summary = {"entries": []}
for i, finding in enumerate(parsed["entries"]):
api_version = finding["id"]["apiVersion"]
kind = finding["id"]["kind"]

result = subprocess.run(
["shishoctl", "finding", "describe", "--org", org_id, api_version, kind],
capture_output=True,
text=True,
)
parsed = yaml.safe_load(result.stdout)

summary["entries"].append({
"id": {
"apiVersion": api_version,
"kind": kind,
},
"subjects": [],
})

for entry in parsed["decisions"]["entries"]:
summary["entries"][i]["subjects"].append(entry['header']['subject'])

print(yaml.dump(summary))

その他のコマンドの使い方を確認する

shishoctl コマンドのさらなる用法については、本 Web サイトの他のページや、以下のコマンドを通して確認してください:

shishoctl --help