{T}

高安全架构 学习笔记(第 2 部分)

2.3 物理安全措施

2.3.1 机房安全标准

机房等级划分

等级适用场景建设要求
A级核心业务机房最高标准,双路市电+UPS+发电机
B级重要业务机房高标准,双路市电+UPS
C级一般业务机房基本标准,单路市电+UPS

机房安全措施

javascript
// 机房安全措施清单
const datacenterSecurityMeasures = {
  // 物理环境
  environment: {
    temperature: '18-28°C',
    humidity: '35-75%',
    fireProtection: '气体灭火系统',
    waterproof: '防水堤、漏水检测'
  },
  
  // 电力保障
  power: {
    dualPower: '双路市电接入',
    ups: 'UPS 不间断电源',
    generator: '柴油发电机',
    duration: '满载运行 ≥ 2小时'
  },
  
  // 访问控制
  accessControl: {
    biometric: '指纹/人脸识别',
    cardReader: '门禁卡',
    visitorPolicy: '访客登记+陪同',
    cctv: '24小时监控录像'
  },
  
  // 网络安全
  network: {
    fiberPath: '不同路由光缆',
    redundant: '双上联网络设备',
    physicalIsolation: '核心区域物理隔离'
  }
}

2.3.2 访问控制策略

javascript
// 机房访问控制系统
class DatacenterAccessControl {
  constructor() {
    this.accessLevels = {
      level1: ['公共区域', '接待大厅'],
      level2: ['办公区域', '会议室'],
      level3: ['机房外围', '监控室'],
      level4: ['核心机房', '设备间']
    }
    
    this.auditLog = []
  }
  
  // 申请访问权限
  async requestAccess(userId, targetZone, reason) {
    const request = {
      id: this.generateId(),
      userId,
      targetZone,
      reason,
      timestamp: Date.now(),
      status: 'pending'
    }
    
    // 审批流程
    const approval = await this.getApproval(request)
    
    if (approval.approved) {
      // 检查是否需要陪同
      if (this.requiresEscort(targetZone)) {
        request.escort = approval.escort
      }
      
      // 记录访问日志
      this.logAccess(request)
      
      return {
        success: true,
        accessCode: this.generateAccessCode(request),
        validUntil: Date.now() + 3600000,  // 1小时有效
        escort: request.escort
      }
    }
    
    return {
      success: false,
      reason: approval.reason
    }
  }
  
  // 进入机房
  async enterZone(userId, zone, accessCode) {
    // 1. 验证访问码
    const valid = await this.validateAccessCode(accessCode)
    
    if (!valid) {
      throw new Error('访问码无效或已过期')
    }
    
    // 2. 生物识别验证
    const biometric = await this.verifyBiometric(userId)
    
    if (!biometric) {
      throw new Error('生物识别验证失败')
    }
    
    // 3. 检查陪同要求
    const requiresEscort = this.requiresEscort(zone)
    
    // 4. 记录进入时间
    const entry = {
      userId,
      zone,
      entryTime: Date.now(),
      escort: requiresEscort
    }
    
    this.auditLog.push(entry)
    
    // 5. 开启门禁
    await this.openDoor(zone)
    
    return entry
  }
  
  // 离开机房
  async exitZone(userId, zone) {
    const lastEntry = this.findLastEntry(userId, zone)
    
    if (!lastEntry) {
      throw new Error('未找到进入记录')
    }
    
    const exitRecord = {
      ...lastEntry,
      exitTime: Date.now(),
      duration: Date.now() - lastEntry.entryTime
    }
    
    this.auditLog.push(exitRecord)
    
    // 检查是否有遗留物品
    await this.checkBelongings(userId, zone)
    
    return exitRecord
  }
  
  // 是否需要陪同
  requiresEscort(zone) {
    const highSecurityZones = ['核心机房', '设备间']
    return highSecurityZones.includes(zone)
  }
  
  // 记录访问日志
  logAccess(request) {
    this.auditLog.push({
      type: 'access_request',
      ...request
    })
  }
  
  // 生成访问码
  generateAccessCode(request) {
    return `AC-${Date.now()}-${request.id}`
  }
  
  // 其他辅助方法
  generateId() {
    return Math.random().toString(36).substr(2, 9)
  }
  
  async getApproval(request) {
    // 模拟审批流程
    return { approved: true }
  }
  
  async validateAccessCode(code) {
    return true
  }
  
  async verifyBiometric(userId) {
    return true
  }
  
  async openDoor(zone) {
    console.log(`开启 ${zone} 门禁`)
  }
  
  findLastEntry(userId, zone) {
    return this.auditLog
      .filter(log => log.userId === userId && log.zone === zone && !log.exitTime)
      .pop()
  }
  
  async checkBelongings(userId, zone) {
    console.log('检查是否遗留物品')
  }
}

三、数据安全