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

プロジェクトの管理

shishoctl project コマンドは、Shisho Cloudの包括的なプロジェクト管理機能を提供します。このガイドでは、プロジェクトのライフサイクル、メンバー管理、スコープ設定、通知設定など、プロジェクト関連のすべての操作について説明します。

前提条件

プロジェクトコマンドを使用する前に、以下を準備してください:

  1. shishoctl のインストール(インストールを参照)
  2. Shisho Cloud へのサインイン:
    shishoctl auth signin
  3. 組織 ID(Shisho Cloud ダッシュボードの URL から確認可能)

プロジェクトのライフサイクル管理

プロジェクトの作成

以下のコマンドにより、組織内に新しいプロジェクトを作成できます:

shishoctl project create --org <ORGANIZATION_ID> --name <PROJECT_NAME> [--description <DESCRIPTION>]

例:

shishoctl project create --org org-a --name "Web Application Security" --description "ウェブアプリケーションのセキュリティ分析"

--quiet オプションを使用することで、プロジェクト ID のみを取得できます:

PROJECT_ID=$(shishoctl project create --org org-a --name "My Project" --quiet)
echo "作成されたプロジェクト: $PROJECT_ID"

プロジェクトの一覧表示

以下のコマンドにより、組織内のすべてのプロジェクトを一覧表示できます:

shishoctl project list --org <ORGANIZATION_ID>

ページネーション付き:

# 最初の25プロジェクトを表示
shishoctl project list --org org-a --per-page 25 --page 0

# 1ページあたり50プロジェクトで2ページ目を表示
shishoctl project list --org org-a --per-page 50 --page 1

出力形式:

# JSON出力(デフォルト)
shishoctl project list --org org-a --format json

# YAML出力
shishoctl project list --org org-a --format yaml

プロジェクトの削除

以下のコマンドにより、プロジェクトを削除できます(慎重に利用してください):

shishoctl project delete --org <ORGANIZATION_ID> --project <PROJECT_ID>
# 確認プロンプトをスキップ
shishoctl project delete --org <ORGANIZATION_ID> --project <PROJECT_ID> --force

例:

shishoctl project delete --org org-a --project proj-123 --force

::: プロジェクトの削除は元に戻せません。必ず慎重に利用してください。 --force オプションを使用することで、確認プロンプトをスキップできます。 :::

メンバー管理

メンバーの追加

既存の組織ユーザーを追加する場合:

# まず、ユーザーIDを取得
USER_ID=$(shishoctl organization users describe --org <ORGANIZATION_ID> --email <USER_EMAIL> --id)

# ロールを指定してユーザーをプロジェクトに追加
shishoctl project member add --org <ORGANIZATION_ID> --project <PROJECT_ID> --user <USER_ID> --role <ROLE>

新しいユーザーを招待する場合:

shishoctl project member invite --org <ORGANIZATION_ID> --project <PROJECT_ID> --email <USER_EMAIL> --role <ROLE>

利用可能なロール:

  • owner - プロジェクトのフルアクセス権限
  • triager - 検知事項のトリアージが可能
  • viewer - 読み取り専用

ワークフローの例:

# 既存ユーザーを検索
USER_EMAIL="alice@company.com"
USER_ID=$(shishoctl organization users describe --org org-a --email $USER_EMAIL --id)

if [ -z "$USER_ID" ]; then
echo "ユーザーが見つかりません。招待を送信します"
shishoctl project member invite --org org-a --project proj-123 --email $USER_EMAIL --role viewer
else
echo "既存ユーザーを追加します"
shishoctl project member add --org org-a --project proj-123 --user $USER_ID --role owner
fi

メンバーの一覧表示

以下のコマンドにより、すべてのプロジェクトメンバーを表示できます:

shishoctl project member list --org <ORGANIZATION_ID> --project <PROJECT_ID>

メンバーの削除

以下のコマンドにより、プロジェクトからユーザーを削除できます:

shishoctl project member remove --org <ORGANIZATION_ID> --project <PROJECT_ID> --user <USER_ID>

スコープ管理

以下のコマンドにより、プロジェクトスコープにリソースの一覧表示、追加、削除ができます:

スコープの一覧表示

shishoctl project scope list --org <ORGANIZATION_ID> --project <PROJECT_ID>

クラウドアカウントをスコープに追加

方法1: Shisho Cloud のリソース ID を指定する

# 利用可能なクラウドアカウントのリソース IDを取得
RESOURCE_ID=$(shishoctl cloud-account describe --org <ORGANIZATION_ID> --googlecloud-project-number <GOOGLECLOUD_PROJECT_NUMBER> --id)

# プロジェクトスコープに追加
shishoctl project scope add --org <ORGANIZATION_ID> --project <PROJECT_ID> --scope <RESOURCE_ID>

方法2: Google Cloud プロジェクト番号を指定する

shishoctl project scope add --org <ORGANIZATION_ID> --project <PROJECT_ID> --googlecloud-project-number <GOOGLECLOUD_PROJECT_NUMBER>

例:

# Google Cloud プロジェクト番号でスコープに追加
GOOGLECLOUD_PROJECT_NUMBER="514893259785"
shishoctl project scope add --org org-a --project proj-123 --googlecloud-project-number $GOOGLECLOUD_PROJECT_NUMBER

スコープから削除

shishoctl project scope remove --org <ORGANIZATION_ID> --project <PROJECT_ID> --scope <RESOURCE_ID>

