Skip to content

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ディストリビューションを選択

  1. IPセットを作成
  2. 許可するIPアドレスを登録

  3. ルールを作成

  4. IPセットに含まれるIPは許可
  5. それ以外はブロック

  6. Web ACLに関連付け

  7. 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

  1. S3バケットを空にして削除

    aws s3 rm s3://bucket-name --recursive
    aws s3 rb s3://bucket-name
    

  2. CloudWatch Logsを削除

    aws logs delete-log-group --log-group-name /aws/lambda/XXX
    

  3. CloudTrailログを削除

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

組織内利用の場合: - 利用規約の策定 - プライバシーポリシーの明示 - ユーザーへの周知

含めるべき内容: - データの取り扱い - 利用目的 - 保管期間 - アクセス権限 - 第三者提供の有無

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

9.6.1 最小権限の原則

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

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

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

月次レビュー: - アクセスログの確認 - エラーログの分析 - コストの確認

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

9.6.3 インシデント対応

インシデント発生時: 1. 即座にアクセスを遮断 - WAFで全アクセスをブロック - または、CloudFormationスタックを削除

  1. 影響範囲の特定
  2. CloudTrailで不正なアクセスを調査
  3. アクセスされたデータを特定

  4. 報告と対応

  5. セキュリティチームに報告
  6. 必要に応じて関係者に通知

  7. 再発防止策

  8. 原因を分析
  9. セキュリティ設定を強化

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の導入と活用の一助となれば幸いです。