계정 위생열쇠는 좁게, 로그인은 두 겹, 바뀌면 알림
한눈에 보기
계정 위생의 뼈대는 열쇠는 좁게, 로그인은 두 겹, 바뀌면 알림 셋입니다. 그 위에 방문자 쪽 위험(새어 나간 비밀번호, 낯선 스크립트)을 탐지로 더합니다.
자동화에는 어떤 열쇠를 쓰나요?
API 토큰?을 씁니다. 필요한 권한만, 정한 IP 에서, 정한 날까지만 쓰이게 묶습니다.
API 토큰과 Global API Key
My Profile › API Tokens › Create API Token (계정 소유: Manage account › Account API tokens)

| 구분 | API 토큰 | Global API Key |
|---|---|---|
| 권한 | 고른 권한, 고른 계정·존만 (최소 권한?) | 사용자가 닿는 모든 자원에 전부 |
| IP·만료 제한 | 걸 수 있음 | 걸 수 없음 |
| 개수 | 용도마다 따로 | 사용자당 하나 |
Cloudflare 는 새 고객에게 이 키를 권하지 않고, 쓰던 고객도 토큰으로 옮기라고 합니다.
- 담당자가 떠나도 끊기면 안 되는 연동(CI/CD, SIEM)은 계정 소유 토큰으로 만듭니다.
대시보드 로그인은 어떻게 지키나요?
두 겹으로 잠급니다. 2FA? 를 켜고, 회사 이메일 도메인은 SSO? 로 회사 로그인에 묶습니다(모든 플랜 무료).
로그인 보호 방법
My Profile › Authentication
- 2단계 인증: 보안 키(Touch ID, Windows Hello, YubiKey 등), 인증 앱(TOTP), 이메일 중 고릅니다. 피싱에는 보안 키가 가장 강합니다.
- 수단 둘 이상, 백업 코드 보관: 수단 분실이 가장 흔한 지원 문의라서 Cloudflare 가 권합니다.
- SSO: 도메인 사용자 전원이 회사 IdP? 로 로그인합니다(Gmail 같은 공용 도메인은 불가).
- 관리자 둘 이상: 한 사람이 떠나도 업무 계정이 묶이지 않습니다.
방문자 쪽 위험은 무엇인가요?
두 가지입니다. 로그인으로 들어오는 유출 자격증명?과 내 페이지가 불러오는 낯선 스크립트이며, 기본 탐지는 모든 플랜에 있습니다.
유출 자격증명 탐지와 스크립트 감시
- 유출 자격증명 탐지: 로그인 아이디·비밀번호를 해시로 바꿔 유출 데이터베이스와 비교합니다(Free 는 기본 켜짐). «표시»까지라 막거나 챌린지하려면 룰을 따로 만듭니다(중급).
- Client-side security?(옛 Page Shield): 결제·로그인 페이지에 끼어든 외부 스크립트(공급망 공격)를 찾습니다.
무엇이 바뀌면 어떻게 알 수 있나요?
알림과 감사 로그?로 압니다. 공격, 인증서, 장애 같은 사건은 알림이 알려 주고, 누가 무엇을 바꿨는지는 감사 로그에 남습니다.
먼저 걸어 둘 알림
계정 › Notifications › Create an alert

| 알림 | 언제 | 플랜 |
|---|---|---|
| HTTP DDoS Attack Alert | 초당 100건 넘는 HTTP 공격 차단 | 모든 플랜 |
| Universal SSL Alert | 인증서 상태 변화(검증부터 만료까지) | 모든 플랜 |
| Incident Alerts | Cloudflare 장애의 시작, 변경, 종료 | 모든 플랜 |
| Security Events Alert | 보안 이벤트 급증 | Business 이상 |
| Client-side security New Domain Alert | 처음 보는 도메인의 리소스 등장 | Business 이상 |
받는 곳은 이메일과 웹훅(모든 플랜), PagerDuty(Business 이상)입니다.
감사 로그: 계정 › Manage Account › Audit Logs
함정: 가장 흔한 실수: 만능 열쇠를 자동화에 쓰기
Global API Key 를 스크립트에 넣어 두면 그 키가 새는 순간 계정 전체를 내준 것과 같습니다.
Global API Key? 는 존 삭제, DNS 변경까지 그 사용자가 할 수 있는 일을 전부 합니다. 사용자당 하나라 바꾸면 이 키를 쓰던 연동이 한꺼번에 멈춥니다.
이 키를 쓰는 곳은 감사 로그의 인증 방식 api_key 로 찾습니다(전문가).
한눈에 보기
토큰은 다섯 칸을 채우며 비운 칸은 «제한 없음»입니다. 2단계 인증은 Super Administrator? 가 강제하고, 회사 도메인은 SSO 로 묶습니다.
토큰을 만들 때 무엇을 채우나요?
소유자, 권한, 대상을 고르고 CIDR? 로 IP 범위를, TTL? 로 기간을 정합니다. IP 와 만료를 비우면 어디서나 영원히 쓰입니다.
토큰 만들 때 채울 칸
My Profile › API Tokens › Create API Token › Custom token

