Skip to content

chapter9_security

icoxfog417 edited this page Nov 26, 2025 · 1 revision

Genu(ジェニュー)完全ガイド - 第9章:セキュリティとアクセス制御

9.1 セキュリティの概要

Genuは企業や組織での利用を想定しており、セキュリティとアクセス制御が重要な要素となります。

9.1.1 セキュリティの重要性

検証環境vs本番環境

  • 検証環境:インターネットからアクセス可能、セルフサインアップ有効でも問題なし
  • 本番環境:社内データを活用する場合、適切なアクセス制御が必須

主要なセキュリティ対策

  1. IPアドレス制限:特定のIPアドレスからのみアクセス許可
  2. サインアップ制御:管理者のみがアカウントを作成
  3. 認証と認可:適切なユーザー管理
  4. データ暗号化:転送時と保管時の暗号化
  5. 監査ログ:アクセスと操作の記録

9.1.2 Genuのセキュリティアーキテクチャ

主要コンポーネント

  • Amazon Cognito:ユーザー認証
  • AWS WAF:Webアプリケーションファイアウォール
  • CloudFront:コンテンツ配信とセキュリティ
  • IAM:AWSリソースへのアクセス制御
  • S3暗号化:データの暗号化保管
  • CloudTrail:監査ログ

9.2 IPアドレス制限

9.2.1 IPアドレス制限の概要

デフォルトでは、Genuはインターネット上どこからでもアクセスできます。本番環境では、特定のIPアドレス(例:企業の拠点)からのみアクセスを許可することを推奨します。

実装方法: AWS WAF(Web Application Firewall)を使用して、特定のIPアドレス以外からのアクセスをブロックします。

9.2.2 AWS WAFとは

AWS WAFは、Webアプリケーションの通信内容を検査し、不正な通信を遮断するセキュリティ機能です。

主な機能

  • IPアドレスベースのアクセス制御
  • 地理的制限(国単位)
  • レート制限(DDoS対策)
  • SQLインジェクション対策
  • XSS(クロスサイトスクリプティング)対策

9.2.3 IPアドレス制限の設定手順

CDKを使用した設定

cdk.jsonの編集

{
  "context": {
    "allowedIpV4AddressRanges": [
      "203.0.113.0/24",
      "198.51.100.0/24"
    ],
    "allowedIpV6AddressRanges": [
      "2001:db8::/32"
    ]
  }
}

CIDR表記の例

  • 単一IP:203.0.113.10/32
  • サブネット:203.0.113.0/24(203.0.113.0 〜 203.0.113.255)
  • 広範囲:203.0.113.0/16(203.0.113.0.0 〜 203.0.113.255.255)

自分のIPアドレスを確認

curl https://checkip.amazonaws.com

デプロイ

設定後、デプロイして反映:

npm -w packages/cdk run -- cdk deploy --require-approval never --all

動作確認

  1. 許可されたIPからアクセスして、正常に動作することを確認
  2. 許可されていないIP(例:スマートフォンのモバイル回線)からアクセスして、ブロックされることを確認

9.2.4 CloudFormationを使用した設定

CloudFormationでデプロイした場合、WAFを手動で設定します。

手順

  1. WAFコンソールを開く

  2. Web ACLを作成

    • リージョン:CloudFrontの場合は「Global (CloudFront)」
    • Associated AWS resources:CloudFrontディストリビューションを選択
  3. IPセットを作成

    • 許可するIPアドレスを登録
  4. ルールを作成

    • IPセットに含まれるIPは許可
    • それ以外はブロック
  5. Web ACLに関連付け

    • CloudFrontディストリビューションに適用

9.2.5 注意事項

動的IPアドレスの問題

  • 企業の固定IPアドレスがない場合、VPNソリューションを検討
  • リモートワーカーのアクセスには、VPN経由を必須とする

緊急時のアクセス

  • 管理者用の緊急アクセス方法を確保
  • AWS Consoleから直接WAFルールを変更可能

複数拠点の管理

  • 本社、支社、データセンターなど、すべての拠点のIPを登録
  • 定期的にIPリストを見直し

9.3 サインアップの無効化

9.3.1 セルフサインアップの問題点

デフォルトでは、ユーザーが自分でアカウントを作成できる「セルフサインアップ」が有効です。

検証環境での利点

  • 簡単にアカウント作成可能
  • 複数ユーザーでのテストが容易

本番環境でのリスク

  • 不正なユーザーがアカウントを作成できる
  • 社内データへの不正アクセスのリスク
  • コンプライアンス違反の可能性

9.3.2 サインアップ無効化の設定

CDKを使用した設定

cdk.jsonの編集

{
  "context": {
    "allowSelfSignUp": false
  }
}

デプロイ

npm -w packages/cdk run -- cdk deploy --require-approval never --all

CloudFormationを使用した設定

