giip
SES案件登録
AI運用参照のみ自動化監査ログ監視TLSコストロールバック

AIが作ったアプリケーションを本番に載せるまでに必要な作業

公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13

結論

動くコードができた時点で終わっているのは機能の実装だけです。本番公開までには、環境分離、シークレットの外出し、認証と認可、入力検証とレート制限、ログのマスキング、監視のフック、マイグレーションと切り戻し手順、バックアップと復旧テスト、依存パッケージの脆弱性確認、CIでのテストとビルド再現性、デプロイと切り戻し手順、ドメインとTLS、コスト上限とアラート、運用ドキュメントが残ります。特に抜けやすいのはシークレットの外出しと切り戻し手順です。

この文書の適用条件

対象製品AI生成アプリケーション全般(言語・フレームワーク非依存)
確認バージョン製品バージョンに依存しない設計上の説明(コマンド例は npm 6 以降 / pip-audit 2 系を想定)
適用環境AWS、Azure、オンプレミス
必要権限リポジトリの読み取り権限。デプロイ設定の確認には各基盤の参照権限
実行影響参照のみ(本文中のコマンドはコードを変更しません)
再起動不要
最終検証日2026-08-13

そのまま実行できるコマンド

ハードコードされたシークレットを検出する参照のみ
対象
自組織のアプリケーションリポジトリ(言語不問)
権限
リポジトリの読み取り権限
変更作業
なし(検索のみ)
Production実行
該当なし(手元またはCIで実行)
# 対象: 自組織のアプリケーションリポジトリ(言語不問)
# 権限: リポジトリの読み取り権限
# 変更作業: なし(検索のみ)
# Production 実行: 該当なし(手元またはCIで実行)

# 1) 代表的なキー名に値が直接代入されていないかを探す
#    環境変数から読んでいる行は除外して、残ったものを目視で確認する
grep -rInE "(api[_-]?key|secret|password|passwd|token|access[_-]?key)[[:space:]]*[:=]" --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=vendor . | grep -vF -e "process.env" -e "os.environ" -e "getenv" -e ".example" -e ".sample"

# 2) 秘密鍵そのものが混入していないか
grep -rIn -- "-----BEGIN" --exclude-dir=.git .

# 3) 接続文字列の形(ユーザー名とパスワードが埋め込まれたURL)を探す
grep -rInE "(postgres|mysql|mongodb|redis|amqp)://[^:@/]+:[^@/]+@" --exclude-dir=.git .

# 4) 現在のコードから消しても履歴には残る。過去のコミットも確認する
git log --oneline -S "BEGIN PRIVATE KEY" | head -n 20

1つでも該当した場合、コードから消すだけでは不十分です。その鍵は漏えい済みとして扱い、失効と再発行を行ってください。履歴からの除去はリポジトリの書き換えを伴うため、共同作業者への周知が必要です。

依存パッケージの脆弱性を確認する参照のみ
対象
Node.js / Python のアプリケーションリポジトリ
権限
リポジトリの読み取り権限とパッケージレジストリへの通信
変更作業
なし(監査のみ。修正コマンドは含めていません)
Production実行
該当なし(CIまたは開発環境で実行)
# 対象: Node.js / Python のアプリケーションリポジトリ
# 権限: リポジトリの読み取り権限とパッケージレジストリへの通信
# 変更作業: なし(監査のみ)
# Production 実行: 該当なし(CIまたは開発環境で実行)

# Node.js: ロックファイルを基準に既知の脆弱性を照合する
npm audit --audit-level=high

# Python: requirements もしくはインストール済み環境を監査する
pip-audit -r requirements.txt

# コンテナで配布する場合は、ベースイメージ側のパッケージも別途監査対象になる
# (アプリの依存監査だけではOSパッケージの脆弱性は検出されない)

`npm audit fix` のような自動修正はここでは実行していません。メジャーバージョンが上がると挙動が変わる可能性があるため、CIのテストが通ることを確認してから適用してください。

結果の読み方

