도메인 검증(Domain Verification)
도메인 검증(Domain Verification)
*도메인 검증(domain verification)*을 통해 계정 관리자는 DNS TXT 레코드로 계정이 이메일 도메인을 소유하고 있음을 증명할 수 있어요. 도메인이 검증되면, 조직의 모든 계정에서 이메일 주소가 해당 도메인에 있는 모든 사용자가 검증 링크를 각각 클릭하지 않아도 자동으로 검증된 이메일을 가진 것으로 처리돼요. 하나의 계정이 조직 전체를 대신해 도메인을 한 번 검증해요.
출처: Snowflake 문서
본문
도메인 검증이 중요한 이유
Snowflake는 검증된 이메일 주소를 가진 사용자에게만 보안 및 기타 알림(예: MFA 등록 프롬프트, 비밀번호 재설정 메시지, 리소스 모니터 알림)을 전달해요. 예시는 다중 인증(MFA)과 리소스 모니터 다루기를 참고해요.
도메인 검증이 없으면 각 사용자가 Snowsight에서 개별적으로 자신의 주소를 검증해야 해요. 같은 이메일 도메인에 수백·수천 명의 사용자가 있는 조직에서는 운영 비용이 커요. 새 사용자는 로그인해 개인별 흐름을 완료할 때까지 보안 및 기타 알림을 받을 수 없고, 검증되지 않은 사용자는 그 알림을 조용히 놓쳐요.
도메인을 한 번 검증하면 그 작업이 단일 DNS 구성 단계로 옮겨져요.
중요(Important): 도메인 검증은 조직 전체 작업이에요. 조직의 어떤 계정이 도메인을 검증하면 그 조직의 모든 계정이 해당 도메인의 사용자를 검증된 이메일을 가진 것으로 처리해요. 검증하는 계정을 의도적으로 선택해요. 나중에 도메인을 검증 해제할 수 있는 계정은 그 계정뿐이에요.
검증 작동 방식
도메인 검증은 표준 DNS TXT 레코드 챌린지를 사용해요.
- 계정 관리자가 도메인 이름으로 SYSTEM$VERIFY_DNS_DOMAIN을 호출해요. Snowflake는
snowflake-verification=<uuid>형태의 검증 토큰을 반환해요. - 관리자가 도메인에 대해 SYSTEM$VERIFY_DNS_DOMAIN이 다음에 호출될 때 Snowflake가 적시(just-in-time) 검증 확인을 수행해요. 게시된 TXT 레코드가 예상 토큰과 일치하면 도메인이 Verified 상태로 전환돼요.
- 도메인이 검증되어 있는 동안, 이메일 주소가 해당 도메인에 있는 모든 사용자가 알림, MFA, 및 이메일 검증을 조건으로 하는 기타 기능의 목적으로 검증된 이메일 주소를 가진 것으로 처리돼요.
검증은 호출 계정의 전체 조직(복제 그룹)에 공유돼요. 한 계정에서 도메인이 검증되면 그 검증이 조직의 모든 계정에 복제되어, 모든 계정의 일치하는 사용자에게 즉시 검증된 이메일 상태를 부여해요.
하지만 검증의 소유권은 등록 계정에 남아요. 즉, 특정 도메인에 대해 원래 SYSTEM$VERIFY_DNS_DOMAIN을 호출한 계정만 그 도메인을 검증 해제하거나 재검증할 수 있어요. 조직의 다른 계정은 검증을 볼 수 있지만 수정할 수는 없어요.
도메인 상태와 유예 기간(Grace Period)
검증된 도메인은 스스로 검증 상태를 유지하지 않아요. Snowflake는 백그라운드에서 주기적으로 TXT 레코드를 다시 확인해 드리프트(예: DNS 레코드 제거 또는 교체)를 감지해요. 각 도메인은 다음 상태 중 하나를 가져요.
| 상태 | 설명 |
|---|---|
| Pending | 도메인이 SYSTEM$VERIFY_DNS_DOMAIN으로 등록되었지만 TXT 레코드가 아직 관찰되지 않았어요. 도메인의 사용자는 검증된 이메일을 가진 것으로 처리되지 않아요. |
| Verified | 최근 확인에서 TXT 레코드가 발견됐어요. 도메인의 사용자는 검증된 이메일을 가진 것으로 처리돼요. |
| 유예 기간(48시간) | 재검증이 실패했어요. 도메인은 여전히 검증된 것으로 처리되지만, Snowflake가 레코드를 다시 확인할 거예요. 관리자는 이 전환 시점부터 48시간 내에 DNS 구성을 수정해야 해요. |
| 유예 기간(7일) | 재검증이 처음 48시간 창 이후에도 계속 실패했어요. Snowflake가 계정 관리자에게 경고 알림을 보내요. 도메인은 추가로 7일 동안 검증된 것으로 처리돼요. |
| Unverified | 총 유예 기간(48시간 + 7일)이 성공적인 재검증 없이 경과했어요. 도메인의 사용자는 더 이상 검증된 이메일을 가진 것으로 처리되지 않으며, Snowflake가 최종 알림을 보내요. |
유예 기간은 일시적인 DNS 문제나 짧은 오구성이 도메인의 모든 사용자의 검증된 이메일 상태를 즉시 철회하지 않도록 하기 위해 존재해요. 검증되지 않은 도메인을 복구하려면 DNS 레코드를 수정하고 SYSTEM$VERIFY_DNS_DOMAIN을 다시 호출해 새 확인을 트리거해요.
Snowflake는 두 시점에 계정 관리자에게 이메일을 보내요. 처음 48시간 창이 경과하고 도메인이 7일 창으로 이동할 때(도메인이 검증되지 않게 될 날짜를 포함한 경고), 그리고 도메인이 검증되지 않게 될 때 다시 보내요. 처음 48시간은 의도적으로 조용히 지나가므로, 짧은 DNS 중단이 노이즈를 만들지 않아요.
상태를 알기 위해 이메일을 기다릴 필요는 없어요. 언제든지 SYSTEM$VERIFY_DNS_DOMAIN을 다시 호출해 도메인의 현재 상태를 확인할 수 있어요. 도메인이 유예 기간에 있는 동안 응답은 검증 상태로 유지되는 정확한 날짜와 시간까지 보고하므로, DNS 레코드를 수정할 시간이 얼마나 남았는지 항상 알 수 있어요.
도메인 검증
도메인 검증은 3단계 과정이에요. 먼저 토큰을 얻기 위해 도메인을 등록하고, 그다음 DNS에 토큰을 게시하고, 마지막으로 Snowflake가 이를 관찰하게 해요.
1단계: 도메인 등록
계정 관리자(또는 계정에 대한 MODIFY 권한이 있는 사용자)로서 도메인 이름으로 SYSTEM$VERIFY_DNS_DOMAIN을 호출해요.
SELECT SYSTEM$VERIFY_DNS_DOMAIN('example.com');
이 함수는 TXT 레코드 값과 현재 상태를 포함하는 JSON 객체를 반환해요.
{
"txt_record": "snowflake-verification=550e8400-e29b-41d4-a716-446655440000",
"domain": "example.com",
"message": "Domain example.com is pending verification. Add the following DNS TXT record to verify ownership: snowflake-verification=550e8400-e29b-41d4-a716-446655440000"
}
이미 등록된 도메인에 대해 함수를 호출해도 같은 토큰을 반환해요. 호출은 멱등(idempotent)이에요.
2단계: TXT 레코드 게시
DNS 제공자에서 txt_record 필드에 반환된 값으로 도메인에 TXT 레코드를 추가해요. 레코드 이름은 검증하려는 도메인의 에이펙스(apex)예요(예: _snowflake.example.com이 아니라 example.com).
DNS 전파는 제공자와 도메인의 TTL에 따라 몇 분에서 몇 시간이 걸릴 수 있어요.
3단계: 검증 트리거
검증 확인을 수행하려면 SYSTEM$VERIFY_DNS_DOMAIN을 다시 호출해요.
SELECT SYSTEM$VERIFY_DNS_DOMAIN('example.com');
TXT 레코드가 존재하고 예상 토큰과 일치하면 응답 메시지가 도메인이 검증되었음을 보고해요. 이 시점부터 example.com에 이메일 주소가 있는 모든 사용자가 검증된 이메일을 가진 것으로 처리돼요.
검증된 도메인 제거
도메인의 사용자를 검증된 이메일을 가진 것으로 처리하지 않으려면 SYSTEM$UNVERIFY_DNS_DOMAIN을 호출해요. 원래 도메인을 등록한 계정만 검증을 해제할 수 있어요.
SELECT SYSTEM$UNVERIFY_DNS_DOMAIN('example.com');
도메인이 현재 검증 상태이거나 유예 기간에 있으면 활성 검증을 제거하려는 의도를 확인하려면 두 번째 인자로 TRUE를 전달해야 해요.
SELECT SYSTEM$UNVERIFY_DNS_DOMAIN('example.com', TRUE);
제거 후 도메인의 사용자는 이전에 가졌던 개별 이메일 검증 상태로 되돌아가며, DNS TXT 레코드는 삭제할 수 있어요.
고려사항
- Snowflake는 TXT 레코드를 대소문자 구분 없이 비교하지만 리터럴
snowflake-verification=접두사를 기대해요. SYSTEM$VERIFY_DNS_DOMAIN이 반환한 값을 따옴표로 묶거나, base64 인코딩하거나, 다른 방식으로 변형하지 마요. - 도메인 검증이 부여하는 검증된 이메일 상태는 개별 이메일 검증을 대체하는 것이 아니라 추가하는 것이에요. 개인적으로 검증된 이메일을 가진 사용자는 나중에 도메인이 검증되지 않게 되어도 그 상태를 유지해요.
더 알아보기 (Learn more)
- 다중 인증(MFA) — 검증된 이메일이 필요한 보안 기능
- 리소스 모니터 — 알림 전달의 예
- 이메일 알림 — 이메일 주소 검증