Kiro管理コンソールをCloudTrailで探ると統合基盤が垣間見えてきた

Kiro管理コンソールをCloudTrailで探ると統合基盤が垣間見えてきた

CloudTrailとHTMLソースからKiro管理コンソールの非公開APIを発見。SigV4署名で実際に呼び出したところ、KiroとQ Developerを統合管理するサブスクリプション基盤「zorn」の存在を確認できました
2026.02.25

AWS の生成 AI コーディングアシスタント「Kiro」の Enterprise 向け機能として、2026年2月にユーザーアクティビティレポートが追加されました。このレポートを活用するにあたり、Kiro の管理コンソールに表示されるサブスクリプション情報を API で取得する方法を調査しました。管理コンソールの HTML ソースから通信先のエンドポイントを特定し、CloudTrail で実際の API 呼び出しを観測。発見した非公開 API に SigV4 署名でリクエストを送ったところ、Kiro と Q Developer を統合管理するサブスクリプション基盤の存在が見えてきました。

なお、本記事の検証は調査目的で期間限定で開設した AWS アカウント上で行っています。AdministratorAccess 権限を使用しており、永続運用を前提とした環境ではありません。

ダッシュボードの HTML ソースから手がかりを探す

まずはダッシュボードの HTML ソースを覗いてみます。ブラウザの開発者ツールで確認できる公開情報です。

Kiroダッシュボードのソース

CSP connect-src エンドポイント分析

Content Security Policy(CSP)の connect-src ディレクティブには、ダッシュボードが通信を許可されているエンドポイントが列挙されています。ブラウザの DevTools Console で amazonaws.com を含むエンドポイントだけを抽出すると、134個が見つかりました。

(キャプチャ: CSP connect-src から抽出した amazonaws.com エンドポイント一覧)

このうち、Kiro の管理に関連するエンドポイントを整理すると以下の通りです。

カテゴリ エンドポイント 用途
codewhisperer codewhisperer.us-east-1.amazonaws.com プロファイル管理
user-subscriptions service.user-subscriptions.{region}.amazonaws.com (17リージョン) サブスクリプション管理
sso / identitystore sso.{region}.amazonaws.com (17リージョン) Identity Center 連携
kms kms.us-east-1.amazonaws.com 暗号化キー管理
secretsmanager secretsmanager.us-east-1.amazonaws.com シークレット管理
pricing api.pricing.us-east-1.amazonaws.com 料金情報
monitoring monitoring.us-east-1.amazonaws.com CloudWatch 連携
codeconnections codeconnections.us-east-1.amazonaws.com リポジトリ連携

注目すべきは user-subscriptions です。17リージョンにエンドポイントが存在し、サブスクリプション管理の中核を担っていることが伺えます。しかし AWS の公式ドキュメントにはこのサービス名は登場しません。

内部コードネームの発見

HTML の meta[name="tb-data"] タグには、さらに興味深い情報が埋め込まれていました。

zornEndpointszornServicePrincipal というキーで zorn という文字列が登場します。user-subscriptions サービスの内部コードネームと推測されますが、この時点では正体がわかりません。もう1つ、tangerinebox という文字列も見つかりました。こちらは AWS コンソールのテレメトリ基盤です。

feature flags(33個)

meta[id="meta-features-json"] からは33個のフィーチャーフラグが見つかりました。全て enabled: true です。

カテゴリ フラグ数
Kiro 固有 2 kiro-pricing, kiro-console
MCP 2 mcp-configuration, mcp-registry-url
Q Developer 由来 11 q-extensions, q-agent-for-*
ダッシュボード/インフラ 18 merge-old-dashboard, cloudzero-plugin

Kiro 固有のフラグがたった2個しかありません。残りの31個は Q Developer やダッシュボード基盤のものです。Kiro が Q Developer の管理基盤をほぼそのまま共有していることを示唆しています。

CloudTrail で非公開 API を観測する

CSP 分析で通信先のサービスがわかったので、次は実際にどんな API が呼ばれているかを CloudTrail で確認します。

フィルタリング手法

AWS コンソールを開くと裏側で EC2 や ResourceGroup 等の大量の API が走るため、ノイズだらけになります。CSP 分析で通信先のサービス名がわかっているので、EventSource でフィルタしました。

