皆さん、Generative AI Use Case JP (GenU) は使っていますでしょうか。

本記事では、インフラエンジニア目線で見る、GenUデプロイ時に設定推奨なセキュリティ項目をご紹介します。
※2025/5/9時点の情報で執筆しています。最新情報はGenUのGithubドキュメント等を参照ください。

生成AIのWebチャットアプリケーションを社内で使いたい。でもモデルへの再学習やデータ漏洩が心配…。
そんな方へ最適なものとして、AWS Japan の有志皆さんが中心に開発しているオープンソースの生成AIアプリケーションとして提供されています。

SaaS型のアプリケーション導入では、セキュリティ監査要件が厳しく導入を諦めるケースが多々あります。

GenUにおいては自身のAWS環境にCDKでアプリケーションをデプロイするため、Amazon Bedrock 経由の入出力内容がモデルに再学習されず監査要件に合わせた構築が可能です。

Q. AWS とサードパーティーのモデルプロバイダーは、Amazon Bedrock への顧客の入力または Amazon Bedrock からの出力を使用して、Amazon Nova、Amazon Titan またはサードパーティーのモデルをトレーニングすることはありますか?
A. いいえ。AWS およびサードパーティーのモデルプロバイダーは、Amazon Bedrock への入力または Amazon Bedrock からの出力を使用して、Amazon Nova、Amazon Titan またはサードパーティーのモデルをトレーニングすることはありません。
引用:https://aws.amazon.com/jp/bedrock/faqs/

GenUをデプロイする際、デフォルト設定でも最低限としてhttps通信はされています。
さらに、様々なオプション設定もGenUには用意されているため、よりセキュリティを高めることが可能です。

デフォルト設定では勿体ない!
せっかく用意頂いているオプション設定ですので、全力で活用していきましょう。

設定概要

設定オススメ項目として下記4つを紹介します。

  • 無料
    • 【優先:高】サインアップできるメールアドレスのドメインを制限する
  • 有料
    • 【優先:中】AWS WAF による制限を有効化する
      • IP アドレスによる制限
      • 地理的制限
        • 金額: 約$12/月(約$6/月 *2リージョン + $0.6/100万Request)
          • 有効化が1つでも2つでも発生する基本料金は同じです。
          • フロントエンド、バックエンド用に2つのWAFが作成されます。
    • 【優先:低】Route53 ドメイン有効化
      •  カスタムドメインの使用
        • 金額:取得ドメイン料 + $0.4/100万クエリ

コード修正箇所

CDKでデプロイの際に下記ファイルの該当箇所を修正します。

  • ファイル名:generative-ai-use-cases/packages/cdk/cdk.json
  "context": {
    // サインアップできるメールアドレスのドメインを制限する
    "allowedSignUpEmailDomains": ["iret.co.jp"],

    // AWS WAF > IP アドレスによる制限
    "allowedIpV4AddressRanges": [
        "xx.xx.xx.xx/32",
        "yy.yy.yy.yy/32"
      ],

    // AWS WAF > 地理的制限
    "allowedCountryCodes": ["JP"],

    // Route53 > カスタムドメインの使用
    "hostName": "hogehoge",
    "domainName": "example.com",
    "hostedZoneId": "パブリックホストゾーンID",
  }

設定項目の解説

ここからは各項目を有効化するとどのような設定がされるかの紹介となります。

Cognito:サインアップできるメールアドレスのドメインを制限する

構築したWebアプリケーションのユーザ登録制御です。
登録可能なメールアドレスのドメインに制限をかけておきましょう。

有効化すると下図のように「Amazon Cognito > 拡張機能 > Lambdaトリガー」にLambdaが追加されます。

※無料と記載しましたが、正確にはLambda関数が起動された際に発生する金額が発生します。
※Lambdaには無料利用枠があるため、無料利用枠内であれば金額は発生しません。

今回の例では「@iret.co.jp」のメールアドレスのみが、構築したGenUに対してユーザ登録可能な設定となります。
各自、設定したいドメインを設定しましょう。

WAF:IP アドレスによる制限 / 地理的制限

※IPアドレス制限、地理的制限どちらを有効化しても基本金額は同じく 約$12/月 が発生します。

AWS WAFで利用可能なIPアドレス / 地理的制限を設定しましょう。
Webアプリケーションにアクセス可能なIPアドレスや国を設定できます。

RAGなどの情報で社内環境からのアクセスに制限したい要件がある際に利用します。
また、IP制限が出来ない場合においても、海外からの不正アクセスを防止するためにアクセス可能な国を絞ることは重要です。

有効化すると下記3つのリソースにWAFが設定されます。

  • CloudFront > ディストリビューション > セキュリティ > ウェブアプリケーションファイアウォール (WAF) 
  • Cognito > セキュリティ:AWS WAF > 関連付けられたウェブ ACL
  • API Gateway > API > ステージ > api > ウェブACL

今回の例では「”xx.xx.xx.xx/32″,”yy.yy.yy.yy/32″」のIPアドレスのみ許可、「日本」からのアクセスのみ許可としています。
各自制限したいIP、国について設定を行います。

※指定する国の Country Code はISO 3166-2 from wikipediaを参照ください。

Route53:カスタムドメインの使用

GenUのアクセスするURLを独自ドメインに設定します。

GenUのデフォルト設定ではCloudFrontで設定されたドメインへアクセスすることになります。
特にセキュリティ観点で懸念はありませんが、複数環境構築した際にどの環境へアクセスしているか分からないなどヒューマンエラーに繋がるケースが考えられます。

Route53にパブリックドメインを有効化、もしくは取得する必要がありますが取得可能であれば設定すると良い項目になります。

  • 注意事項
    • サブドメインの設定が必要
      • OK:hogehoge.example.com
      • NG:example.com
    • 同一アカウント上のRoute53 > パブリックドメインに登録されている必要がある
      • 他アカウントやACM登録時に手動認証されている場合は独自開発が必要

パブリックホストゾーンへの登録やドメイン取得に関しては公式ドキュメント等を参照下さい。

設定を有効化すると下記のリソースが設定されます。

  • AWS Certificate Manager (ACM) > 証明書
  • Route53 > 該当ホストゾーン > ACMのCNAME登録 / CloudFront用Aレコード登録
  • CloudFront > ディストリビューション > 一般 > 代替ドメイン名 / カスタムSSL証明書

※本設定は全て「バージニア北部リージョン」で登録されます。
※確認時はリージョンが「バージニア北部」か事前に確認ください。

画像内ではテストで取得した「.click」のドメインにカスタムドメインを設定しました。

以上が最低限設定したほうが良いセキュリティ設定の紹介となります。

最後に

今回の設定でGenUをもっとセキュアに使うことが出来ます。
WAFやRoute53で利用料が追加となるものの、コスト許容範囲であればぜひ有効化してみてください。

GenUのオプション設定で可能なため、CDKのjsonファイルを一部修正するのみで簡単に実装できます!

また、今回紹介してませんが「Amazon Bedrock Guardrails」の有効化も、生成AIの出力においてデータ漏えいを防げる項目となります。設定される項目も下記のように日本語で有効となるものが設定されるようです。

デフォルトで適用されるガードレールは機微情報フィルターで日本語での会話の中で効果があったものを適用しています。他にも単語フィルターのカスタム、機微情報フィルターの正規表現は機能することを確認しており、必要に応じて、packages/cdk/lib/construct/guardrail.ts を修正してください。詳細はGuardrails for Amazon BedrockCfnGuardrailをご参照ください。

引用:デプロイオプション > ガードレール

生成AIの利用において、GenUは非常に導入しやすいものとなりますため、使い倒していきましょう!