メインコンテンツへスキップ

AI API キーを監査する

このチュートリアルでは、OpenAI と Anthropic の API キーを監査し、注意が必要なキーのレポートをメールで受け取るフローを、コードを書かずに構築する方法を説明します。その過程で、OpenAIAnthropic のアクションを、FilterDate/time transformNotification ノードと連結する方法を学びます。

Early preview

OpenAI と Anthropic の Admin API アクションは Early preview 版として提供されています。アクセスをリクエストするには、サポートリクエストを送信してください。

Goal and objectives

  • Goal: すべての OpenAI Admin API キーと Anthropic API キーを一覧表示し、それらを「stale」(直近 90 日間未使用)と「never used」(未使用)に分類し、各カテゴリごとにフォーマットされたレポートをメール送信するワークフローを作成することです。フローは読み取り専用であり、いかなるキーも変更または無効化しません。

  • Objectives: このトリアルでは次の内容を学びます。

    • フローから OpenAI と Anthropic の Admin API アクションを呼び出す方法。

    • 1 つのアクションの出力を Filter ノードで複数のブランチに分岐させる方法。

    • コードノードの代わりに Date/time transform ノードを使ってローリングの時間ウィンドウを構築する方法。

    • 通知メッセージをテーブルとしてフォーマットし、報告対象がない場合は通知をスキップする方法。

次に、このチュートリアルで構築するフロー全体の例を示します。

The AI API key audit flow

Before you begin

OpenAI Admin API 接続と Anthropic Admin API 接続を作成してください。Anthropic 接続には Admin API キーを含める必要があります。これは API キー管理のオペレーションに必須です。

Start building

  1. DoiT コンソール にサインインし、上部ナビゲーションのメガメニューから Automation and operations を選択し、CloudFlow を選択します。

  2. Create CloudFlow を選択します。

Step 1: Add a trigger

What should start your flow ブロックで Manually start を選択します。後で custom schedule に切り替えて(例: 監査を毎週実行するようにして)もかまいませんが、フローの構築とテストを行う間は手動トリガーの方が簡単です。

Step 2: List OpenAI admin keys

  1. What do you want to do ブロックで Perform an action を選択し、OpenAI を選択してから、admin-api-keys-list アクションを選択します。

  2. Connection タブで、OpenAI Admin API 接続を選択します。

  3. Test タブで Test を選択してアクションを実行します。レスポンスには Admin API キーの data 配列が含まれます。各キーには idnameownerlast_used_at などのフィールドが含まれており、フローの残りの部分でこれらを参照します。

    List OpenAI admin keys configuration

Step 3: List Anthropic API keys

  1. フローに別の Perform an action ノードを追加し、Anthropic を選択してから、listApiKeys アクションを選択します。

  2. Parameters タブで Add additional parameters を選択し、Limit100 に設定して、1 回の実行で最大 100 個のキーを返すようにします。

  3. Connection タブで Anthropic Admin API 接続を選択し、Test タブでアクションをテストします。

    List Anthropic API keys configuration

Step 4: Keep only OpenAI keys with usage

OpenAI キーの last_used_at フィールドは、そのキーが一度も使用されていない場合は空になります。使用履歴があるキーとないキーでは扱いを分ける必要があります。タイムスタンプが存在する場合のみ 90 日の閾値と比較できるため、まずフローでキー一覧を 2 つに分割します。

  1. Filter ノードを追加し、名前を OpenAI keys with usage にします。

  2. Field でプラスアイコン(+)を選択し、2. List OpenAI admin keys.data を選択します。

  3. Filter 1 で条件を data.last_used_at is not null に設定します。

    Filter for OpenAI keys with usage

このノードは、少なくとも一度は使用されたキーのみを出力します。

Step 5: Compute the stale threshold

キーが「stale」とみなされるのは、その最終使用日から 90 日を超えている場合、言い換えると last_used_at + 90 days がフロー実行時点よりも前である場合です。Date/time transform ノードは、この比較に使う値を計算し、レポート用に生のタイムスタンプを読みやすい日付形式に整形します。

  1. Date/time transform ノードを追加し、名前を Compute stale threshold にします。

  2. Select which field you want to transform でプラスアイコン(+)を選択し、4. OpenAI keys with usage.last_used_at を選択します。

  3. 変換アクションを Add に設定し、Value90DurationDays に設定し、新しいフィールド名を staleAfter にします。

  4. Add another transform を選択します。同じ last_used_at フィールドを入力として選択し、変換アクションを Format に設定し、新しいフィールド名を lastUsedDate にして、日付フォーマット YYYY-MM-DD を選択します。

    Date/time transform configuration

