Kong Authorization
**kong-authz**는 lua-casbin을 사용하여 요청 승인을 수행하는 Kong 플러그인입니다. 평소처럼 모델과 정책을 정의하면 플러그인이 Kong 라우트에서 이를 적용합니다.
사전 요구 사항
- Kong
- 4daysorm-adapter(선택 사항, 데이터베이스 기반 정책 저장소용)
- luasql-adapter(선택 사항, 데이터베이스 기반 정책 저장소용)
기본적으로 정책은 파일에서 로드됩니다. 데이터베이스 기반 정책을 사용하려면 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을 수행할 수 있는지를 결정합니다. 이 플러그인에서는:
- subject: 요청 헤더에 전달된 로그인한 사용자 이름
- object: 리소스에 대한 URL 경로(예: "dataset1/item1")
- action: HTTP 메서드 (GET, POST, PUT, DELETE) 또는 "read-file", "write-blog"과 같은 사용자 지정 작업
정책 작성 세부 정보는 Casbin 문서를 참조하세요.
예제 구성
서비스에 대해 kong-authz를 구성하는 완전한 예제:
- 예제 서비스 생성:
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org'
- 서비스용 라우트 생성:
curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'hosts[]=example.com'
- 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'
- 요청으로 권한 부여 테스트:
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.