Argo CD поддерживает локальную аутентификацию, а также интегрирован с подсистемой идентификации и доступа Deckhouse Kubernetes Platform. В документации DKP можно подробнее узнать о настройке аутентификации и авторизации.
Если в объекте ArgoCD не заданы дополнительные настройки, по умолчанию активна локальная учётная запись admin с ролью admin.
Об управлении полномочиями пользователей и групп можно узнать в разделе «Настройка ролевой модели доступа».
Локальная аутентификация
При создании объекта ArgoCD автоматически создаётся пользователь admin с ролью admin. Пароль пользователя admin генерируется автоматически. Чтобы получить его, выполните команду:
d8 k -n argocd get secret argocd-cluster -o jsonpath='{.data.admin\.password}' | base64 -d
Создание дополнительных локальных пользователей
При создании локального пользователя можно определить, будут ли у него права на доступ к веб-интерфейсу Argo CD (атрибут login) и/или к API Argo CD (атрибут apiKey).
Чтобы создать локальных пользователей, задайте параметр spec.localUsers ArgoCD, например:
d8 k create -f - <<EOF
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: argocd
namespace: argocd
spec:
localUsers:
# Пользователь "deploy" с правами на вход в веб-интерфейс и генерацию токенов.
- name: deploy
apiKey: true
login: true
enabled: true
# Пользователь "ci-bot" только для автоматизации, без доступа к веб-интерфейсу.
- name: ci-bot
apiKey: true
login: false
enabled: true
EOF
После создания пользователя и применения манифеста объекта ArgoCD сгенерируйте пароль для доступа к веб-интерфейсу, если пользователю выданы соответствующие права.
Чтобы задать пароль через Secret, сначала вычислите его bcrypt-хеш, а затем закодируйте результат в Base64:
ARGOCD_USER=<USER_NAME>
ARGOCD_PASS=$(echo -n '<USER_PASSWORD>' | htpasswd -BinC 10 "" | cut -d: -f2 | tr -d '\n' | base64 -w0)
d8 k -n argocd patch secret argocd-secret -p "{\"data\":{\"accounts.$ARGOCD_USER.password\":\"$ARGOCD_PASS\"}}"
Пароль локального пользователя можно задать или изменить с помощью CLI-утилиты argocd:
argocd login <ARGOCD_DOMAIN>:443 --username admin --password <ADMIN_PASSWORD>
argocd account update-password \
--account <ACCOUNT> \
--current-password <ADMIN_PASSWORD> \
--new-password <NEW_PASSWORD>
Создание пользовательского токена
Для работы с API у пользователя должны быть соответствующие права (параметр apiKey, пример в разделе выше). Чтобы выпустить токен, используйте веб-интерфейс Argo CD или CLI-утилиту argocd.
Чтобы выпустить токен через веб-интерфейс, перейдите в раздел «Settings» → «Accounts», выберите нужного пользователя и нажмите «Generate New» в разделе «Tokens».
Чтобы выпустить токен с помощью CLI-утилиты argocd, выполните команды (укажите необходимые значения):
argocd login <ARGOCD_DOMAIN>:443 --username admin
argocd account generate-token --account <ACCOUNT>
Если у пользователя нет прав на доступ к веб-интерфейсу (login), токен для него может выпустить другой пользователь с правами администратора.
Отключение локальной аутентификации
Чтобы отключить локальную аутентификацию, отключите пользователя admin, задав параметру spec.disableAdmin ArgoCD значение true. Также удалите всех дополнительных локальных пользователей, если они были созданы ранее (подробнее — в разделе «Создание дополнительных локальных пользователей»).
После отключения локальной аутентификации проверьте правила доступа в разделе «Настройка ролевой модели доступа».
Аутентификация с помощью SSO
Перед настройкой объекта ArgoCD создайте объект DexClient, который используется в качестве OAuth2-клиента. Он необходим для интеграции с Deckhouse Kubernetes Platform:
d8 k create -f -<<EOF
apiVersion: deckhouse.io/v1
kind: DexClient
metadata:
name: argocd
namespace: argocd
spec:
redirectURIs:
- https://<ARGOCD_DOMAIN>/api/dex/callback
- https://<ARGOCD_DOMAIN>/api/dex/callback-reserve
EOF
<ARGOCD_DOMAIN> — это полное доменное имя (Fully Qualified Domain Name, FQDN), заданное в секции .spec.server.host ArgoCD.
Дождитесь, пока Deckhouse Kubernetes Platform создаст Secret с секретным ключом для клиента:
d8 k -n argocd get secret/dex-client-argocd
Настройте объект ArgoCD на использование SSO в Deckhouse Kubernetes Platform:
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: argocd
namespace: argocd
spec:
rbac:
scopes: "[groups, email]"
sso:
dex:
config: |
connectors:
- type: oidc
id: deckhouse
name: deckhouse
config:
issuer: "https://dex.<CLUSTER_DOMAIN>/"
clientID: "dex-client-argocd@argocd"
clientSecret: "$dex-client-argocd:clientSecret"
insecureEnableGroups: true
scopes:
- profile
- email
- openid
- groups
provider: dex
server:
host: <ARGOCD_DOMAIN>
ingress:
enabled: true
ingressClassName: <INGRESS_CLASS_NAME>
tls:
- hosts:
- <ARGOCD_DOMAIN>
secretName: argocd-ingress-tls
insecure: true
Перезапустите сервер Argo CD:
d8 k -n argocd rollout restart deploy/argocd-server
Если не перезапустить сервер Argo CD, попытка входа завершится ошибкой, а в журнале сервера Argo CD появится сообщение об ошибке (issue argoproj/argo-cd#13526).
Использование самоподписного сертификата
Предварительно получите самоподписанный сертификат, используемый подсистемой идентификации и доступа Deckhouse Kubernetes Platform:
d8 k -n d8-user-authn get secret ingress-tls -o jsonpath='{.data.tls\.crt}' | base64 -d
Затем добавьте полученный сертификат в конфигурацию OIDC-коннектора, указав его в секции rootCAs ArgoCD:
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: argocd
namespace: argocd
spec:
sso:
dex:
config: |
connectors:
- type: oidc
id: deckhouse
name: deckhouse
config:
issuer: "https://dex.<CLUSTER_DOMAIN>/"
rootCAs:
- |
-----BEGIN CERTIFICATE-----
<Самоподписанный сертификат, полученный на предыдущем шаге>
-----END CERTIFICATE-----
clientID: "dex-client-argocd@argocd"
clientSecret: "$dex-client-argocd:clientSecret"
insecureEnableGroups: true
scopes:
- profile
- email
- openid
- groups
provider: dex
server:
host: <ARGOCD_DOMAIN>
ingress:
enabled: true
tls:
- hosts:
- <ARGOCD_DOMAIN>
secretName: argocd-ingress-tls
insecure: true
Создание пользовательского токена
Argo CD не позволяет выпускать бессрочные токены для пользователей, аутентифицированных с помощью SSO. При этом такие пользователи могут использовать CLI-утилиту argocd, указав при аутентификации флаг --sso:
argocd login <ARGOCD_DOMAIN>:443 --sso
При выполнении этой команды на рабочей станции администратора будет запущен веб-браузер с формой аутентификации в Deckhouse Kubernetes Platform.
Чтобы выпустить бессрочный токен, создайте локального пользователя Argo CD и укажите для него атрибут apiKey. В этом случае у пользователя будут права доступа только к Argo CD API. Подробнее — в разделе «Создание дополнительных локальных пользователей».