このノードは各キーを通過させつつ、staleAfter(最終使用日から 90 日後のタイムスタンプ)と lastUsedDate(人間が読みやすい日付)の 2 つの新しいフィールドを追加します。

Step 6: Filter for stale OpenAI keys

  1. Filter ノードを追加し、名前を Stale OpenAI keys にします。

  2. Field5. Compute stale threshold を選択します。

  3. Filter 1 で条件を staleAfter < Start of the flow に設定します。Start of the flow は、現在の実行が開始された時刻を表す組み込み変数です。

    Filter for stale OpenAI keys

フロー実行時点でキーの staleAfter タイムスタンプが依然として過去であれば、そのキーは 90 日以上使用されていないことになります。

Step 7: Filter for never-used OpenAI keys

Never used OpenAI keys という名前の Filter ノードをもう 1 つ追加します。これは Step 4 の逆の条件になります。Field は再び 2. List OpenAI admin keys.data で、条件は data.last_used_at is null です。

このノードと Step 4 のノードはどちらも同じ OpenAI アクションの出力を参照している点に注意してください。1 つのノードの出力から必要なだけ多くの下流パスへブランチすることができます。

Step 8: Filter for never-used active Anthropic keys

  1. Filter ノードを追加し、名前を Never used active Anthropic keys にします。

  2. Field3. List Anthropic API keys.data を選択します。

  3. Filter 1 で、AND で結合された 2 つの条件を追加します: data.last_used_at is null および data.status == active

    Filter for never-used active Anthropic keys

ステータス条件により、すでに inactive または archived のキーは除外されるため、レポートには引き続きアクセス権を持つキーのみが表示されます。

Step 9: Send the reports

フローは 3 つのNotification ノードで終了します。カテゴリごとに 1 つずつ用意します。各カテゴリを別々の通知にすることで、それぞれのメールを 1 つのフィルター結果に集中させることができます。

  1. Send a message ノードを追加し、名前を Notify: stale OpenAI keys にします。

  2. Notification providerEmail に設定し、送信先アドレスと件名(例: Stale OpenAI admin API keys (no usage in 90 days))を入力します。

  3. Message に導入文を入力し、続いて <table> ブロックを作成します。テーブル内の各行は列になります。列ヘッダーを入力してからコロンを付け、その後プラスアイコン(+)を選択して参照フィールドを挿入します。

    The following OpenAI admin API keys have not been used in the last 90 days:

    <table>
    Key name: {6. Stale OpenAI keys.name}
    Key ID: {6. Stale OpenAI keys.id}
    Owner: {6. Stale OpenAI keys.owner.name}
    Last used: {6. Stale OpenAI keys.lastUsedDate}
    </table>
  4. Don't send notification if no results を選択し、フィルターに一致したキーがない場合はメール自体をスキップするようにします。

    Notification configuration with a table message

  5. 残り 2 つのカテゴリについても同様に設定します。

    • Notify: never used OpenAI keys: 7. Never used OpenAI keys ノードから nameidowner.name フィールドを参照します。

    • Notify: never used Anthropic keys: 8. Never used active Anthropic keys ノードから nameidcreated_at フィールドを参照します。

ヒント

通知メッセージでは、参照している Filter を通過した各キーごとに 1 行がテーブルにレンダリングされ、値が空の場合はハイフンとして表示されます。利用可能なすべてのメッセージフォーマットオプションは、Notification ノードのページを参照してください。

Publish and run the flow

Publish を選択し、次に Run を選択して監査を開始します。Run history ページで各ステップを追跡し、ステップを展開して出力を確認できます。

Run history of a completed audit

実行が完了すると、最大 3 通のメール(該当するキーが見つかったカテゴリごとに 1 通)を受け取ります。各メールにはキーの名前、ID、所有者を含むテーブルが表示されるため、どのキーをローテーションまたは削除するかを判断できます。

See also