操作
バグ #340
未完了Security-3: 鍵管理・セッション強化 (4h)
ステータス:
新規
優先度:
高め
担当者:
-
開始日:
2025-06-07
期日:
進捗率:
0%
予定工数:
説明
SSH鍵管理とセッション管理の強化を実装する。
実装内容¶
SSH鍵管理強化¶
class SSHKeyManager {
private keyRotationInterval = 30 * 24 * 60 * 60 * 1000; // 30日
async rotateKeys() {
// SSH鍵の定期ローテーション
const currentKeys = await this.getCurrentKeys();
for (const host of this.managedHosts) {
if (this.shouldRotateKey(host)) {
await this.generateNewKeyPair(host);
await this.deployNewKey(host);
await this.removeOldKey(host);
await this.auditLogger.log({
userId: 'system',
action: 'ssh_key_rotated',
severity: 'medium',
details: { host }
});
}
}
}
private async generateNewKeyPair(host: string) {
// 新しいSSH鍵ペア生成
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 4096,
publicKeyEncoding: { type: 'spki', format: 'pem' },
privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
});
// 暗号化して保存
await this.storeEncryptedKey(host, keyPair);
}
}
セッション管理強化¶
class SessionManager {
private sessionTimeout = 4 * 60 * 60 * 1000; // 4時間
async createSession(userId: string, tokenData: any) {
const sessionId = crypto.randomUUID();
const session = {
userId,
tokenData,
createdAt: Date.now(),
lastActivity: Date.now(),
ipAddress: tokenData.ip
};
await this.redis.setex(
`session:${sessionId}`,
this.sessionTimeout / 1000,
JSON.stringify(session)
);
return sessionId;
}
async validateSession(sessionId: string): Promise<boolean> {
const session = await this.redis.get(`session:${sessionId}`);
if (!session) {
return false;
}
const sessionData = JSON.parse(session);
// 非活動タイムアウトチェック
if (Date.now() - sessionData.lastActivity > this.sessionTimeout) {
await this.invalidateSession(sessionId);
return false;
}
// 最終活動時刻更新
sessionData.lastActivity = Date.now();
await this.redis.setex(
`session:${sessionId}`,
this.sessionTimeout / 1000,
JSON.stringify(sessionData)
);
return true;
}
}
成果物¶
- SSH鍵管理強化
- セッション管理強化
- 自動ローテーション機能
作業時間: 4時間¶
依存: Security-2完了¶
表示するデータがありません
操作