意味確認するポイント
環境分離(Dev / Stg / Prod)検証と本番が同じ資格情報・同じデータベースを共有していない状態本番のデータベースに開発端末から直接接続できないこと
シークレット管理鍵がコードではなく環境変数またはシークレットストアにある状態リポジトリ検索で鍵が0件。履歴にも残っていないこと
認証・認可誰がログインできるかと、ログイン後に何ができるかが分離されている状態他人のIDを指定したリクエストが拒否されること(水平権限の確認)
入力検証とレート制限想定外の入力と過剰なリクエストで壊れない状態型・長さ・範囲の検証があること。認証前のエンドポイントに上限があること
ログとマスキング調査に足るログが出て、個人情報や鍵が含まれない状態リクエストIDで追跡できること。パスワード・トークン・個人情報が出力されていないこと
エラーハンドリングと監視フック失敗が握りつぶされず、外部から観測できる状態未捕捉例外が通知に届くこと。ヘルスエンドポイントが依存先の異常を反映すること
マイグレーションと切り戻しスキーマ変更の適用手順と巻き戻し手順が対で存在する状態巻き戻しを検証環境で1度実行済みであること
バックアップと復旧テスト取得だけでなく復元まで確認済みの状態バックアップから復元して起動できることを確認した記録があること
依存パッケージの脆弱性既知の脆弱性が把握され、対応方針が決まっている状態監査コマンドの結果が記録され、未対応分に理由があること
CIの自動テストとビルド再現性同じコミットから同じ成果物が作れる状態ロックファイルが固定されていること。CIでテストとビルドが通ること
デプロイと切り戻し手順前のバージョンに戻す手順が文書化されている状態切り戻しの所要時間を実測した記録があること
ドメインとTLS証明書正規のドメインでHTTPSが成立し、更新が自動化されている状態証明書の期限と自動更新の成否が監視対象に入っていること
コスト上限とアラート想定外の課金が発生したときに気づける状態予算アラートが設定され、通知先が有効であること
運用ドキュメント担当者以外が起動・停止・調査できる状態起動手順、停止手順、よくある障害の対処が書かれていること

こういう状況で使います

  • ローカルでは動くのに、本番に載せる段になって何から手を付ければよいか分からない
  • 設定ファイルに本番のAPIキーが直接書かれている
  • 開発環境と本番環境が同じデータベースを見ている
  • エラーが起きても誰にも通知されず、ユーザーからの連絡で気づく
  • デプロイはできるが、前のバージョンに戻す手順が無い
  • 想定外のクラウド課金が月末に判明する

考えられる原因(可能性の高い順)

  1. 01

    生成の目的が「動くこと」に置かれている

    AIに与える指示は多くの場合「この機能を実装して」であり、環境分離や監視のフックは指示に含まれません。指示に無いものは出力にも含まれないため、機能以外が体系的に抜けます。

  2. 02

    サンプルコードの慣習をそのまま持ち込んでいる

    学習素材のサンプルは、簡潔さのために鍵を直書きし、エラー処理を省略し、単一環境を前提にしています。生成物がこの慣習を引き継ぐことがあります。

  3. 03

    運用要件が要求として書かれていない

    可用性、復旧目標、ログ保持期間、コスト上限が決まっていないと、実装のしようがありません。要件が無い状態では抜けを検出することもできません。

  4. 04

    本番と同等の検証環境が無い

    検証環境が無い、あるいは構成が本番と異なると、マイグレーションや切り戻しを試せません。試していない手順は本番で初めて失敗します。

確認手順

  1. 1

    リポジトリ内のシークレットを検索する

    参照のみ

    上記の grep コマンドで直書きされた鍵を洗い出します。検出された鍵は失効させることを前提にしてください。

  2. 2

    環境ごとの接続先を突き合わせる

    参照のみ

    各環境の設定ファイルまたは環境変数を並べ、データベース・外部API・ストレージの接続先が環境ごとに分かれているかを確認します。

  3. 3

    依存パッケージを監査する

    参照のみ

    `npm audit` または `pip-audit` を実行し、深刻度の高いものから確認します。

  4. 4

    認証が必要なエンドポイントを列挙して確認する

    認証トークンを付けずに各エンドポイントを呼び、意図せず公開されているものが無いかを確認します。検証環境で実施してください。

  5. 5

    検証環境でマイグレーションの巻き戻しを実行する

    適用と巻き戻しを一度通し、データの欠損が起きないかを確認します。本番では実施しないでください。

  6. 6

    バックアップから復元して起動する

    取得済みバックアップを別環境に復元し、アプリが起動して主要な操作ができることを確認します。

