
Kiro CLI無双。自身の利用ログ解析中に発見した異常値を調査、AWSサポート起票までやりきった話
AWSの生成AIコーディングアシスタント「Kiro」のEnterprise向け機能として、2026年2月にユーザーアクティビティレポートが追加されました。S3バケットに user_report というプレフィックスで日次出力されるため、本記事では user_report ログと表記します。
- Viewing per-user activity - Kiro Documentation
- Enterprise identity and usage metrics - Kiro Blog
- Kiro ユーザーアクティビティレポートを使ってユーザーごとのクレジット使用量を集計してみた
筆者もKiro CLIを使ってこの user_report ログを分析していたところ、初日(2/10)のデータに不審な点を見つけました。
本記事では、Kiro CLIでのログ分析中にこの不審な点を発見し、Kiroからの提案をきっかけにAWSサポートケースの起票・クローズまで行った経緯を紹介します。
経緯
Kiro CLIで user_report ログの分析を進めていました。月別のクレジット消費量からチームに適切なKiroプランを検討したり、未使用ユーザーの棚卸しを行うのが本来の目的でした。
user_report には、ユーザーごとの Credits_Used(その日に消費したサブスクリプションプランのクレジット数)と Total_Messages(ユーザーのプロンプト、ツール呼び出し、Kiroの応答を含むメッセージ数)が記録されています。この2つの比率(credits/message)を見ると、通常 0.2〜0.5 程度のところ、2/10だけ 96〜105 と約200倍の値を示していました。
社内で該当ユーザーにKiroクライアントの /usage コマンドで実際のクレジット消費量を確認してもらったところ、user_report の値と大きく乖離していることがわかりました。
| データソース | ユーザーA(2月累計) | ユーザーB(2月累計) |
|---|---|---|
/usage(クライアント側) |
165 credits | 841 credits |
user_report 2/10のみ |
7,883 credits | 1,353 credits |
いずれも2月全体の /usage 実績が、2/10の1日分の user_report を下回っています。
Kiroにこの異常値について意見を求めたところ、AWSサービス側に起因する可能性が高く、サポートへの問い合わせが適切と判断。これを受けて、サポートケースを起票することにしました。
Kiro CLIでの調査と起票文作成
認証情報の設計
Kiro CLIにAWSリソースの調査を依頼する際、AWS SSOログイン(aws sso login)で強い権限を渡すこともできますが、今回は読み取り専用の一時認証情報を使用しました。最小権限の原則に従い、調査に必要な権限のみを付与するためです。
aws sts assume-role \
--role-arn arn:aws:iam::XXXX:role/ReadOnlyRole \
--role-session-name kiro-log-investigation
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
kiro-cli chat
S3読み取りのみの権限で、誤操作でもデータ削除は不可能です。セッション名を指定しているため、CloudTrailからの監査も可能です。
認証情報の設計については、次の記事でも詳しく解説しています。
Kiroとの対話
Kiro CLIを起動し、user_report ログからユーザーごとのクレジット消費状況を分析してもらいました。
ユーザー: S3バケット s3://kiro-logs-XXXX/user_report/ のログを分析して。
ユーザーごとのクレジット消費量を集計して、
上位プランへの切替が必要なユーザーがいるか確認して。
Kiro: [S3からログを取得、分析...]
分析の過程で、初日(2/10)のデータに不審な点を発見しました:
- credits/message比率が 96〜105(通常は 0.2〜0.5)
- プロンプトログの記録と突き合わせると、記録以上のクレジットが消費されている
- 2/10に記録があるのは2名のみで、両者とも数ヶ月前から継続利用
ダッシュボードの値とも大きく乖離しています。
初日データは正常な日次値ではない可能性が高く、
AWSサポートへの確認をお勧めします。
プロンプトでS3パスと分析目的を明示したことで、Kiroが自律的にログ取得・異常値検出・他データソースとの突合・サポート照会の提案まで進めてくれました。
続けて、調査結果のまとめと起票文の作成を依頼しました。
ユーザー: この調査結果をMarkdownでまとめて。
概要、状況、調査結果、推定原因の順で構造化して。
Kiro: investigation-summary.mdに保存しました。
ユーザー: サポートケースの起票文を作成して。
Kiro: support-case-draft.mdに保存しました。
生成された起票文は、件名・緊急度・解決したい課題・確認された現象・環境情報が構造化されており、そのままサポートケースに使える品質でした。障害報告ではなく仕様確認というトーンも適切です。
最小権限IAMの実践
起票の実行にあたり、Support API権限を追加した専用のIAMポリシーを作成しました。
KiroInvestigationPolicy(クリックで展開)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "KiroLogAnalysisS3Access",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::aws-service-logs-XXXXXXXXXXXX-us-east-1",
"arn:aws:s3:::aws-service-logs-XXXXXXXXXXXX-us-east-1/kiro/*"
]
},
{
"Sid": "IdentityCenterReadAccess",
"Effect": "Allow",
"Action": [
"identitystore:DescribeUser",
"identitystore:ListUsers",
"identitystore:DescribeGroup",
"identitystore:ListGroupMemberships"
],
"Resource": "*"
},
{
"Sid": "SupportCaseManagement",
"Effect": "Allow",
"Action": [
"support:CreateCase",
"support:AddCommunicationToCase",
"support:AddAttachmentsToSet",
"support:DescribeCases",
"support:DescribeServices",
"support:DescribeSeverityLevels"
],
"Resource": "*"
}
]
}
S3はバケットとプレフィックスを限定(kiro/*)、Identity Centerは読み取り系のみ、Support APIは起票に必要な最小限のアクションに絞っています。
サポートケース起票の実行
サービスコードの発見
Kiroのサービスコードを確認します。
aws support describe-services --language ja --region us-east-1
service-kiro というサービスコードと、general-guidance というカテゴリコードが見つかりました。
ケース作成
aws support create-case \
--subject "Kiro Enterprise user_report 初日データの異常値 - データ仕様の確認" \
--service-code "service-kiro" \
--category-code "general-guidance" \
--communication-body "$(cat support-case-draft-v2.md)" \
--severity-code "low" \
--language "ja" \
--region us-east-1
なお、最初はカテゴリコードに日本語(「一般的なガイダンス」)を指定してValidationExceptionが発生しました。カテゴリコードは英数字とハイフンのみ使用可能です。
添付ファイルのアップロード
CSVファイル2件と画像ファイル1件を添付しました。
# CSVファイルの添付セットを作成
aws support add-attachments-to-set \
--attachments "data=fileb://user_report_202602100000.csv,fileName=user_report_202602100000.csv" \
--region us-east-1
# 同じセットに2つ目のCSVを追加(返却されたattachment-set-idを指定)
aws support add-attachments-to-set \
--attachment-set-id "返却されたID" \
--attachments "data=fileb://user_report_202602110000.csv,fileName=user_report_202602110000.csv" \
--region us-east-1
# ケースに添付コメントとして送信
aws support add-communication-to-case \
--case-id "case-XXXX" \
--communication-body "添付ファイル: user_report CSVファイル(2/10, 2/11)を添付します。" \
--attachment-set-id "返却されたID" \
--region us-east-1
画像ファイル(JPG)のアップロードでは、Kiroが生成したCLIコマンドで Invalid base64 エラーが発生しました。Kiroはすぐにboto3を使った代替スクリプトに切り替え、APIレベルではアップロードに成功しました。
import boto3, base64
with open('kiro_feb_graph.jpg', 'rb') as f:
file_data = base64.b64encode(f.read()).decode('utf-8')
client = boto3.client('support', region_name='us-east-1')
response = client.add_attachments_to_set(
attachments=[{'fileName': 'kiro_feb_graph.jpg', 'data': file_data}]
)
エラーが出ても自力でリカバリーしてくれるのはAIエージェントの強みです。
人間によるフォローアップ
Kiroによる起票後、筆者がAWSコンソールからケースの内容を確認しました。boto3でアップロードした画像ファイルがサポートケース上で正しく表示されなかったため、マネジメントコンソールから再送しました。原因はエンコード方式の問題と特定できたため、次回以降はスクリプト側で対処可能です。あわせて、背景・緊急度の補足も行いました。
起票プロセスで学んだこと
describe-servicesで利用可能なサービスコード一覧を取得できる- 添付ファイルは先にセットを作成してからケースに関連付ける
- CSVファイルはAWS Support側で
.txt拡張子が自動付与される - boto3の
dataパラメータにはバイナリをそのまま渡す。base64.b64encode()で明示的にエンコードすると二重エンコードになりファイルが破損する
サポートケースの結果
サポートへの確認を通じて、2/10のデータは異常値として分析対象から除外する判断ができました。
回答を受けた後、裏付けとして /usage 情報もKiro CLIからAWS CLIで追加送信し、ケースをクローズしました。
aws support resolve-case \
--case-id "case-XXXX" \
--region us-east-1
まとめ
Kiro CLIを使って、ログの異常値調査からサポートケースの起票・追加エビデンス送信・クローズまでを効率化できました。画像添付のエラーリカバリーや背景の補足など人間の介入が必要な場面もありましたが、大部分の作業をKiro CLIに任せることができています。
AWSサポート側でも、AI機能を活用した新しいサポートプランが発表されており、サポート分野でのAI活用が進んでいます。利用者側もKiroのようなAIエージェントを活用することで、調査・起票の品質と効率を上げていけるのではないでしょうか。
環境による制約について
本記事はAIエージェントサービスの社内評価専用環境で実践しています。本番環境で実施する場合は、組織のセキュリティポリシーとSCP設定を確認してください。
おまけ:Kiro CLIからの画像添付の正しい方法
今回boto3で画像をアップロードした際、サポートケース上で画像が表示されませんでした。原因はboto3の二重エンコードです。
boto3は data にバイナリ(bytes)を渡すと、内部で自動的にBase64エンコードしてAPIに送信します。Kiroが生成したスクリプトでは base64.b64encode() で明示的にエンコードしていたため、二重にエンコードされてファイルが破損していました。
正しくはバイナリをそのまま渡します。
import boto3
with open('kiro_feb_graph.jpg', 'rb') as f:
file_data = f.read() # バイナリのまま渡す
client = boto3.client('support', region_name='us-east-1')
response = client.add_attachments_to_set(
attachments=[{'fileName': 'kiro_feb_graph.jpg', 'data': file_data}]
)
Kiro CLIでサポートケースに画像を添付する際は、このパターンをプロンプトで指示するとスムーズです。
おまけ:カスタムエージェントでの起票文レビュー
Builders Flash記事を参考に、カスタムエージェント support-case-reviewer で起票文のレビューも試しました。
~/.kiro/agents/support-case-reviewer.json
~/.kiro/prompts/support-case-reviewer.md
今回はKiroの初版の下書きが高品質だったため、大きな修正は不要でした。重要なサポートケースや複雑な調査では、情報の反映漏れや追加ヒアリングによる時間ロスを避けるため、起票前にカスタムエージェントでレビューを実施するのも有効です。