aws cloudtrail lookup-events \
  --start-time "2026-02-18T18:28:00Z" \
  --end-time "2026-02-18T18:37:00Z" \
  --region us-east-1 \
  --output json \
  | jq '[.Events[] | select(.EventSource == "codewhisperer.amazonaws.com" or
    .EventSource == "user-subscriptions.amazonaws.com" or
    .EventSource == "q.amazonaws.com")]'

観測結果: 3サービス・14 API

ダッシュボードアクセス時(18:28-18:37 UTC)に39イベントを観測しました。うち Kiro 関連は3サービス14 API です。

codewhisperer.amazonaws.com(3 API)

API 用途
ListProfiles プロファイル一覧
GetUsageLimits 使用量制限(origin: AI_EDITOR or KIRO_CLI
ListTagsForResource リソースタグ

user-subscriptions.amazonaws.com(3 API)

API 用途
ListUserSubscriptions ★ 全ユーザーのサブスクリプション一覧
ListApplicationClaims アプリケーションクレーム
ListClaims クレーム(identityProvider: BUILDER_ID

q.amazonaws.com(8 API)

API 用途
ListDashboardMetrics ★ ダッシュボードメトリクス(dashboardType: KIRO, granularity: DAILY
CreateAssignment / UpdateAssignment サブスクリプション管理
SendMessage, ListConversations チャット
GetIdentityMetadata ID 情報
ListPluginProviders, ListPlugins プラグイン管理

SigV4 署名で API を呼び出す

なぜ普通に叩けないのか

通常の AWS サービスであれば aws <service> <operation> で呼び出せます。しかし user-subscriptionsq は AWS CLI にサービス定義が存在しない非公開サービスのため、CLI も SDK も使えません。

そこで、AWS の HTTP リクエスト認証の仕組みである SigV4(Signature Version 4) を自前で適用します。

通常: aws cli → SDK内部でSigV4署名 → HTTPリクエスト → AWSサービス
今回: Python → botocore.auth.SigV4Authで署名 → HTTPリクエスト → 非公開サービス

実装

パスベースの Coral API(POST /{OperationName} + JSON ボディ)として呼び出します。

from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest
import requests, json, boto3

session = boto3.Session(region_name='us-east-1')
creds = session.get_credentials().get_frozen_credentials()

url = "https://service.user-subscriptions.us-east-1.amazonaws.com/ListUserSubscriptions"
payload = json.dumps({
    "instanceArn": "arn:aws:sso:::instance/ssoins-XXXXXXXXXXXXXXXX",
    "maxResults": 1000,
    "subscriptionRegion": "us-east-1"
})

req = AWSRequest(method='POST', url=url, data=payload,
    headers={'Content-Type': 'application/json'})
SigV4Auth(creds, 'user-subscriptions', 'us-east-1').add_auth(req)
resp = requests.post(req.url, headers=dict(req.headers), data=req.body)
print(json.dumps(resp.json(), indent=2))

なお、14個の API のうち呼び出しに成功したのは user-subscriptions の ListUserSubscriptions のみでした。codewhisperer 系は 429 や UnknownOperation、q 系は 500 や UnknownOperation が返り、3サービスで異なる API プロトコルが混在していることがわかりました。

ListUserSubscriptions の実行結果

全ユーザーを横断取得

Kiro と Q Dev Pro の全ユーザーが1つのレスポンスで返ってきました。

KIRO_ENTERPRISE_PRO: 12ユーザー
  ACTIVE:   10人
  PENDING:   2人(未ログイン)

ダッシュボードの「User subscriptions」画面と完全に一致する情報です。Kiro 以外のサブスクリプションタイプ(Q_DEVELOPER_STANDALONE 等)も同じレスポンスに含まれていました。このアカウントの Identity Center には Kiro と Q Developer のサブスクリプションを登録していたため、両サービスの全ユーザー情報がまとめて返ってきた形です。

Kiro ユーザー一覧(マスク済み)

ユーザー サブスクリプション activated aggregated
user-A KIRO_ENTERPRISE_PRO 2025-12-12 GROUP
user-B KIRO_ENTERPRISE_PRO 2025-12-04 GROUP
user-C KIRO_ENTERPRISE_PRO 2025-12-08 GROUP
user-D KIRO_ENTERPRISE_PRO 2025-12-12 GROUP
user-E KIRO_ENTERPRISE_PRO 2025-12-05 GROUP
user-F KIRO_ENTERPRISE_PRO 2025-12-11 GROUP
user-G KIRO_ENTERPRISE_PRO 2026-02-09 GROUP
user-H KIRO_ENTERPRISE_PRO 2026-01-01 INDIVIDUAL_AND_GROUP
user-I KIRO_ENTERPRISE_PRO 2026-02-12 GROUP
user-J KIRO_ENTERPRISE_PRO 2025-12-08 GROUP

zorn の正体 — サブスクリプション統合基盤

HTML ソースから発見した謎の内部コードネーム zornzornEndpoints, zornServicePrincipal)の正体が、ここで明らかになりました。

zorn = user-subscriptions サービス。Kiro と Q Dev Pro のサブスクリプションを統合管理するバックエンド基盤でした。1つの API を叩くだけで、サービスの垣根を越えた全サブスクリプションが返ってきます。

API での内部名 意味 状態
KIRO_ENTERPRISE_PRO Kiro PRO($20/月) ACTIVE / PENDING
Q_DEVELOPER_STANDALONE Q Developer Pro ACTIVE
Q_DEVELOPER_BENEFIT Q Dev Pro 付帯サブスク ACTIVE(GROUP)
Q_BUSINESS Q Business 連携枠 ほぼ全員 PENDING

CloudTrail の CreateAssignment / UpdateAssignment では Q_DEVELOPER_STANDALONE_PRO / Q_DEVELOPER_STANDALONE_PRO_PLUS という名前が使われるのに対し、ListUserSubscriptions では KIRO_ENTERPRISE_PRO という独自名が使われていました。同じサブスクリプションでも API 操作によって内部名が異なります。

Kiro と Q Developer のサブスクリプションの差異

レスポンスを比較すると、Kiro と Q Dev Pro のサブスクリプション体系にはいくつかの違いがありました。

Q Developer Pro には Q_DEVELOPER_BENEFIT という付帯サブスクリプションが自動付与されますが、Kiro ユーザーには付与されていません。Kiro と Q Dev Pro は別のサブスクリプション体系です。

割り当て方法を示す aggregatedSubscriptionType は、SSO グループ経由なら GROUP、個人割り当てとグループ割り当ての両方があれば INDIVIDUAL_AND_GROUP になります。後者は月末アップグレード記事で PRO → PRO+ に個人でアップグレードしたユーザーに該当します。

また、一部のサブスクリプションタイプでは lastActivityDate が記録されていましたが、Kiro ユーザー(KIRO_ENTERPRISE_PRO)は全員 null でした。Kiro 側の利用状況はこの API では追跡されていないようです。

Q_BUSINESS が全ユーザーに PENDING

Kiro のみ契約しているユーザーにも Q_BUSINESS: PENDING が割り当て済みでした。これは過去に Amazon Q Business の SSO 設定を試した際の残存データです。PENDING はライセンス枠が割り当て済みだがユーザーが一度もサービスにアクセスしていない状態を指します。

なぜ2つのサービスが共存しているのか

同一 Identity Center 内で Kiro と Q Dev Pro が共存し、1つの API で横断取得できるのは、CodeWhisperer → Q Developer → Kiro という段階的な移行に伴う仕様と推測されます。バックエンドの管理基盤(zorn)が複数のサブスクリプションタイプを統合管理しており、ダッシュボードの GUI だけがサービスごとに分離されている状態です。

まとめ

アーキテクチャの全体像

ダッシュボードの裏側では zorn(user-subscriptions)を中心に、codewhisperer、q の3サービスが連携する構成でした。

今回の検証は無保証の前提ですが、ListUserSubscriptions からコンソールの裏側にあるデータを直接確認でき、技術的な興味を満たす面白い結果となりました。

バックエンドでは Kiro と Q Developer Pro が統合されたデータ基盤(zorn)で管理されている仕組みが垣間見えたので、将来公式の管理 API が提供された際には、本記事で観測したデータ構造の答え合わせをしてみたいと思います。

この記事をシェアする

FacebookHatena blogX

関連記事