対応方法

すぐに実施できる低リスクの対応

  • 鍵を環境変数またはシークレットストアに移す

    コードから鍵を除去し、環境変数またはマネージドのシークレットストアから読むよう変更します。あわせて既存の鍵を失効・再発行します。

  • 本番と検証で資格情報を分ける

    同じ鍵を両環境で使い回している状態を解消します。分離することで、検証中の事故が本番へ波及しなくなります。

  • 未捕捉例外の通知先を設定する

    アプリケーションの例外がどこにも届かない状態を解消します。まず通知が届くことだけを確認します。

  • クラウドの予算アラートを設定する

    想定額を超えたときに通知が届くようにします。上限額の妥当性は運用しながら調整します。

事前検討が必要な変更

  • 環境をDev / Stg / Prodに分離する

    ネットワーク、資格情報、データを環境ごとに分けます。Stgは本番と同じ構成にすることで、マイグレーションと切り戻しの検証が意味を持ちます。

  • ログのマスキング方針を決めて適用する

    パスワード、トークン、個人情報をログに出さない共通処理を入れます。既存ログに含まれている場合は保持期間と削除方針も決めます。

  • CIで自動テストとビルドを固定する

    ロックファイルを固定し、同じコミットから同じ成果物が作れる状態にします。ビルドが再現できないと、切り戻し先の成果物も再現できません。

  • 切り戻し手順を文書化して実測する

    前のバージョンへ戻す手順を書き、検証環境で実行して所要時間を測ります。

  • TLS証明書の更新を自動化し監視する

    自動更新を設定したうえで、更新の成否と有効期限を監視対象に入れます。自動更新の設定だけでは失敗に気づけません。

再起動・サービス影響を伴う変更

  • リポジトリ履歴から鍵を除去する

    履歴の書き換えを伴い、既存のクローンやフォークとの整合が崩れます。共同作業者の合意と作業時間の確保が必要です。鍵の失効を優先し、履歴除去は後続作業として計画してください。

  • 本番データベースへのスキーマ変更を適用する

    テーブル定義の変更は取り消しが難しく、実行中はロックを伴う場合があります。適用前スナップショットと巻き戻し手順を用意してから実施してください。

!注意事項

  • コードから鍵を消しても、その鍵は既に漏えいしたものとして扱ってください。リポジトリの共有範囲やログに残っている可能性があります。失効と再発行が最優先です。
  • 本番データベースに対するマイグレーションは取り消しが難しい操作です。適用前のスナップショットと巻き戻し手順が揃うまで実行しないでください。
  • バックアップは取得しているだけでは機能しません。復元して起動できることを確認していないバックアップは、復旧手段として数えないでください。
  • `npm audit fix --force` のような自動修正はメジャーバージョンを上げる場合があります。CIのテストが通ることを確認してから適用してください。
  • ここに挙げた項目をすべて満たしても障害が起きなくなるわけではありません。目的は障害の根絶ではなく、起きたときに気づいて戻せる状態を作ることです。

バージョン・環境による違い

コンテナで配布する場合アプリの依存監査ではベースイメージのOSパッケージは対象外です。イメージスキャンを別途組み込んでください。
マネージドなPaaSに載せる場合TLS証明書の更新や基盤のパッチ適用が基盤側の責務になることがあります。責任分界点を確認し、自組織が担当する範囲だけを監視対象にしてください。
サーバーレスで動かす場合コスト上限の考え方が実行回数ベースになります。予算アラートに加えて、同時実行数の上限を設定できるかを確認してください。

