보안 정책

API 키 관리, IP ACL 설정, HTTPS 강제, 웹훅 서명 검증 등 비즈고 API를 안전하게 사용하기 위한 보안 정책을 안내합니다.


API 키 보안

  • API 키를 코드에 하드코딩하지 마세요. 환경 변수 또는 시크릿 관리 서비스를 사용하세요.
  • 키가 유출된 경우 즉시 콘솔에서 재발급하세요.
  • 개발용·운영용 API 키를 분리해 관리하세요.
# 잘못된 예
BIZGO_API_KEY = "your_actual_key_here"  # 코드에 직접 삽입 금지

# 올바른 예 (.env 파일 또는 시크릿 매니저)
BIZGO_API_KEY = os.environ.get("BIZGO_API_KEY")
// 잘못된 예
const apiKey = "your_actual_key_here";  // ✗

// 올바른 예
const apiKey = process.env.BIZGO_API_KEY;  // ✓

IP ACL

비즈고 API는 등록된 IP에서만 요청을 허용합니다.

  • 서버 IP 변경 시 반드시 콘솔에서 ACL을 업데이트하세요.
  • 개발용/운영용 API 키를 분리해 각각 다른 IP 범위를 등록하세요.
  • CIDR 표기로 IP 대역을 등록할 수 있습니다: 203.0.113.0/24

IP ACL 미등록 상태에서 요청하면 authCode: A050 (IP 차단) 응답이 반환됩니다.


HTTPS 강제

모든 API 요청은 HTTPS를 사용해야 합니다.
HTTP 요청은 거부됩니다.


웹훅 서명 검증

비즈고는 웹훅 요청 헤더에 HMAC-SHA256 서명값을 포함합니다.
위변조 방지를 위해 반드시 서명을 검증하세요.

수신된 헤더:

x-bizgo-signature: sha256={HMAC-SHA256 서명값}

검증 예제 (Node.js)

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return `sha256=${expected}` === signature;
}

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-bizgo-signature'];
  const isValid = verifySignature(req.body, signature, process.env.WEBHOOK_SECRET);

  if (!isValid) return res.status(401).send('Unauthorized');

  // 이벤트 처리
  res.status(200).send('OK');
});

에러 로그 민감정보 마스킹

전화번호, 인증번호 등 민감정보는 로그에 마스킹 처리하세요.

function maskPhone(phone) {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
}

console.log(`발송 대상: ${maskPhone('01012345678')}`); // 010****5678

다음 단계