CloudFormationでデプロイした場合、Cognitoコンソールから手動で設定します。

手順

  1. Cognitoコンソールを開く
  2. User Poolを選択
  3. サインアップ設定を編集
  4. 「Allow users to sign themselves up」を無効化
  5. 変更を保存

9.3.3 管理者によるアカウント作成

サインアップを無効化した後は、管理者がアカウントを作成します。

単一アカウントの作成

AWSコンソールから

  1. Cognitoコンソールを開く
  2. User Poolを選択
  3. 「Create user」をクリック
  4. ユーザー情報を入力:
    • Username(メールアドレス)
    • Email(メールアドレス)
    • Temporary password(一時パスワード)
  5. 「Send an email invitation」を選択
  6. 作成をクリック

AWS CLIから

aws cognito-idp admin-create-user \
  --user-pool-id ap-northeast-1_XXXXXXXXX \
  --username user@example.com \
  --user-attributes Name=email,Value=user@example.com \
  --message-action SUPPRESS

一括アカウント作成

複数のアカウントを一度に作成する場合、スクリプトを使用します。

CSVファイルの準備(users.csv)

email
user1@example.com
user2@example.com
user3@example.com

バッチ作成スクリプト(Bash)

#!/bin/bash
USER_POOL_ID="ap-northeast-1_XXXXXXXXX"

while IFS=',' read -r email
do
  if [ "$email" != "email" ]; then
    echo "Creating user: $email"
    aws cognito-idp admin-create-user \
      --user-pool-id $USER_POOL_ID \
      --username $email \
      --user-attributes Name=email,Value=$email \
      --message-action SUPPRESS
  fi
done < users.csv

9.3.4 招待メールのカスタマイズ

デフォルトの招待メールは英語です。日本語にカスタマイズできます。

手順

  1. Cognitoコンソールを開く
  2. User Poolを選択
  3. 「Messaging」→「Email」を選択
  4. 「Invitation message」を編集

カスタマイズ例

件名:[アプリケーション名]へようこそ

本文:
{username}様

[アプリケーション名]のアカウントが作成されました。

以下の情報でログインしてください:

