콘텐츠로 이동

보안 및 API 키

권한 할 수 있는 일 사용처
full_access 모든 엔드포인트 자체 도구, CLI, MCP 서버, 관리용 스크립트
sending_access POST /emails와 POST /emails/batch만 메일 발송만 하는 애플리케이션 서버

sending_access 키로 다른 엔드포인트를 호출하면 401 restricted_api_key(“This API key is restricted to only send emails”)가 반환됩니다.

sending_access 키는 domain_id로 도메인 하나에 추가로 묶을 수 있습니다. 그러면 해당 도메인의 주소로만 발송할 수 있고, 다른 from은 401 restricted_api_key를 반환합니다. 제품이나 클라이언트마다 별도의 키를 주는 데 사용하세요.

api-keys.ts
import { SpacePost } from "@spacepost/node";
const spacepost = new SpacePost();
// A key that can only send, and only from one domain.
const { data: key, error } = await spacepost.apiKeys.create({
name: "worker-prod",
permission: "sending_access",
domainId: "0192e1c4-0000-7000-8000-000000000001",
});
if (error) throw new Error(error.message);
console.log(key.token); // sp_live_..., shown only once
const { data: keys } = await spacepost.apiKeys.list();
console.log(keys?.data.map((k) => `${k.name} ${k.prefix}... ${k.permission}`));
await spacepost.apiKeys.remove(key.id);

name은 1자 이상 50자 이하입니다. domain_id는 sending_access에서만 허용됩니다.

  • 키는 sp_live_ 뒤에 무작위 base62 문자 32개가 붙은 형태입니다.
  • SpacePost는 SHA-256 해시만 저장합니다. 전체 키는 생성할 때 한 번만 표시되며, 잃어버렸다면 새 키를 만드세요.
  • 대시보드와 GET /api-keys에는 접두사(sp_live_와 4자), 권한, 도메인, last_used_at이 표시됩니다.
  • 키를 삭제하면(DELETE /api-keys/{id}) 즉시 폐기됩니다.
  • 클라이언트 측 코드, 모바일 앱, 공개 저장소에 키를 절대 넣지 마세요. API가 교차 출처 요청을 허용하는 것은 API 플레이그라운드가 동작하게 하기 위한 것일 뿐이며, 이메일은 서버에서 보내세요.
  • 서비스와 환경마다 키를 하나씩 사용하고 worker-prod, ci-staging처럼 알아보기 쉽게 이름을 붙이세요.
  • 도메인으로 제한한 sending_access를 우선 사용하세요.
  • 키를 교체하려면 새 키를 만들어 배포하고, 이전 키의 last_used_at을 확인한 뒤 이전 키를 삭제하세요.
  • 키는 코드가 아니라 시크릿 매니저나 환경 변수에 보관하세요.
  • 키가 유출되면 즉시 폐기하세요. GitHub에 커밋되었다면 침해된 것으로 간주하세요.
  • SMTP는 같은 키를 비밀번호로 사용합니다. SMTP 릴레이를 참고하세요.

모든 트래픽은 TLS를 사용합니다. API는 https://api.spacepost.dev에서 제공되며, smtp.spacepost.dev:25976의 SMTP 릴레이는 인증 전에 STARTTLS를 요구합니다(포트 465의 암시적 TLS는 아직 제공되지 않습니다).

그 밖의 보호 장치: 실패한 SMTP 인증 시도는 IP별로 제한되고, 웹훅 엔드포인트와 첨부 파일 URL은 공개 주소로 해석되어야 하며(사설 네트워크는 거부됨), 수신 거부 링크는 연락처마다 서명됩니다.

SpacePost는 슬로베니아의 EU 기업인 Studio 404 d.o.o.가 운영하며, 고객 데이터를 EU 안에 보관합니다.

  • 발송: AWS eu-central-1(독일 프랑크푸르트)의 Amazon SES. 모든 도메인이 이 리전에서 발송합니다.
  • 애플리케이션과 데이터베이스: API, 대시보드, 워커, Postgres 데이터베이스는 Railway의 EU 리전(네덜란드 암스테르담)에서 실행됩니다.
  • 격리: 각 팀은 자체 SES 테넌트를 통해 발송하므로 한 고객의 평판 문제가 다른 고객에게 영향을 주지 않습니다.
  • 웹사이트와 문서는 Cloudflare의 글로벌 네트워크에서 제공되는 정적 페이지이며, 고객 데이터는 저장되지 않습니다.

일부 제공업체(AWS, Stripe, Railway)는 미국 기업입니다. 이들이 무엇을 어디에서 처리하는지는 하위 처리자 목록(영어로 제공)에 나와 있습니다. GDPR 데이터 처리 부속서(영어로 제공)는 슬로베니아 법을 준거법으로 하는 서비스 약관의 일부입니다.

자세한 내용을 적어 support@spacepost.dev로 이메일을 보내 주세요. 다른 고객의 데이터에 대해서는 테스트하지 마세요.