본문으로 건너뛰기

Kong Authorization

**kong-authz**는 lua-casbin을 사용하여 요청 승인을 수행하는 Kong 플러그인입니다. 평소처럼 모델과 정책을 정의하면 플러그인이 Kong 라우트에서 이를 적용합니다.

사전 요구 사항​

정보

기본적으로 정책은 파일에서 로드됩니다. 데이터베이스 기반 정책을 사용하려면 4daysorm-adapter 또는 luasql-adapter 중 하나를 설치하세요.

설치​

Casbin의 시스템 의존성을 설치합니다:

  • apt가 있는 시스템의 경우:
sudo apt install gcc libpcre3 libpcre3-dev
  • Alpine 기반 시스템의 경우:
sudo apk add gcc pcre pcre-dev libc-dev

LuaRocks에서 Casbin의 최신 릴리스를 설치합니다:

sudo luarocks install casbin

kong-authz 플러그인을 설치합니다:

sudo luarocks install https://raw.githubusercontent.com/casbin-lua/kong-authz/master/kong-authz-0.0.1-1.rockspec

plugins 변수에 kong-authz(쉼표로 구분)를 덧붙여 kong.conf에 플러그인을 추가합니다:

# kong.conf
plugins = bundled, kong-authz

Kong을 시작하거나 재시작합니다:

kong start [-c /path/to/kong.conf]

구성​

Kong Admin API를 통해 서비스, API 또는 전역 수준에서 이 플러그인을 구성합니다.

파일 기반 정책 저장소​

파일 기반 정책으로 전역 구성:

curl -i -X POST \
--url http://localhost:8001/plugins/ \
--data 'name=kong-authz' \
--data 'config.model_path=/path/to/model_path.conf' \
--data 'config.policy_path=/path/to/policy_path.csv' \
--data 'config.username=user'

LuaSQL을 사용한 데이터베이스 정책 저장소​

LuaSQL 어댑터를 사용하여 특정 서비스용으로 구성:

curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=kong-authz' \
--data 'config.model_path=/mnt/kong/examples/authz_model.conf' \
--data 'config.username=user' \
--data 'config.adapter=luasql' \
--data 'config.db_info.db_type=mysql' \
--data 'config.db_info.database=casbin' \
--data 'config.db_info.username=root' \
--data 'config.db_info.password=********' \
--data 'config.db_info.host=127.0.0.1' \
--data 'config.db_info.port=3306'

4DaysORM을 사용한 데이터베이스 정책 저장소​

4DaysORM 어댑터를 사용하여 특정 서비스용으로 구성:

curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=kong-authz' \
--data 'config.model_path=/mnt/kong/examples/authz_model.conf' \
--data 'config.username=user' \
--data 'config.adapter=4daysorm' \
--data 'config.db_info.db_type=mysql' \
--data 'config.db_info.database=casbin' \
--data 'config.db_info.username=root' \
--data 'config.db_info.password=********' \
--data 'config.db_info.host=127.0.0.1' \
--data 'config.db_info.port=3306'

승인 프로세스​

승인은 {subject, object, action}을 사용하여 요청을 평가하며, 어떤 subject가 어떤 object에 대해 어떤 action을 수행할 수 있는지를 결정합니다. 이 플러그인에서는:

  1. subject: 요청 헤더에 전달된 로그인한 사용자 이름
  2. object: 리소스에 대한 URL 경로(예: "dataset1/item1")
  3. action: HTTP 메서드 (GET, POST, PUT, DELETE) 또는 "read-file", "write-blog"과 같은 사용자 지정 작업

정책 작성 세부 정보는 Casbin 문서를 참조하세요.

예제 구성​

서비스에 대해 kong-authz를 구성하는 완전한 예제:

  1. 예제 서비스 생성:
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org'
  1. 서비스용 라우트 생성:
curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'hosts[]=example.com'
  1. kong-authz 플러그인 적용:
curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=kong-authz' \
--data 'config.model_path=/path/to/authz_model.conf' \
--data 'config.policy_path=/path/to/authz_policy.csv' \
--data 'config.username=user'
  1. 요청으로 권한 부여 테스트:
curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host: example.com' \
--header 'user: anonymous'

첫 번째 실행 시 지정된 모델 및 정책 경로를 사용하여 Casbin Enforcer를 생성합니다. 500이 아닌 오류가 발생하면 구성이 성공한 것입니다. 500 오류의 경우 Kong 설치 디렉터리의 error.log 파일을 확인하세요.

리소스​

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.