AWS DevOps Agent から DynamoDB に直接クエリできるか試してみた

AWS DevOps Agent から DynamoDB に直接クエリできるか試してみた

AWS DevOps Agent の調査中に DynamoDB へ直接クエリを実行してみました。結果的に実現できなかったので、その原因と調査内容を共有します。
2026.03.14

こんにちは、リテールアプリ共創部のヒョンジェです。

今回は AWS DevOps Agent の調査の中で DynamoDB にクエリを直接実行できるか試してみました。結論から言うと現時点では実現できませんでしたが、その過程で得られた知見を共有します。

※ DevOps Agent の基本的な内容についてはこちらの関連ブログ一覧をご覧ください。

実現したかったこと

Untitled_New_Diagram_-_Cacoo

上記のようなサーバーレス構成の API を運用しています。この API で障害が発生したとき、「影響を受けたユーザーは誰なのか?」を調べるのが毎回なかなか大変でした。CloudWatch Logs を開いて、該当するエラーログを探して、リクエストの中身からユーザー情報を紐づけて......と、手作業でやるとかなり時間がかかります。

「これ、DevOps Agent に自動でやらせたら楽なのでは?」と思い立ったのが今回のきっかけです。

API のログにはユーザーを特定できる情報が含まれているので、それを元に DynamoDB の UserTable を検索してユーザー ID を取得する、という流れを想定していました。

やったこと

0. DevOps Agent の構成

Untitled_New_Diagram_-_Cacoo

まず、API の障害を検知する CloudWatch Alarm が発生したら、DevOps Agent の調査を開始する仕組みを構築しました。

※ 以下のブログを参考

https://dev.classmethod.jp/articles/aws-devops-agent-cloudwatch-automated-incident-investigation/

1. DevOps Agent の Skill を作成

次に DevOps Agent の Agent Space に「ログからユーザー ID を抽出する手順」を教えるための Skill を作成しました。

tokyu-dev-ops-agent-space-test_-_AWS_DevOps_Agent

Skill には以下のようなロジックを定義しています。

  1. CloudWatch Logs からエラーに関連するログを取得
  2. ログに含まれる情報で UserTable を検索し、ユーザー ID を取得
  3. もし UserTable で直接見つからない場合は、別テーブルを経由して検索

2. 調査指示の設定

次に、DevOps Agent が調査を開始する際に「影響を受けたユーザーの ID リストを報告すること」を指示として設定しました。

※ Lambda から Webhook URL にリクエスト時に渡す description

descriptionLines.push(`Reason: ${reason}`);
descriptionLines.push(`alarmArn: ${alarmArn}`);
descriptionLines.push(`Alarm trigger: ${trigger}`);
descriptionLines.push('全ての調査報告は日本語でしてください。');
descriptionLines.push('影響を受けたユーザーの ID リストを報告してください。')

3. 試してみた

準備が整ったので、意図的にエラーを発生させて DevOps Agent に調査させてみました。

tokyu-dev-ops-agent-space-test_-_AWS_DevOps_Agent

タイムラインを見ると、DevOps Agent はちゃんと Skill を参照して、ユーザー ID を取得しようと動いてくれていました。

tokyu-dev-ops-agent-space-test_-_AWS_DevOps_Agent

しかし、DynamoDB 読み取りの権限が不足しているため、データの取得に失敗してしまいました。

4. IAM ロールに DynamoDB 権限を追加

権限不足で失敗したため、Agent Space に紐づく IAM ロールに、DynamoDB の QueryGetItemScan の権限をインラインポリシーとして追加しました。

new iam.PolicyStatement({
  sid: 'AllowDynamoDBReadAccess',
  effect: iam.Effect.ALLOW,
  actions: ['dynamodb:Query', 'dynamodb:GetItem', 'dynamodb:Scan'],
  resources: [
    `arn:aws:dynamodb:ap-northeast-1:${this.account}:table/*`,
  ],
}),

5. 再実行

権限を追加したので DevOps Agent に再調査の依頼をしましたが、同じく権限不足で失敗しました。

tokyu-dev-ops-agent-space-test_-_AWS_DevOps_Agent

タイムラインのメッセージを見ると Session Policy について書かれていました。

no session policy allows the dynamodb:<operation> action

IAM ロールの権限ではなく、Session Policy が原因でした。

Session Policy とは

DevOps Agent が IAM ロールを Assume する際、AWS 側で内部的に Session Policy が適用されます。最終的に DevOps Agent が持つ権限は以下のように決まります。

最終的な権限 = ロールの権限 ∩ Session Policy

つまり、IAM ロールに DynamoDB の権限を追加しても、Session Policy 側で DynamoDB のアクションが許可されていなければ、アクセスは拒否されます。

そして、現時点では DevOps Agent がプレビュー版ということもあり、この Session Policy をユーザー側で設定・変更する手段は提供されていないようでした。

※ Session Policy の詳細

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies.html

6. Lambda 経由のアプローチも検討

直接 DynamoDB からデータを取得することができないなら、調査の中で Lambda を実行し、その Lambda から DynamoDB にアクセスすることも考えました。

しかし、マネージドポリシーの AIOpsAssistantPolicy に Lambda の InvokeFunction 権限が含まれていないため、Session Policy にも含まれていない可能性が高く、こちらも断念しました。

まとめ

残念ながら、DevOps Agent から DynamoDB に直接アクセスしてユーザー情報を取得することは、現時点では実現できませんでした。

ただ、個人的にはこの制限は妥当だと感じました。DynamoDB には個人情報が保存されているケースも多く、AI エージェントが自由にアクセスできてしまうのはセキュリティ上のリスクがあります。Session Policy によるガードレールは、適切な設計と言えるのかなと思います。

現時点で影響を受けたユーザーの ID を DevOps Agent に報告させるなら、API のログ自体にユーザー ID を含めておくのが一番現実的な方法だと思います。こうすれば DevOps Agent が CloudWatch Logs から直接ユーザー ID を読み取れるため、DynamoDB へのアクセスも不要になります。

まだ DevOps Agent はプレビューなので、今後のアップデートで DynamoDB からデータを取得するのが実現できる可能性はあると思います。引き続きアップデートを追っていきたいと思います。

最後まで読んでいただき、ありがとうございました。

この記事をシェアする

FacebookHatena blogX

関連記事