Перейти к основному содержимому

**Kong Authorization**

kong-authz — это плагин Kong, выполняющий авторизацию запросов с помощью lua-casbin. Вы определяете модели и политики как обычно; плагин применяет их к маршрутам 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

Установите последний релиз Casbin из LuaRocks:

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

Добавьте плагин в ваш kong.conf, дописав kong-authz (через запятую) к переменной plugins:

# kong.conf
plugins = bundled, kong-authz

Запустите или перезапустите Kong:

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

Конфигурация​

Настройте этот плагин на уровне сервиса, API или глобально через Admin API Kong.

Хранение политик в файлах​

Глобальная настройка с использованием политик в файлах:

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 может выполнять какое action над каким object. В этом плагине:

  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'

При первом запуске это создает объект Enforcer Casbin, используя указанные пути к модели и политике. Любая ошибка, отличная от 500, указывает на успешную настройку. При ошибках 500 проверьте файл error.log в вашей установке Kong.

Ресурсы​

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