웹사이트에 대한 액세스를 특정 IP로 제한하는 것은 일반적인 요구 사항입니다. 이 게시물에서는 Edge 컴퓨팅을 사용하여 IP 허용/거부 목록을 구현하는 방법을 보여 드리겠습니다. 먼저 Cloudflare 작업자를 소개하겠습니다.
Cloudflare 작업자
Cloudflare 작업자는 최근 몇 년 동안 상당히 인기 있는 기술입니다. 2017년에 공개되었으며 Cloudflare KV 스토리지는 2019년에 공개되었습니다.
Cloudflare 작업자 또는 KV 저장소에 대한 자세한 내용은 다루지 않고 간단히 설명하겠습니다. Cloudflare 작업자를 사용하면 모든 http 요청 에지 레벨을 가로챌 수 있고 코드 스니펫을 실행하고 요청/응답을 조작할 수 있습니다. 또한 KV 저장소를 사용할 수도 있습니다. Cloudflare 작업자 내에서 기본적으로 사용할 수 있는 put/get 사전을 만들 수 있습니다. 놀이터 환경을 빠르게 시도할 수 있습니다. 매우 간단하고 원클릭 테스트 환경입니다.
Cloudflare KV Storage 외에도 개발자는 고급 데이터 구조가 필요할 수 있습니다. 또한 외부에서 KV 스토리지에 액세스하려고 할 수도 있습니다(예:백엔드, API 또는 SDK 클라이언트). 그래서 최근에 REST Api Upstash를 활성화했습니다.
이제 다음을 사용하여 Upstash Redis 데이터베이스에 액세스할 수 있습니다.
- Cloudflare 작업자의 Upstash Rest API
- 명령줄 터미널의 redis-cli
- 특정 프로그래밍 언어의 모든 redis 클라이언트
connect
을 클릭하세요. 일부 샘플 코드 스니펫 및 샘플 명령에 대한 데이터베이스 세부정보 페이지의 버튼
Cloudflare 작업자를 사용하여 작은 애플리케이션을 만들고 Upstash Redis Rest API를 함께 탐색해 봅시다.
애플리케이션
Redis를 소스로 사용하는 Cloudflare 작업자의 IP 허용/거부
전제 조건
- 서버리스 Redis 데이터베이스(Upstash 콘솔에서 생성 가능)
- Cloudflare 계정 또는 CF Playground를 사용할 수 있습니다.
- 기본 자바스크립트 지식
- 기본 Cloudflare 작업자 지식
:::note글로벌 데이터베이스 선택 Upstash 데이터베이스를 만드는 동안. 글로벌 데이터베이스는 데이터를 여러 지역에 복제하여 에지 기능의 지연 시간을 줄입니다.:::
Cloudflare 작업자를 만들고 요청을 가로채자. 작업자를 만들면 샘플 코드와 함께 자동으로 제공됩니다.
구현
방문자의 IP 주소를 알아봅시다:
async function handleRequest(request) {
const ip = request.headers.get("cf-connecting-ip");
return new Response(ip);
}
헤더에서 방문자 IP 주소를 얻을 수 있습니다. 이제 이 IP 주소가 허용 목록에 있는지 확인하고 싶습니다. REST API를 한 번 호출하고 코드를 개선해 봅시다.
async function handleRequest(request) {
const ip = request.headers.get("cf-connecting-ip");
res = await fetch(
"https://YOUR_DATABASE_ENDPOINT/sismember/allowed-set/" +
ip +
"?_token=YOUR_REST_API_TOKEN"
);
if ((await res.text()).includes("1")) {
return new Response(ip + " is allowed.");
}
return new Response(ip + " is not allowed.");
}
이제 Upstash Redis Server에 나머지 API를 호출하고 IP 주소가 목록에 있는지 확인합니다. 결과에 "1"이 포함되어 있으면 목록에 있음을 의미하고 그렇지 않으면 그렇지 않습니다.
다음 명령으로 redis-cli를 사용하여 Redis 세트를 업데이트할 수 있습니다.
sadd allowed-set $IP_ADDRESS
결론 및 향후 작업
이제 rest api를 사용하여 Redis 서버 인스턴스에 액세스할 수 있습니다. 우리는 rest api를 사용하여 거의 모든 명령을 지원하고 있습니다. 자세한 내용은 설명서를 참조하십시오. Cloudflare KV 스토리지를 사용하면 KV 사전 API에만 바인딩되며 타사 응용 프로그램에서 Cloudflare Workers KV에 액세스하는 것이 쉽지 않습니다. 그러나 Redis는 다양한 클라이언트 SDK 및 redis- 클리. 또한 Upstash에서 REST API를 사용하여 Redis 데이터베이스에 액세스할 수 있습니다.
이 간단한 응용 프로그램은 Cloudflare 작업자의 일종의 보안 가드로 확장될 수 있습니다. 사용자는 Redis 데이터베이스에서 구성 값을 변경할 수 있으며 Cloudflare 작업자는 Redis에서 구성을 읽을 수 있습니다.