これで解決しない場合に確認すること

  • 認証前に到達できるエンドポイントを数える

    ヘルスチェック以外に認証不要のエンドポイントが無いかを確認します。あればレート制限と入力検証を優先します。

  • ログに個人情報が含まれていないかをサンプリングで確認する

    直近のログを抽出し、メールアドレス・電話番号・トークンが出力されていないかを確認します。

  • 依存先の外部APIが落ちたときの挙動を確認する

    外部APIのタイムアウト時にアプリ全体が応答不能になっていないかを確認します。

  • 証明書の有効期限を監視対象に入れているか確認する

    自動更新の設定があっても、失敗時に気づく仕組みが無ければ同じ結果になります。

  • 担当者以外が起動・停止できるかを確認する

    手順書を渡して別の担当者に実行してもらい、書かれていない前提知識を洗い出します。

この文書の根拠と限界

一般的な技術説明

本記事は特定製品に依存しない一般的なリリース前の確認手順です。コマンド例は npm と pip-audit の公開仕様に基づきます。「GIIP対応範囲」の段落のみ GIIP 自身の運用手順の記述で、顧客事例ではありません。所要時間・削減率・障害率などの数値は検証できないため記載していません。

よくある質問

最初にやるべき項目はどれですか?

シークレットの外出しと環境分離です。この2つが未了だと、後続の作業中に本番へ影響が出る可能性があります。次に切り戻し手順で、これがあると以降の変更を試しやすくなります。

コードから鍵を消せば安全ですか?

いいえ。コミット履歴、CIのログ、共有されたコピーに残っている可能性があります。鍵は漏えい済みとして失効・再発行し、そのうえでコードと履歴の対処を進めてください。

小さなアプリでも Dev / Stg / Prod の3環境が必要ですか?

最低でも本番と非本番の2つは必要です。マイグレーションや切り戻しを試す場所が無いと、本番で初めて手順の不備が判明します。Stgを本番と同じ構成にできるなら3環境が望ましい形です。

AIに運用に必要なコードも書かせればよいのでは?

ログ出力やヘルスエンドポイントの実装は生成できます。ただし、通知を受け取る当番、承認の権限、コスト上限の妥当性といった判断は、コードの外側にあります。生成できる部分と決める部分を分けて進めてください。

脆弱性が大量に検出された場合はどうすればよいですか?

深刻度が高く、かつ外部から到達しうる経路で使われているものから対応します。すべてを同時に解消する必要はありませんが、未対応のものについては理由と再確認の時期を記録してください。

このチェックリストを満たせば本番で問題は起きませんか?

起きないとは言えません。目的は問題の根絶ではなく、問題が起きたときに気づける状態と戻せる状態を作ることです。

この文書がカバーする質問

  • AIアプリケーションのサービス化チェックリストが知りたい
  • AIが作ったコードを本番公開するには何が足りないのか
  • AI生成アプリのセキュリティで最初に確認すべきことは何か

リスク表示の意味

  • 参照のみデータと設定を変更しません。
  • 影響は限定的ですが、権限と負荷の確認が必要です。
  • 性能・ロック・コストに影響する可能性があります。
  • 障害・データ損失・復旧作業が発生する可能性があります。
  • 専門家レビュー必須本番適用前に別途レビューが必須です。

GIIPの対応範囲

上記の項目は、外部に委託せずに自組織で実施できます。判断が必要なのは、どの項目を今回のリリースまでに満たし、どれを次に回すかという優先順位付けです。GIIP では AI が生成したアプリケーションを本番へ載せる際、環境分離とシークレットの外出し、切り戻し手順の実測、監視の受け口の3点を先に満たしてから公開する運用にしています。優先順位の判断材料が足りない場合は、現在の構成を見たうえで不足箇所を整理することもできます。

執筆・技術検証

GIIP プロダクション運用チーム

大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。

関連するナレッジ

関連サービス

本番公開前の不足項目を洗い出す

同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。

本番公開前の不足項目を洗い出す

ナレッジベース一覧へ