GeekFactory

int128.hatenablog.com

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の同意画面が表示された後,ログインできれば成功です.

f:id:int128:20191003133428p:plain

See Also

*1:ローカルでは組み込みのadminユーザのみ利用できます.