DNS 존
DNS 카테고리의 API 작업 8개를 다룹니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/dns/zones | DNS 존 목록 (runlot dns zones) |
| POST | /v1/orgs/{orgSlug}/dns/zones | DNS 존을 생성합니다 (runlot dns create) |
| GET | /v1/orgs/{orgSlug}/dns/zones/{zone} | 단일 DNS 존과 그 안의 모든 레코드 |
| DELETE | /v1/orgs/{orgSlug}/dns/zones/{zone} | DNS 존을 삭제합니다 (runlot dns delete) |
| PUT | /v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type} | 레코드를 생성하거나 업데이트합니다 (runlot dns set) |
| DELETE | /v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type} | 레코드를 삭제합니다 (runlot dns rm) |
| POST | /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec | 존 서명을 켜거나 끕니다 |
| PUT | /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec/ds | 부모 존에 등록할 DS를 저장합니다 |
GET /v1/orgs/{orgSlug}/dns/zones
이 org가 runlot 네임서버에서 운영하는 DNS 영역입니다. rrsets는 여기서 생략되며 단일 zone을 조회할 때만 반환됩니다. viewer 이상 권한이 필요합니다.
operationId listZones
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 목록 조회 | ZoneList |
| 403 | — | — |
| 404 | — | — |
| 503 | dns_not_configured — 이 deployment는 runlot DNS를 사용하지 않습니다. no_core — 서비스를 일시적으로 사용할 수 없습니다. | Error |
POST /v1/orgs/{orgSlug}/dns/zones
멱등(Idempotent) — 기존 존은 변경 없이 그대로 반환됩니다. 새 존은 SOA 레코드와 apex NS rrset과 함께 생성됩니다. 이 NS rrset은 runlot이 관리하며 편집할 수 없습니다. 이것이 없으면 도메인이 전혀 확인(resolve)되지 않습니다.
존을 생성하는 것만으로는 어떤 이름도 runlot을 통해 확인되지 않습니다. 위임(delegation)이 적용되려면 등록기관(registrar)에서 NS 레코드를 nameservers의 값으로 변경해야 합니다 — delegation 필드가 이 상태를 반영합니다. admin 이상 권한이 필요합니다. 감사 로그에 dns.zone.create로 기록됩니다.
operationId createZone
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 생성되었거나 이미 존재하던 존 | ZoneDetail |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | 다른 조직이 이미 사용 중인 DNS 존입니다 (zone_taken) | Error |
| 503 | dns_not_configured — 이 deployment는 runlot DNS를 사용하지 않습니다. no_core — 서비스를 일시적으로 사용할 수 없습니다. | Error |
GET /v1/orgs/{orgSlug}/dns/zones/{zone}
viewer 이상이 필요합니다.
operationId getZone
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | DNS 존과 RRset | ZoneDetail |
| 403 | — | — |
| 404 | — | — |
| 503 | dns_not_configured — 이 deployment는 runlot DNS를 사용하지 않습니다. no_core — 서비스를 일시적으로 사용할 수 없습니다. | Error |
DELETE /v1/orgs/{orgSlug}/dns/zones/{zone}
모든 레코드와 존 자체를 삭제합니다. 위임이 여전히 runlot 네임서버를 가리키고 있다면 도메인이 확인되지 않게 됩니다 — 삭제하기 전에 등록기관에서 NS 레코드를 변경하세요. admin 이상 권한이 필요합니다. 감사 로그에 dns.zone.delete로 기록됩니다.
operationId deleteZone
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 204 | 삭제됨 | — |
| 403 | — | — |
| 404 | — | — |
| 503 | dns_not_configured — 이 deployment는 runlot DNS를 사용하지 않습니다. no_core — 서비스를 일시적으로 사용할 수 없습니다. | Error |
PUT /v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type}
하나의 전체 rrset(이름 + 유형)을 교체합니다. 값 하나를 추가하는 것이 아니라 — records가 해당 rrset의 새로운 전체 내용이 됩니다.
저장할 때 값이 검증됩니다: CNAME은 apex에 위치할 수 없고 동일한 이름에서 다른 유형과 공존할 수 없으며, A/AAAA, MX, SRV, CAA는 형식이 검사됩니다. 255바이트를 초과하는 TXT 레코드는 존 파일에서 청크로 분할됩니다. runlot이 관리하는 레코드(프로젝트 연결, 인증서 발급, 또는 존의 NS)는 409 managed_rrset을 반환합니다.
member 이상 권한이 필요합니다. 감사 로그에 dns.rrset.set으로 기록됩니다.
operationId putRRset
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 저장된 rrset | RRset |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | 프로젝트가 관리하는 레코드(managed_rrset)이거나 CNAME 공존 금지에 해당하는 레코드(cname_conflict) | Error |
| 503 | dns_not_configured — 이 deployment는 runlot DNS를 사용하지 않습니다. no_core — 서비스를 일시적으로 사용할 수 없습니다. | Error |
DELETE /v1/orgs/{orgSlug}/dns/zones/{zone}/rrsets/{name}/{type}
member 이상 권한이 필요합니다. Runlot이 대신 관리하는 레코드는 409 managed_rrset을 반환합니다 — 제거하려면 여기서 레코드를 삭제하는 대신 Domains 화면에서 프로젝트 연결을 해제하세요. 감사 이벤트는 dns.rrset.delete입니다.
operationId deleteRRset
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 204 | 삭제됨 | — |
| 403 | — | — |
| 404 | — | — |
| 409 | 앱이 관리하는 행(managed_rrset) | Error |
| 503 | 이 배포에 DNS가 활성화되어 있지 않거나(dns_not_configured), 서비스가 일시적으로 사용할 수 없는 상태입니다(no_core). | Error |
POST /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec
존을 off에서 signing으로 전환합니다. 서명은 네임서버가 수행하며, 키 자료는 Runlot에 저장되지 않습니다. DNSSEC을 끄면 기록된 DS도 함께 지워집니다. 이전 키의 DS가 상위 존에 등록된 채로 남아 있으면 도메인 검증이 실패합니다. admin 이상 권한이 필요합니다.
operationId setZoneDNSSEC
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 변경된 존 | Zone |
| 403 | — | — |
| 404 | — | — |
| 503 | 이 배포에 DNS가 활성화되어 있지 않거나(dns_not_configured), 서비스가 일시적으로 사용할 수 없는 상태입니다(no_core). | Error |
PUT /v1/orgs/{orgSlug}/dns/zones/{zone}/dnssec/ds
Runlot은 상위 존을 조회하지 않습니다. 상위 존에 DS 레코드가 존재하게 되면 이 값을 전송하세요. 그러면 존이 signing에서 ds_pending으로 전환됩니다. 빈 목록은 "아직 아님"을 의미하며 상태를 진행시키지 않습니다. admin 이상 권한이 필요합니다.
operationId setZoneDS
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 변경된 존 | Zone |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | 존의 DNSSEC이 꺼져 있음(dnssec_off) | Error |
| 503 | 이 배포에 DNS가 활성화되어 있지 않거나(dns_not_configured), 서비스가 일시적으로 사용할 수 없는 상태입니다(no_core). | Error |