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
動作確認
- 許可されたIPからアクセスして、正常に動作することを確認
- 許可されていないIP(例:スマートフォンのモバイル回線)からアクセスして、ブロックされることを確認
9.2.4 CloudFormationを使用した設定
CloudFormationでデプロイした場合、WAFを手動で設定します。
手順: 1. WAFコンソールを開く 2. Web ACLを作成 - リージョン:CloudFrontの場合は「Global (CloudFront)」 - Associated AWS resources:CloudFrontディストリビューションを選択
- IPセットを作成
-
許可するIPアドレスを登録
-
ルールを作成
- IPセットに含まれるIPは許可
-
それ以外はブロック
-
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
-
S3バケットを空にして削除
aws s3 rm s3://bucket-name --recursive aws s3 rb s3://bucket-name -
CloudWatch Logsを削除
aws logs delete-log-group --log-group-name /aws/lambda/XXX -
CloudTrailログを削除
9.5.4 利用規約とプライバシーポリシー
組織内利用の場合: - 利用規約の策定 - プライバシーポリシーの明示 - ユーザーへの周知
含めるべき内容: - データの取り扱い - 利用目的 - 保管期間 - アクセス権限 - 第三者提供の有無
9.6 セキュリティベストプラクティス
9.6.1 最小権限の原則
IAM権限: - 必要最小限の権限のみを付与 - 定期的に権限を見直し
ユーザーアクセス: - 必要なユーザーのみにアカウントを付与 - 退職者のアカウントは速やかに削除
9.6.2 定期的なセキュリティレビュー
月次レビュー: - アクセスログの確認 - エラーログの分析 - コストの確認
四半期レビュー: - ユーザーアカウントの棚卸し - IPアドレスリストの更新 - セキュリティ設定の見直し
9.6.3 インシデント対応
インシデント発生時: 1. 即座にアクセスを遮断 - WAFで全アクセスをブロック - または、CloudFormationスタックを削除
- 影響範囲の特定
- CloudTrailで不正なアクセスを調査
-
アクセスされたデータを特定
-
報告と対応
- セキュリティチームに報告
-
必要に応じて関係者に通知
-
再発防止策
- 原因を分析
- セキュリティ設定を強化
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の導入と活用の一助となれば幸いです。