はじめに
生成系AIを業務利用するための取り組み(準備編)に引き続き、弊社で生成AIを利用するための実装編をまとめます。 生成AI利用環境はAWSから提供されているgenerative-ai-use-cases-jp のリポジトリをフォークして「GenU」と呼ばれるアプリケーションを構築しています。 ゼロから作った箇所はありませんが、カスタマイズした点について記載します。

目次
- はじめに
- 目次
- 変更点の概要
- カスタムドメインの設定
- AWS CDKを用いた導入
- 社内VPNのみにアクセスを制限
- CloudFrontのIPv6を無効化
- Amazon Kendraを無効化
- 社内IdP(HENNGE)と連携しSSOを設定
- GitHub Actions を用いた CI/CD の自動化
- まとめ
変更点の概要
generative-ai-use-cases-jp のリポジトリはREADMEに従ってデプロイするだけで、簡単に生成AI利用環境を構築できますが、 既存の社内セキュリティポリシーや認証要件に合わせて、以下のカスタマイズを行いました。
- カスタムドメインの設定
- AWS CDKを用いた導入
- 社内VPNのみにアクセスを制限
- CloudFrontのIPv6を無効化
- Amazon Kendraを無効化
- 社内IdP(HENNGE)と連携しSSOを設定
カスタムドメインの設定
CloudFrontとAPI Gatewayでカスタムドメインを設定することで呼称を統一し、セキュリティ強化を図りました。
なお、カスタムドメインを設定する際はpackages/cdk/cdk.jsonを編集しますが、適用対象はCloudFrontのみとなりAPI Gatewayは別途対応が必要となります。
cf. カスタムドメインの使用
AWS CDKを用いた導入
AWS CDK (Cloud Development Kit) を使用し、インフラをコードベースで管理できるようにしました。 これにより、リポジトリ内でリソース構成を統一的に管理できるようになりました。 Lambda, API Gateway, S3, CloudFront, DynamoDB などの全てのリソースをCDKで管理しています。 workshopではCloudFormationからデプロイする方法も提示されていますが、バージョン管理やアプリケーションとの関連性も踏まえてCDKとしています。
社内VPNのみにアクセスを制限
業務利用を想定し、社外からのアクセスを制限する設定を行いました。 各リソースへのアクセスをWAFでIP制限し、VPN 内からのみ許可しています。
CloudFrontのIPv6を無効化
社内VPN環境との競合を防ぐため、CloudFrontのIPv6を無効化しました。
packages/cdk/lib/construct/web.ts内で以下の設定を追加しています。
cloudFrontDistributionProps: {
enableIpv6: false, // ipv6を無効化
errorResponses: [
Amazon Kendraを無効化
コスト削減のため、初期構築時はAmazon Kendra を使用しない構成に変更しました。
その後PoC検証のために再度有効化しましたが、コスト削減のためKendraのインデックスを自動で作成・削除するスケジュールを設定しています。
cf. Kendraのインデックスを自動で作成・削除するスケジュールを設定する
社内IdP(HENNGE)と連携しSSOを設定
社内のIDプロバイダー (HENNGE) と連携し、SAML認証によるSSO (シングルサインオン) を実装しました。 README には HENNGE 向けの具体的な手順は記載されていませんでしたが、適宜読み替えることで問題なく設定できました。
cf. SAML 認証
GitHub Actions を用いた CI/CD の自動化
今後、複数人でリリースサイクルを回すことを想定してGitHub Actions を利用し、PR 作成時と Merge 時に自動的にデプロイを実行する仕組みを構築しました。
実装内容
- PR 作成時に
cdk diffを実行し、変更点を確認 - Merge された際に
cdk deployを実行し、自動デプロイ
name: CDK Deploy and Diff Check on: push: branches: - main pull_request: types: [opened, synchronize, reopened] permissions: id-token: write contents: write pull-requests: write jobs: CDK_Deploy_Diff: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '18' - name: Install dependencies run: npm install - name: Install AWS CDK run: npm install -g aws-cdk - name: Configure AWS Credentials id: assume_role uses: aws-actions/configure-aws-credentials@v4 with: aws-region: 'xxxxxx' role-to-assume: 'xxxxxx' role-session-name: Github-Actions - name: Deploy CDK run: npm run cdk:deploy_auto_require - name: Diff Check if: github.event_name == 'pull_request' run: npm run cdk:diff
まとめ
以上の実装により、業務利用に適した形で GenU を導入し、アクセス制限・認証・CI/CD の仕組みを整えました。 GenU 自体は非常に使いやすいアプリケーションとして実装されていると感じています。
また、GenU はサーバーレスを主体とした基本的な Web アプリケーションの機能が一通り構築されているため、生成 AI に限らず、さまざまな実装の参考になる点が多いと感じました。
現在、i-plug では Amazon Bedrock をベースとした GenU を社員向けに公開し、実際の業務利用を開始しています。 今後も日々変化する生成 AI の開発状況に対応し、より最適な環境を選択していきたいと考えています。