ユーザー名:{username}
一時パスワード:{####}

初回ログイン時に新しいパスワードの設定が必要です。

ログインURL:https://your-app-url.cloudfront.net

ご不明な点がございましたら、IT部門までお問い合わせください。

9.4 その他のセキュリティ設定

9.4.1 パスワードポリシー

強固なパスワードポリシーを設定します。

Cognitoでの設定

  1. User Poolを選択
  2. 「Password policy」を編集
  3. 以下を設定:
    • 最小文字数:8文字以上(推奨:12文字以上)
    • 大文字を要求
    • 小文字を要求
    • 数字を要求
    • 特殊文字を要求
    • 一時パスワードの有効期限:7日間

9.4.2 多要素認証(MFA)

より高いセキュリティが必要な場合、MFAを有効化します。

MFAの種類

  • SMS MFA:携帯電話にコードを送信
  • TOTP MFA:Google Authenticatorなどのアプリを使用

有効化手順

  1. Cognitoコンソールを開く
  2. User Poolを選択
  3. 「MFA」設定を編集
  4. 「Required」または「Optional」を選択

推奨設定

  • 一般ユーザー:Optional(ユーザーが選択可能)
  • 管理者:Required(必須)

9.4.3 セッションタイムアウト

セキュリティを強化するため、セッションタイムアウトを設定します。

設定項目

  • Access Token有効期限:デフォルト60分
  • ID Token有効期限:デフォルト60分
  • Refresh Token有効期限:デフォルト30日

推奨設定

Access Token: 60分(通常業務)または15分(高セキュリティ)
Refresh Token: 7日(定期的な再認証を促す)

9.4.4 データの暗号化

転送時の暗号化

すべて自動的に有効

  • HTTPS通信(TLS 1.2以上)
  • CloudFront→Lambda間の通信
  • Lambda→Bedrock間の通信

保管時の暗号化

S3

  • デフォルトで暗号化有効
  • SSE-S3またはSSE-KMSを使用

DynamoDB(使用する場合):

  • AWS管理キーで自動暗号化

OpenSearch Serverless(Knowledge Bases使用時):

  • 自動的に暗号化

9.4.5 監査ログ

CloudTrail

すべてのAPI呼び出しを記録します。

有効化

  1. CloudTrailコンソールを開く
  2. 新しいトレイルを作成
  3. すべてのリージョンのイベントを記録
  4. S3バケットにログを保存

記録される情報

  • 誰が
  • いつ
  • 何を実行したか
  • 結果はどうだったか

CloudWatch Logs

Lambda関数のログを記録・分析します。

ログの確認

aws logs tail /aws/lambda/GenerativeAiUseCasesStack-XXX --follow

アラート設定

  • エラー率が閾値を超えた場合
  • 特定のエラーメッセージが出現した場合
  • 異常なアクセスパターンを検出した場合

9.5 コンプライアンスとガバナンス

9.5.1 データレジデンシー

リージョンの選択: データの保管場所に関する法規制がある場合、適切なリージョンを選択します。

日本の企業の場合

  • ap-northeast-1(東京)を推奨
  • データは日本国内に保管される

9.5.2 データ保持ポリシー

ログの保持期間

  • CloudWatch Logs:デフォルト無期限→適切な期間を設定(例:1年)
  • S3のアクセスログ:ライフサイクルポリシーで自動削除

会話履歴の保持

  • ユーザーの会話履歴は削除可能
  • 組織のポリシーに応じて管理

9.5.3 データの完全削除

サービス終了時、すべてのデータを完全に削除します。

削除手順

  1. アプリケーションのデプロイを削除

    npm -w packages/cdk run -- cdk destroy --all
  2. S3バケットを空にして削除

    aws s3 rm s3://bucket-name --recursive
    aws s3 rb s3://bucket-name
  3. CloudWatch Logsを削除

    aws logs delete-log-group --log-group-name /aws/lambda/XXX
  4. CloudTrailログを削除

9.5.4 利用規約とプライバシーポリシー

組織内利用の場合

  • 利用規約の策定
  • プライバシーポリシーの明示
  • ユーザーへの周知

含めるべき内容

  • データの取り扱い
  • 利用目的
  • 保管期間
  • アクセス権限
  • 第三者提供の有無

9.6 セキュリティベストプラクティス

9.6.1 最小権限の原則

IAM権限

  • 必要最小限の権限のみを付与
  • 定期的に権限を見直し

ユーザーアクセス

  • 必要なユーザーのみにアカウントを付与
  • 退職者のアカウントは速やかに削除

9.6.2 定期的なセキュリティレビュー

月次レビュー

  • アクセスログの確認
  • エラーログの分析
  • コストの確認

四半期レビュー

  • ユーザーアカウントの棚卸し
  • IPアドレスリストの更新
  • セキュリティ設定の見直し

9.6.3 インシデント対応

インシデント発生時

  1. 即座にアクセスを遮断

    • WAFで全アクセスをブロック
    • または、CloudFormationスタックを削除
  2. 影響範囲の特定

    • CloudTrailで不正なアクセスを調査
    • アクセスされたデータを特定
  3. 報告と対応

    • セキュリティチームに報告
    • 必要に応じて関係者に通知
  4. 再発防止策

    • 原因を分析
    • セキュリティ設定を強化

9.6.4 セキュリティアップデート

定期的な更新

cd ~/generative-ai-use-cases
git pull origin main
npm ci
npm -w packages/cdk run -- cdk deploy --require-approval never --all

セキュリティアドバイザリの監視

  • GitHubリポジトリのセキュリティアラート
  • AWS Security Bulletins
  • 依存パッケージの脆弱性情報

9.7 セキュリティチェックリスト

本番環境へのデプロイ前に、以下を確認してください:

デプロイ前

  • IPアドレス制限を設定
  • セルフサインアップを無効化
  • 強固なパスワードポリシーを設定
  • 必要に応じてMFAを有効化
  • CloudTrailを有効化
  • CloudWatch Logsのアラートを設定

デプロイ後

  • 許可されたIPからのみアクセス可能か確認
  • 許可されていないIPからブロックされるか確認
  • 管理者アカウントでログイン可能か確認
  • ユーザーアカウントの作成テスト
  • 各機能が正常に動作するか確認

運用中

  • 定期的なアクセスログの確認
  • ユーザーアカウントの定期的な棚卸し
  • セキュリティアップデートの適用
  • コストの監視
  • インシデント対応手順の確認

まとめ

第9章では、Genuのセキュリティとアクセス制御について、IPアドレス制限、サインアップの無効化、その他のセキュリティ設定、コンプライアンス、ベストプラクティスを詳しく解説しました。これらのセキュリティ対策を適切に実装することで、安全にGenuを運用できます。

全体のまとめ

本ガイドでは、Genu(ジェニュー)の全機能について、基本的な使い方から高度な活用方法、デプロイ、セキュリティまで包括的に解説しました。

第1章:概要とセットアップ 第2章:基本チャット機能 第3章:RAG機能 第4章:各種生成機能(文章・要約・翻訳・Web抽出) 第5章:画像生成と音声チャット機能 第6章:執筆・校正と議事録機能 第7章:ユースケースビルダー 第8章:デプロイとカスタマイズ 第9章:セキュリティとアクセス制御

Genuを活用することで、企業や組織の様々な業務を効率化し、生産性を大幅に向上させることができます。本ガイドが、Genuの導入と活用の一助となれば幸いです。

Clone this wiki locally