こんにちは、LayerX AI・LLM事業部の篠塚(@shinofumijp)です。エンジニアリングマネージャーとして生成AIプラットフォーム「Ai Workforce」の開発に携わっております。 Ai Workforce はすでにエンタープライズのお客様の実業務で稼働しており、「企業と成長を共にする AI プラットフォーム」を掲げて日々改善を続けています。
エンタープライズ環境でプロダクトを提供するには、それ相応の運用水準を満たすことが不可欠です。
「セキュリティや運用は Ops チームに任せ、Dev は機能開発に専念」という分業だけでは立ち行かず、DevとOpsが初期フェーズから協調するDevOpsの進め方 が、品質向上とデリバリー高速化の両面でスタンダードになりつつあります。
もっとも、スタートアップでは人員・時間ともに限られています。開発者全員がすべてのセキュリティ・運用要件・関連する法令を把握した上で実装を開始することが理想ですが、現実には優先順位をつけながら漸進的にアップデートしていくしかありません。
そこで本記事では、私たちが「ゼロからプロダクトを立ち上げ、エンタープライズへ展開する中で実践してきたこと」のうち最初から入れておいて良かったもの、やっておけば楽だったと感じたものを、アプリケーション開発者視点で最低限押さえておきたいTipsとしてまとめました。
0. 大前提:バージョン管理とCI
モダンな開発現場でバージョン管理とCIを導入していないことは考えづらいですが、コードレビュー、変更に承認を必須とするプロセス、構成変更の自動化は行なっておくことはほぼ必須と言えます。
1. 重要操作の監査ログ出力
エラー通知や障害対応のためにエラーログや、バッチ処理等の進捗把握のためのログ出力は行なっていると思います。
それらのログに加えて、ISO27001やSOC2の監査でも重要になるのが「追跡可能な監査証跡があるか」です。ログには「いつ」「誰が」「何の操作を」行ったかがわかる情報を含めるようにします。共通ミドルウェアで JSON ログに統一し、改ざん防止+SIEM 連携を前提に設計すると良いでしょう。
重要操作の例としては「アカウント権限の変更」「アカウントの作成、削除」「ログイン・ログアウト」「ファイルのアップロード・ダウンロード」「重要なデータへのアクセス」などです。
# 監査ログ出力のPythonでの実装イメージ def change_user_role(actor_user: User, target_user: User, new_role: str): old_role = target_user.role # 権限変更処理 target_user.role = new_role # 監査ログの出力 audit_log = { "timestamp": datetime.utcnow().isoformat() + "Z", "action": "CHANGE_USER_ROLE", "actor": { "id": actor_user.id, "name": actor_user.name, "role": actor_user.role }, "target": { "id": target_user.id, "name": target_user.name, "old_role": old_role, "new_role": new_role }, "outcome": "success" } logger.info(json.dumps(audit_log))
2. ID棚卸し支援のためのCSV出力機能
ID棚卸しとは、システムに登録されている全ユーザーアカウントとその権限が適切かを定期的に確認する内部統制プロセスです。管理者がシステム内の全アカウント情報をCSVファイルなどでエクスポートできる機能を用意しておくと便利です。
CSVにユーザーID、氏名、メールアドレス、所属(テナントや部署)、付与権限、最終ログイン日時などを含めて出力し、それを用いて各担当者が「このアカウントはまだ有効か?権限は適切か?」をレビューできるようにします特権アカウントも一般アカウントも漏れなく出力することで網羅性を担保し、内部監査や第三者監査にも必要な証跡をすぐ提示できるようになります。
エクスポートされたCSVは内部統制担当者や各部門長に配布し、例えばExcel上で「不要なアカウントがないか」「権限が職務に照らして適切か」をチェックしてもらう運用を想定しています。なお、CSV出力時にはパスワードのハッシュ値や二要素認証シークレットなどセキュリティ上不要な機密データは含めないように留意しましょう。必要なのはアカウント識別と権限情報程度で十分です。
3. アクセス制御と権限分離
多くのSaaSサービスでアクセス制御は最も頭を悩ませることの1つなのではないでしょうか?
アプリケーション、ユースケース、利用ドメインにも依るので一概に権限設計についての解を出すことはできませんが、RBAC / ABACなどのどの方式を採用するにしても権限昇格は承認付きにし、操作と変更はすべて監査ログへといった実装が必須となります。
権限付与の承認についてはアプリケーションでも実装するべきですが、クラウドの構成変更や保守作業のための一時的な権限昇格についても申請と承認を必須とした運用プロセスを構築しておくことが望ましいです。
参考: Privileged Identity Management とは? - Microsoft Entra ID Governance
4. データ保管国の把握
データベースやBlobストレージなどにデータを保管する際にはどの国に保管されるかを把握しておく必要があります。保存されたデータはデータ保管国における現地法の適用対象となるため、可能な限り国内リージョンにデータを保存しておくとプロダクト導入がスムーズになります。
開発者としてはさまざまなクラウド技術を試したいところですが、ストレージ等の技術選定時には国内リージョンに対応しているかをまずは把握することを推奨します。
データ保管国の把握と公開はISO27017監査でも必須となります。
参考: Ai Workforce セキュリティホワイトペーパー
5. SREや情報システム部門との密な協力関係の構築
エンタープライズ向けアプリケーションの構築にはセキュリティ体制の構築、監視、信頼性向上施策など、開発だけで太刀打ちすることが難しい課題も多くあります。
私自身も社内のSRE、コーポレートエンジニアリング室、お客様のCCoE(Cloud Center of Excellence)部門に大いに助けられたおかげで素早いプロダクト立ち上げならびに導入が進んだと感じております。
まとめ
スタートアップがエンタープライズ向けプロダクトを開発する際には「スピードを落とさずに安心して伸ばせる土台」をいかに早く整えるかが勝負所です。
今回ご紹介した施策は、つい後回しにしてしまったり、開発初期に必要と認識していなかったようなものが多いかと思います。あらかじめ開発内容として把握して対応することで、監査対応や大規模顧客の導入審査がスムーズになり、開発者が本来の価値提供に集中できるようになります。
最後に
LayerX AI・LLM事業部では歴史あるエンタープライズのお客さまの課題をLLMを用いて解決するチャレンジを共にする仲間を募集しています。
直近では以下のチャレンジに取り組んでいます。ご興味ある方は他の記事を読んでみてください。
少しでも興味を持っていただけた方はぜひカジュアル面談でお話ししましょう。
AI・LLM事業部の事業、プロダクト、組織、技術について話します
---
Xの@LayerX_techアカウントではLayerXの様々な取り組みを発信していますので、是非こちらもフォローしてください。