通知管理

プロジェクトの通知は、メール、通知グループ、Slack、三つの方法で設定できます:

通知の一覧表示

shishoctl project notification list --org <ORGANIZATION_ID> --project <PROJECT_ID>

メール通知の設定

# メール通知を設定
shishoctl project notification set --org <ORGANIZATION_ID> --project <PROJECT_ID> --email <USER_EMAIL>

::: 通知設定に使用するメールアドレスは、組織の許可リストに登録されていることが必要です。 :::

通知グループの設定

# 利用可能な通知グループを一覧表示
shishoctl organization notification group list --org <ORGANIZATION_ID>

# 通知グループを設定
shishoctl project notification set --org <ORGANIZATION_ID> --project <PROJECT_ID> --notification-group <GROUP_ID>

Slack通知の設定

shishoctl project notification set --org <ORGANIZATION_ID> --project <PROJECT_ID> --slack-workspace-id <WORKSPACE_ID> --slack-channel-id <CHANNEL_ID>
info

利用したい Slack チャンネルは組織に統合されていることが必要です。

通知の削除

# プロジェクトの通知チャンネルIDを一覧表示
shishoctl project notification list --org <ORGANIZATION_ID> --project <PROJECT_ID>

# IDを確認した後、削除したい通知チャンネルを削除
shishoctl project notification delete --org <ORGANIZATION_ID> --project <PROJECT_ID> <CHANNEL_ID>

例:プロジェクト全体の設定

たとえば、以下は組織に新しいプロジェクトを作成したあと、メンバー、スコープ、通知をそれぞれ設定し、それらをまとめて表示する Shell スクリプトの例です。

#!/bin/bash

# 設定
ORGANIZATION_ID="org-a"
PROJECT_NAME="Production Security"
USER_EMAIL="security@company.com"
GOOGLECLOUD_PROJECT_NUMBER="514893259785"

# 認証
shishoctl auth signin

# プロジェクト作成
echo "プロジェクトを作成中: $PROJECT_NAME"
PROJECT_ID=$(shishoctl project create --org $ORGANIZATION_ID --name "$PROJECT_NAME" --quiet)
echo "作成されたプロジェクト: $PROJECT_ID"

# ユーザーをオーナーとして追加
echo "ユーザーをプロジェクトオーナーとして追加中"
USER_ID=$(shishoctl organization users describe --org $ORGANIZATION_ID --email $USER_EMAIL --id)
if [ -n "$USER_ID" ]; then
shishoctl project member add --org $ORGANIZATION_ID --project $PROJECT_ID --user $USER_ID --role owner
echo "ユーザー $USER_EMAIL をオーナーとして追加しました"
else
shishoctl project member invite --org $ORGANIZATION_ID --project $PROJECT_ID --email $USER_EMAIL --role owner
echo "ユーザー $USER_EMAIL をオーナーとして招待しました"
fi

# Google Cloud プロジェクトをスコープに追加
echo "Google Cloud プロジェクトをスコープに追加中"
shishoctl project scope add --org $ORGANIZATION_ID --project $PROJECT_ID --googlecloud-project-number $GOOGLECLOUD_PROJECT_NUMBER

# メール通知を設定
echo "メール通知を設定中"
shishoctl project notification set --org $ORGANIZATION_ID --project $PROJECT_ID --email $USER_EMAIL

# 設定を確認
echo "=== プロジェクト設定完了 ==="
echo "メンバー:"
shishoctl project member list --org $ORGANIZATION_ID --project $PROJECT_ID

echo "スコープ:"
shishoctl project scope list --org $ORGANIZATION_ID --project $PROJECT_ID

echo "通知:"
shishoctl project notification list --org $ORGANIZATION_ID --project $PROJECT_ID

よく使うコマンドオプション

ページネーションの使用

組織のプロジェクトは一覧コマンドで全部を見れない場合は、ページネーションを使用してください:

# すべてのプロジェクトを取得
PAGE=0
PER_PAGE=50

while true; do
PROJECTS=$(shishoctl project list --org $ORGANIZATION_ID --page $PAGE --per-page $PER_PAGE)
PROJECT_COUNT=$(echo "$PROJECTS" | jq 'length')

if [ "$PROJECT_COUNT" -eq 0 ]; then
break
fi

echo "ページ $PAGE の $PROJECT_COUNT プロジェクトを処理中"
# プロジェクトを処理...

PAGE=$((PAGE + 1))
done

条件分岐での操作

変更を行う前に、プロジェクトの状態を確認してください:

# まだ存在しない場合のみスコープを追加
CURRENT_SCOPE=$(shishoctl project scope list --org $ORGANIZATION_ID --project $PROJECT_ID)
SCOPE_COUNT=$(echo "$CURRENT_SCOPE" | jq 'length')

if [ "$SCOPE_COUNT" -eq 0 ]; then
echo "空のスコープにクラウドアカウントを追加中"
shishoctl project scope add --org $ORGANIZATION_ID --project $PROJECT_ID --googlecloud-project-number $GOOGLECLOUD_PROJECT_NUMBER
else
echo "プロジェクトスコープは既に設定されています"
fi

コマンドヘルプ

プロジェクトコマンドのさらなる用法については、--help オプションを通して確認してください:

shishoctl project --help
shishoctl project create --help
shishoctl project member --help

組織レベルの操作(ユーザー、チーム、通知グループ)については、以下のコマンドを通して確認してください:

shishoctl organization --help