概要
環境変数の管理、Firebaseセキュリティルール、OpenAI APIキーの設定など、セキュリティ関連の設定を完全にセットアップする。
前提条件
- Firebase プロジェクト初期化完了
- 認証基盤セットアップ完了
タスク一覧
1. 環境変数管理の完全セットアップ
2. Firebase Security Rules の実装
3. OpenAI Moderation API 準備
4. セキュリティ設定の確認
環境変数設定
.env ファイル構成
# Firebase Configuration
FIREBASE_API_KEY=AIzaSy...
FIREBASE_AUTH_DOMAIN=kcc-syllabus.firebaseapp.com
FIREBASE_PROJECT_ID=kcc-syllabus
FIREBASE_STORAGE_BUCKET=kcc-syllabus.appspot.com
FIREBASE_MESSAGING_SENDER_ID=123456789
FIREBASE_APP_ID=1:123:web:abc
# OpenAI Configuration
OPENAI_API_KEY=sk-...
# Development Settings
ENVIRONMENT=development
DEBUG_MODE=true
.env.example ファイル
# Firebase Configuration (Get from Firebase Console)
FIREBASE_API_KEY=your_api_key_here
FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
FIREBASE_PROJECT_ID=your_project_id
FIREBASE_STORAGE_BUCKET=your_project.appspot.com
FIREBASE_MESSAGING_SENDER_ID=your_sender_id
FIREBASE_APP_ID=your_app_id
# OpenAI Configuration (Get from OpenAI Platform)
OPENAI_API_KEY=sk-your_openai_key_here
# Development Settings
ENVIRONMENT=development
DEBUG_MODE=true
Firestore Security Rules
完全なSecurity Rules実装
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Helper Functions
function isAuthenticated() {
return request.auth \!= null;
}
function isKeioUser() {
return isAuthenticated() &&
request.auth.token.email.matches('.*@keio.jp');
}
function isOwner(userId) {
return isKeioUser() && request.auth.uid == userId;
}
// Users Collection
match /users/{userId} {
allow read, write: if isOwner(userId);
allow create: if isKeioUser() &&
request.auth.uid == userId &&
validateUserData();
}
// Subjects Collection (Read Only)
match /subjects/{subjectId} {
allow read: if isKeioUser();
allow write: if false; // Only admin can write
}
// Posts Collection
match /posts/{postId} {
allow read: if isKeioUser();
allow create: if isKeioUser() &&
request.auth.uid == resource.data.userId &&
validatePostData();
allow update, delete: if isKeioUser() &&
request.auth.uid == resource.data.userId;
// Likes Subcollection
match /likes/{userId} {
allow read: if isKeioUser();
allow write: if isOwner(userId);
}
}
// Data Validation Functions
function validateUserData() {
let data = request.resource.data;
return data.keys().hasAll(['email', 'createdAt']) &&
data.email is string &&
data.createdAt is timestamp;
}
function validatePostData() {
let data = request.resource.data;
return data.keys().hasAll(['title', 'content', 'postType', 'subjectId', 'userId']) &&
data.title is string &&
data.content is string &&
data.postType in ['question', 'answer', 'review'] &&
data.subjectId is string &&
data.userId is string;
}
}
}
OpenAI Moderation API 統合準備
Firebase Functions での実装準備
// functions/src/moderation.ts
import { Configuration, OpenAIApi } from 'openai';
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
export const moderateContent = async (text: string) => {
const openai = new OpenAIApi(configuration);
const response = await openai.createModeration({
input: text,
});
return response.data.results[0];
};
セキュリティチェックリスト
本番環境設定
Firebase Functions 環境変数
firebase functions:config:set openai.api_key="sk-..."
firebase functions:config:set app.environment="production"
GitHub Actions Secrets (将来的に)
- FIREBASE_SERVICE_ACCOUNT_KEY
- OPENAI_API_KEY
- FIREBASE_PROJECT_ID
Acceptance Criteria
テスト項目
参照
次のステップ
Issue #6: Angular Material UI設計とテーマ設定
概要
環境変数の管理、Firebaseセキュリティルール、OpenAI APIキーの設定など、セキュリティ関連の設定を完全にセットアップする。
前提条件
タスク一覧
1. 環境変数管理の完全セットアップ
.envファイルの作成(ローカル開発用).env.exampleファイルの作成(テンプレート).gitignoreに機密ファイルの追加確認2. Firebase Security Rules の実装
firestore.rulesファイルの作成3. OpenAI Moderation API 準備
4. セキュリティ設定の確認
環境変数設定
.env ファイル構成
.env.example ファイル
Firestore Security Rules
完全なSecurity Rules実装
OpenAI Moderation API 統合準備
Firebase Functions での実装準備
セキュリティチェックリスト
本番環境設定
Firebase Functions 環境変数
GitHub Actions Secrets (将来的に)
Acceptance Criteria
テスト項目
参照
次のステップ
Issue #6: Angular Material UI設計とテーマ設定