Argo CDでGitLab SSOを利用する
Argo CDは自前でユーザ管理の仕組みを持たず*1,外部のIdentity Providerに認証を移譲するという設計思想になっています.Argo CDのHelm chartにはDexがバンドルされており,様々なIdentity Providerと連携させることが可能です.本稿では,Argo CDでGitLab SSOを利用する方法を紹介します.
Argo CDはOpenID Connectに対応しています.また,GitLabは自身がOpenID Connect Identity Providerになることが可能です.しかし,Argo CDが必要とする groups
claimをGitLabがサポートしていないため,直接連携させることはできません.Argo CDのoidc configでGitLabを指定すると,GitLabで以下のエラーが表示されます(argo-cd#1195).
The requested scope is invalid, unknown, or malformed
代わりに,DexのGitLab connectorを利用することで,Argo CD→Dex→GitLabの流れで連携が可能です.
GitLabの設定
admin area→Applicationsもしくはユーザの設定→Applicationsから,新しいアプリケーションを作成します.以下のように設定します.
- Name: 任意
- Redirect URI:
https://argocd.example.com/api/dex/callback
- Scopes:
read_user
,openid
Dex GitLab connectorではOAuth2を利用するとの記述がありますが,実際はOpenID Connectが利用されるようです.openid
スコープを許可しないとエラーになります.
Argo CDの設定
Helmfileを利用する場合は以下のように設定します.
repositories: - name: argo url: https://argoproj.github.io/argo-helm releases: - name: argocd namespace: argocd chart: argo/argo-cd values: - config: url: https://argocd.example.com dexConfig: connectors: # GitLab SSO - type: gitlab id: gitlab name: GitLab config: baseURL: https://gitlab.com clientID: xxxxxxxx clientSecret: xxxxxxxx rbac: # assign the admin role to everyone policyDefault: role:admin
上記ではすべてのユーザにadminロールを割り当てていますが,GitLabグループに応じてアクセス制御を行うとよいでしょう.
動作確認
下図のように LOGIN VIA GITLAB ボタンが表示されるはずです.ボタンをクリックし,GitLabの同意画面が表示された後,ログインできれば成功です.
See Also
- Argo CD and Dex
- GitLab SSO
*1:ローカルでは組み込みのadminユーザのみ利用できます.