Многие компании при внедрении практик gitops выбирают такой инструмент как ArgoCD и сталкиваются с проблемой заведения учетных записей и разграничением прав пользователей. В этой статье мы рассмотрим как настроить авторизацию в ArgoCD через Gitlab CI/CD с разграничением прав по группам.
Предлагаем пройти этот непростой путь по шагам и тогда он станет для вас простым.
Итак, argocd уже установлен и настроен в вашем кластере.
Шаг № 1. Регистрация приложения
В веб интерфейсе нашего Gitlab переходим Menu → Admin → Applications и жмем «New application».
В GitLab зарегистрируйте новое приложение. Адрес обратного вызова должен заканчиваться на https://адрес_вашего_арго/api/dex/callback (например https://argocd.example.com/api/dex/callback).
Необходимые разрешения для работы read_user
и open_id
.
После регистрации приложения вы получите идентификатор приложения и секрет OAuth2. Эти значения будут использованы в конфигмапе Argo CD.
Шаг № 2. Внесение данных
Внесем полученный secret
приложения в secret
с названием argocd-secret
.
Для внесения данных в сущность Secret необходимо сначала перевести нашу строку в base64.
Для этого выполним команду на своем ПК
echo "a5ea922ec71954491e96f42c96999fdd2d9c3d8a1613dc3ef15460cadc7000a0" | base64 —wrap=0
или можно воспользоваться онлайн сервисом (например https://www.base64encode.org/).
Получим в нашем случае такой вывод:
YTVlYTkyMmVjNzE5NTQ0OTFlOTZmNDJjOTY5OTlmZGQyZDljM2Q4YTE2MTNkYzNlZjE1NDYwY2FkYzcwMDBhMAo=
Теперь мы готовы внести нашу строку. Выполним команду в нашем кластере:
kubectl edit secret -n argocd argocd-secret
И добавим после data
:
apiVersion: v1
data:
gitlab.clientSecret: YTVlYTkyMmVjNzE5NTQ0OTFlOTZmNDJjOTY5OTlmZGQyZDljM2Q4YTE2MTNkYzNlZjE1NDYwY2FkYzcwMDBhMAo=
И сохраняем изменения.
Шаг № 3. Правка кофигмапа ArgoCD
Для изменения конфигмапа ArgoCD вводим команду:
kubectl edit configmap argocd-cm -n argocd
После data вводим следующий текст:
data:
dex.config: |
connectors:
- type: gitlab
id: ArgoCD
name: GitLab
config:
baseURL: https://gitlab.example.com
clientID: 8e3a97699cae1c2bce88d871d02e32e53bc473f6ecd437464d9ed27d7f5f1f2d
clientSecret: $gitlab.clientSecret
url: https://argocd.example.com/
где:
id: ArgoCD
— название нашего приложения.name: Gitlab
— название кнопки авторизации через SSO на странице https://argocd.example.com/.baseURL: https://gitlab.example.com
— адрес нашего gitlab.clientID: 8e3a97699cae1c2bce88d871d02e32e53bc473f6ecd437464d9ed27d7f5f1f2d
— id нашего приложения в Gitlab.clientSecret: $gitlab.clientSecret
— secret который мы добавляли в Secret с названием argocd-secret.url: https://argocd.example.com/
- веб адрес ArgoCD.
Шаг № 4. Настройка прав публикаций
Авторизуясь через SSO argocd наследует группы от учетной записи в гитлабе. Следовательно для разграничения прав необходимо назначать группы пользователям в Гитлаб.
Создайте группу в гитлаб к примеру devops и добавьте туда своего пользователя.
Унаследование прав в ArgoCD осуществляется через конфигмап argocd-rbac-cm.
В ArgoCD по умолчанию есть две группы с ролью admin и readonly. Как вы уже догадались роль admin предоставляет полные права, readonly только на чтение. Ниже приведен пример конфига который по умолчанию дает доступ на чтение всем, группе devops — все права так как назначена роль admin и группе gitlab разрешение на чтение, создание, удаление репозитория, чтение кластера, все действия над applications.
Для редактирования прав введем команду:
kubectl edit configmap argocd-rbac-cm -n argocd
И после data:
добавим:
apiVersion: v1
data:
policy.csv: |
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, devops, role:admin
g, gitlab, role:org-admin
policy.default: role:readonly
Сохраняем изменения, ждем пару минут и пробуем авторизоваться.
Жмем login in via gitlab….после чего нас перекинет на старницу авторизации Gitlab. Вводим логин и пароль от Gitlab.
после чего мы должны успешно авторизоваться на argocd.
Перейдя на вкладку User info можно увидеть в каких группах состоит наш пользователь….эти группы подтягиваются из Gitlab.
Поздравляем! Вы получили авторизацию в ArgoCD через Gitlab CI/CD с разграничением прав по группам.