-
Notifications
You must be signed in to change notification settings - Fork 9
chapter9_security
Genuは企業や組織での利用を想定しており、セキュリティとアクセス制御が重要な要素となります。
検証環境vs本番環境:
- 検証環境:インターネットからアクセス可能、セルフサインアップ有効でも問題なし
- 本番環境:社内データを活用する場合、適切なアクセス制御が必須
主要なセキュリティ対策:
- IPアドレス制限:特定のIPアドレスからのみアクセス許可
- サインアップ制御:管理者のみがアカウントを作成
- 認証と認可:適切なユーザー管理
- データ暗号化:転送時と保管時の暗号化
- 監査ログ:アクセスと操作の記録
主要コンポーネント:
- Amazon Cognito:ユーザー認証
- AWS WAF:Webアプリケーションファイアウォール
- CloudFront:コンテンツ配信とセキュリティ
- IAM:AWSリソースへのアクセス制御
- S3暗号化:データの暗号化保管
- CloudTrail:監査ログ
デフォルトでは、Genuはインターネット上どこからでもアクセスできます。本番環境では、特定のIPアドレス(例:企業の拠点)からのみアクセスを許可することを推奨します。
実装方法: AWS WAF(Web Application Firewall)を使用して、特定のIPアドレス以外からのアクセスをブロックします。
AWS WAFは、Webアプリケーションの通信内容を検査し、不正な通信を遮断するセキュリティ機能です。
主な機能:
- IPアドレスベースのアクセス制御
- 地理的制限(国単位)
- レート制限(DDoS対策)
- SQLインジェクション対策
- XSS(クロスサイトスクリプティング)対策
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)
curl https://checkip.amazonaws.com設定後、デプロイして反映:
npm -w packages/cdk run -- cdk deploy --require-approval never --all- 許可されたIPからアクセスして、正常に動作することを確認
- 許可されていないIP(例:スマートフォンのモバイル回線)からアクセスして、ブロックされることを確認
CloudFormationでデプロイした場合、WAFを手動で設定します。
手順:
-
WAFコンソールを開く
-
Web ACLを作成
- リージョン:CloudFrontの場合は「Global (CloudFront)」
- Associated AWS resources:CloudFrontディストリビューションを選択
-
IPセットを作成
- 許可するIPアドレスを登録
-
ルールを作成
- IPセットに含まれるIPは許可
- それ以外はブロック
-
Web ACLに関連付け
- CloudFrontディストリビューションに適用
動的IPアドレスの問題:
- 企業の固定IPアドレスがない場合、VPNソリューションを検討
- リモートワーカーのアクセスには、VPN経由を必須とする
緊急時のアクセス:
- 管理者用の緊急アクセス方法を確保
- AWS Consoleから直接WAFルールを変更可能
複数拠点の管理:
- 本社、支社、データセンターなど、すべての拠点のIPを登録
- 定期的にIPリストを見直し
デフォルトでは、ユーザーが自分でアカウントを作成できる「セルフサインアップ」が有効です。
検証環境での利点:
- 簡単にアカウント作成可能
- 複数ユーザーでのテストが容易
本番環境でのリスク:
- 不正なユーザーがアカウントを作成できる
- 社内データへの不正アクセスのリスク
- コンプライアンス違反の可能性
cdk.jsonの編集:
{
"context": {
"allowSelfSignUp": false
}
}デプロイ:
npm -w packages/cdk run -- cdk deploy --require-approval never --allCloudFormationでデプロイした場合、Cognitoコンソールから手動で設定します。
手順:
- Cognitoコンソールを開く
- User Poolを選択
- サインアップ設定を編集
- 「Allow users to sign themselves up」を無効化
- 変更を保存
サインアップを無効化した後は、管理者がアカウントを作成します。
AWSコンソールから:
- Cognitoコンソールを開く
- User Poolを選択
- 「Create user」をクリック
- ユーザー情報を入力:
- Username(メールアドレス)
- Email(メールアドレス)
- Temporary password(一時パスワード)
- 「Send an email invitation」を選択
- 作成をクリック
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デフォルトの招待メールは英語です。日本語にカスタマイズできます。
手順:
- Cognitoコンソールを開く
- User Poolを選択
- 「Messaging」→「Email」を選択
- 「Invitation message」を編集
カスタマイズ例:
件名:[アプリケーション名]へようこそ
本文:
{username}様
[アプリケーション名]のアカウントが作成されました。
以下の情報でログインしてください:
ユーザー名:{username}
一時パスワード:{####}
初回ログイン時に新しいパスワードの設定が必要です。
ログインURL:https://your-app-url.cloudfront.net
ご不明な点がございましたら、IT部門までお問い合わせください。
強固なパスワードポリシーを設定します。
Cognitoでの設定:
- User Poolを選択
- 「Password policy」を編集
- 以下を設定:
- 最小文字数:8文字以上(推奨:12文字以上)
- 大文字を要求
- 小文字を要求
- 数字を要求
- 特殊文字を要求
- 一時パスワードの有効期限:7日間
より高いセキュリティが必要な場合、MFAを有効化します。
MFAの種類:
- SMS MFA:携帯電話にコードを送信
- TOTP MFA:Google Authenticatorなどのアプリを使用
有効化手順:
- Cognitoコンソールを開く
- User Poolを選択
- 「MFA」設定を編集
- 「Required」または「Optional」を選択
推奨設定:
- 一般ユーザー:Optional(ユーザーが選択可能)
- 管理者:Required(必須)
セキュリティを強化するため、セッションタイムアウトを設定します。
設定項目:
- Access Token有効期限:デフォルト60分
- ID Token有効期限:デフォルト60分
- Refresh Token有効期限:デフォルト30日
推奨設定:
Access Token: 60分(通常業務)または15分(高セキュリティ)
Refresh Token: 7日(定期的な再認証を促す)
すべて自動的に有効:
- HTTPS通信(TLS 1.2以上)
- CloudFront→Lambda間の通信
- Lambda→Bedrock間の通信
S3:
- デフォルトで暗号化有効
- SSE-S3またはSSE-KMSを使用
DynamoDB(使用する場合):
- AWS管理キーで自動暗号化
OpenSearch Serverless(Knowledge Bases使用時):
- 自動的に暗号化
すべてのAPI呼び出しを記録します。
有効化:
- CloudTrailコンソールを開く
- 新しいトレイルを作成
- すべてのリージョンのイベントを記録
- S3バケットにログを保存
記録される情報:
- 誰が
- いつ
- 何を実行したか
- 結果はどうだったか
Lambda関数のログを記録・分析します。
ログの確認:
aws logs tail /aws/lambda/GenerativeAiUseCasesStack-XXX --followアラート設定:
- エラー率が閾値を超えた場合
- 特定のエラーメッセージが出現した場合
- 異常なアクセスパターンを検出した場合
リージョンの選択: データの保管場所に関する法規制がある場合、適切なリージョンを選択します。
日本の企業の場合:
- ap-northeast-1(東京)を推奨
- データは日本国内に保管される
ログの保持期間:
- CloudWatch Logs:デフォルト無期限→適切な期間を設定(例:1年)
- S3のアクセスログ:ライフサイクルポリシーで自動削除
会話履歴の保持:
- ユーザーの会話履歴は削除可能
- 組織のポリシーに応じて管理
サービス終了時、すべてのデータを完全に削除します。
削除手順:
-
アプリケーションのデプロイを削除
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ログを削除
組織内利用の場合:
- 利用規約の策定
- プライバシーポリシーの明示
- ユーザーへの周知
含めるべき内容:
- データの取り扱い
- 利用目的
- 保管期間
- アクセス権限
- 第三者提供の有無
IAM権限:
- 必要最小限の権限のみを付与
- 定期的に権限を見直し
ユーザーアクセス:
- 必要なユーザーのみにアカウントを付与
- 退職者のアカウントは速やかに削除
月次レビュー:
- アクセスログの確認
- エラーログの分析
- コストの確認
四半期レビュー:
- ユーザーアカウントの棚卸し
- IPアドレスリストの更新
- セキュリティ設定の見直し
インシデント発生時:
-
即座にアクセスを遮断
- WAFで全アクセスをブロック
- または、CloudFormationスタックを削除
-
影響範囲の特定
- CloudTrailで不正なアクセスを調査
- アクセスされたデータを特定
-
報告と対応
- セキュリティチームに報告
- 必要に応じて関係者に通知
-
再発防止策
- 原因を分析
- セキュリティ設定を強化
定期的な更新:
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
- 依存パッケージの脆弱性情報
本番環境へのデプロイ前に、以下を確認してください:
- 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の導入と活用の一助となれば幸いです。