| 칸 | 정하는 것 | 기본값 |
|---|---|---|
| 소유자 | 계정 토큰 또는 사용자 토큰 | 만드는 화면이 정함 |
| Permissions | 기능별 Read·Edit 중 필요한 것 | 직접 고름 |
| Resources | 특정 계정·존 | 직접 고름 |
| Client IP Address Filtering | Is in 허용 범위, Is not in 그 안의 예외 | 모든 IP 허용 |
| TTL | 시작일·종료일 (대시보드는 00:00 UTC 기준) | 만료 없음 |
- 비밀 값은 한 번만 보이니 공유 공간에 평문으로 두지 않습니다.
- 만드는 사람은 자기 권한 안에서만 권한을 줄 수 있습니다.
- 안 쓰는 토큰은 지우고, 만료일로 잊힌 토큰도 끝나게 합니다.
2단계 인증을 모두에게 강제할 수 있나요?
있습니다. Super Administrator? 가 «2FA Enforcement» 를 켜면 구성원 전원에게 2단계 인증을 요구하고, 회사 메일 도메인은 SSO 로 IdP 로그인만 받습니다.
강제 수단 두 가지
Manage account › Members (SSO 연결도 여기서)
- 구성원 목록에서 사람마다 2단계 인증 상태와 Super Administrator 여부를 봅니다.
| SSO 준비물 | 내용 |
|---|---|
| 이메일 도메인 | 회사 관리 도메인, TXT 레코드로 소유 확인 |
| 권한 | Super Administrator, API 사용 가능 |
| Zero Trust 조직 | 아무 등급 (무료 포함) |
| IdP | Zero Trust 에 붙이고 먼저 시험 |
유출 자격증명 탐지는 어떻게 쓰나요?
켠 다음 룰에 넣어야 막힙니다. Security › Settings 에서 켜고(Free 는 기본 켜짐), 탐지 필드를 요청 수 제한이나 커스텀 룰 조건에 씁니다.
켜는 곳, 플랜별 필드, 룰 예
도메인 › Security › Settings › (필터: Detection tools) › Leaked credential detection
| 필드 | 뜻 | 플랜 |
|---|---|---|
cf.waf.credential_check.password_leaked | 비밀번호 유출 | 모든 플랜 |
cf.waf.credential_check.username_and_password_leaked | 아이디·비밀번호 쌍 유출 | Pro 이상 |
cf.waf.credential_check.username_leaked | 아이디 유출 | Enterprise |
cf.waf.auth_detected | 요청에 로그인 정보 있음 | Enterprise |
문서 기본 예시는 쌍 유출 요청에 Managed Challenge 를 거는 커스텀 룰입니다.
cf.waf.credential_check.username_and_password_leaked- WordPress, Drupal 같은 흔한 로그인 형식은 기본으로 찾고, 우리 앱 형식(JSON 키 이름 등)은 Enterprise 사용자 지정 위치로 알려 줍니다.
- «Add Leaked Credentials Checks Header» 관리형 변환을 켜면 원본 서버에
Exposed-Credential-Check헤더가 갑니다.
예전 Exposed Credentials Check 를 함께 켜 두면 로그인이 느려지니, 옮긴 뒤 끕니다.
스크립트 감시는 어떻게 켜나요?
Security › Settings 의 «Continuous script monitoring» 을 켭니다. 스크립트 목록은 모든 플랜이 보고, 나머지는 Business 부터입니다.
플랜별로 보이는 것
켜기: 도메인 › Security › Settings › (필터: Client-side abuse) › Continuous script monitoring
결과: 도메인 › Security › Web assets › Client-side resources 탭
| 기능 | Free·Pro | Business·Enterprise | Advanced 추가 기능 |
|---|---|---|---|
| 스크립트 감시 | 있음 | 있음 | 있음 |
| 연결·쿠키 감시, 처음 나타난 페이지, 새 리소스·도메인 알림 | 없음 | 있음 | 있음 |
| 악성 스크립트·코드 변경 탐지와 알림 | 없음 | 없음 | 있음 |
| 허용 목록 룰 (content security rules) | 없음 | 없음 | 5개 |
- Advanced 는 옛 Page Shield 추가 기능의 새 이름입니다(기능과 권한은 그대로).
- 켠 직후에는 목록이 차기까지 시간이 걸립니다.
함정: 토큰의 기본값은 «제한 없음»
토큰을 만들며 IP·만료 칸을 비워 두면 그 토큰은 어디서나, 영원히 쓰입니다.
- 연동 서버의 출구 IP 를
Is in에 넣습니다. 예:192.0.2.0/24, 한 대는198.51.100.7/32. - 만료일을 걸고, 새 토큰으로 바꿀 날을 달력에 적습니다.
IP 제한은 Verify Token 호출로 시험하지 않습니다. 이 호출은 IP 필터를 적용하지 않아 어디서나 «유효»로 나옵니다.
한눈에 보기
점검 순서는 사람, 열쇠, 만능 열쇠, 방문자 보호, 감지입니다. 열쇠가 새면 Roll? 한 뒤 감사 로그?를 보고, SSO 잠김에는 비상 열쇠를 둡니다.
API 로 토큰을 좁히려면 어떻게 하나요?
토큰 생성 API 의 condition 으로 IP 를, not_before·expires_on 으로 기간을 정합니다. 시각은 UTC 이며 대시보드보다 잘게 고릅니다.
토큰 생성 본문 예
POST /client/v4/user/tokens
{"name": "logpush-writer",
"policies": [ … ],
"not_before": "2026-10-15T00:00:00Z",
"expires_on": "2027-01-15T00:00:00Z",
"condition": {"request.ip": {"in": ["192.0.2.0/24"], "not_in": ["192.0.2.10/32"]}}}in,not_in은 CIDR 표기입니다(한 개는/32).- 계정 소유 토큰은 계정 API 로 만들고, API Token Provisioning 역할이나 Super Administrator 만 만듭니다.
- 첫 토큰은 대시보드에서 만들고, 토큰을 만드는 토큰(«Create Additional Tokens» 템플릿)에는 다른 권한을 섞지 않습니다(Cloudflare 권고).
이 토큰은 그 사용자의 모든 자원에 닿는 토큰을 만들 수 있으니 가장 엄하게 보관합니다.
감사 로그로 무엇을 알 수 있나요?
누가 무엇으로 바꿨는지 압니다. v2 는 인증 방식을 api_key(Global API Key), api_token(API 토큰), dash(대시보드)로 남깁니다.
감사 로그 v2 보는 법
계정 › Manage Account › Audit Logs (v2 가 기본 화면)
| 항목 | 내용 |
|---|---|
| 보관 | 18개월 (대시보드는 최근 90일, 전체는 API·Logpush) |
| 기본 필터 | 조회(view) 동작 제외, 필터를 지우면 보임 |
| 변경 비교 | History 탭에서 이전 값과 비교 |
| 내보내기 | Logpush 데이터셋 audit_logs_v2 (계정 단위) |
GET /client/v4/accounts/{account_id}/logs/auditapi_key항목의 행위자와 IP 를 따라가면 Global API Key 를 아직 쓰는 연동이 드러나니, 토큰으로 바꿉니다.- v1 감사 로그로 Logpush 를 쓰던 곳은 v2 작업을 따로 만들어야 합니다.
열쇠가 새면 무엇부터 하나요?
Roll? 로 옛 값을 무효로 만든 뒤, 감사 로그에서 그 열쇠로 한 일을 봅니다.
유출 대응 순서
- 무효화: My Profile › API Tokens › 그 토큰의 ⋯ › Roll › Confirm.
- 교체: 연동에 새 값을 넣습니다.
- 범위 확인: 감사 로그를 기간과 행위자로 걸러 봅니다.
- 재발 방지: IP 제한과 만료일을 겁니다.
새로 만들거나 Roll 한 열쇠는 접두어가 붙어 비밀 스캔 도구가 알아봅니다.
| 접두어 | 열쇠 |
|---|---|
cfut_ | 사용자 API 토큰 |
cfat_ | 계정 API 토큰 |
cfk_ | Global API Key |
- GitHub 공개 저장소에 올라가면 Cloudflare 가 통보받아 자동 폐기하고 메일로 알립니다. 비공개 저장소는 GitHub 가 주인에게 알립니다.
- 대시보드 토큰에 «Exposed» 표시가 붙으면 Roll 하거나 지웁니다.
접두어 없는 예전 토큰도 동작하고 유출 시 폐기 대상입니다. Roll 하면 새 형식이 됩니다.
SSO 가 잠기면 어떻게 들어가나요?
미리 만든 비상 토큰으로 풉니다. SSO 전에 «SSO Connector Edit» 권한의 계정 API 토큰을 만들어 두면 IdP 가 깨져도 SSO 강제를 끕니다.
잠김 대비
- 비상 토큰: 안전하게 보관하고, 잠기면 이 토큰으로 API 에서 SSO 강제를 끕니다.
- 예비 로그인 수단: 일회용 PIN(One-time PIN) 같은 예비 IdP 를 API 로 붙여 둡니다.
- 강제 전 시험: IdP 를 Zero Trust 에서 먼저 시험합니다.
자동으로 점검해 주는 기능이 있나요?
있습니다. Security Insights? 가 계정을 주기적으로 훑어 «MFA 없는 관리자» 같은 위험한 설정을 알려 줍니다.
Security Insights 점검 주기
계정 › Security Insights
| 플랜 | 자동 점검 주기 |
|---|---|
| Free | 7일 |
| Pro · Business | 3일 |
| Enterprise | 매일 |
고친 뒤에는 수동 점검으로 다시 확인합니다.
함정: SSO 잠김: 비상 열쇠를 먼저
SSO 를 켠 뒤 IdP 설정이 바뀌면 그 도메인 사용자 전원이 대시보드에 못 들어옵니다. 비상 열쇠 없이 켜지 않습니다.
SSO 는 그 도메인 사용자 전원에게 걸려, IdP 설정이 바뀌거나 IdP 가 멈추면 관리자도 함께 막힙니다.
- 켜기 전에 위 절의 비상 토큰과 예비 로그인 수단부터 준비합니다.
비상 토큰에도 IP 제한을 걸고, 보관 위치를 아는 사람을 둘 이상 둡니다.
이 문서의 용어
- 2FA
- Two-factor authentication(2단계 인증) · 비밀번호 말고 하나 더(보안 키·인증 앱·이메일 코드) 확인하는 로그인.
- 감사 로그
- Audit logs(감사 로그) · 누가 언제 무엇을 어떤 방법으로 바꿨는지 남는 기록.
- 유출 자격증명
- Leaked credentials(새어 나간 아이디·비밀번호) · 다른 곳의 사고로 이미 공개된 아이디·비밀번호. 이것을 대량으로 넣어 보는 공격을 credential stuffing 이라 합니다.
- 최소 권한
- Least privilege(최소 권한) · 일에 꼭 필요한 권한만 주는 원칙. 열쇠가 새도 피해가 그만큼 작습니다.
- API 토큰
- API token(API 열쇠) · 스크립트·자동화가 Cloudflare API 를 부를 때 쓰는 열쇠. 권한과 대상을 고르고, IP·만료로 더 좁힐 수 있습니다.
- CIDR
- Classless Inter-Domain Routing(IP 대역 표기) · 192.0.2.0/24 처럼 IP 범위를 적는 방식. 한 개는 /32 로 적습니다.
- Client-side security
- Client-side security(브라우저 쪽 보안, 옛 이름 Page Shield) · 내 페이지가 방문자 브라우저에서 불러오는 스크립트·연결을 감시하는 기능.
- Global API Key
- Global API Key(만능 API 키) · 사용자 한 명의 모든 권한을 그대로 갖는 옛 방식 키. 범위·IP·만료를 걸 수 없습니다.
- IdP
- Identity provider(신원 제공자) · Okta, Microsoft Entra ID 처럼 회사 로그인을 맡는 시스템.
- Roll
- Roll(토큰 다시 발급) · 권한은 그대로 두고 비밀 값만 새로 바꾸는 것. 옛 값은 무효가 됩니다.
- Security Insights
- Security Insights(보안 점검 결과) · Cloudflare 가 계정 설정을 주기적으로 훑어 위험한 설정을 알려 주는 화면.
- SSO
- Single sign-on(통합 로그인) · 회사 계정으로 Cloudflare 대시보드에 들어오게 하는 것. 그 이메일 도메인 사용자 전원에게 걸립니다.
- Super Administrator
- Super Administrator(최고 관리자) · 구성원 관리와 결제까지 할 수 있는 가장 높은 역할.
- TTL
- Time To Live(유효 기간) · 토큰이 쓰이기 시작하는 때와 끝나는 때. 비워 두면 만료가 없습니다.