プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

Argo CDのSSO設定をしてLDAPでログインできるようにしてみた

仕事でNomad環境からkubernetes環境への移行を進めていて、その流れでkubernetesのエコシステムを調べており、今はCI/CD周りを重点的に調べていて、その関係でArgo CDの調査をしています。

https://argoproj.github.io/argo-cd/

個人的にはkubernetesクラスタにデプロイしやすく、kustomizeとも連携してデプロイできたり、Web UIだけでなくCLIもちゃんとついていたりと、kubernetes用のCDシステムとして生まれただけあって、筋のいいソフトウェアだなと思いながら調査しています。

実運用にはいるときには認証・認可が問題になるので、最近はその辺りを調べているのですが、そこで中々パッとは分からなかったことがあるので覚え書きをメモして残そうと思い、記事を書きました。

Argo CDのログインをLDAPでやりたいとなったときにすること

私の職場ではあらゆる場面でLDAPを利用するようになっているので、Argo CDのSSOもLDAPでできるならやりたいところなので調べました。

Argo CD does not have any local users other than the built-in admin user. All other users are expected to login via SSO. There are two ways that SSO can be configured:

  • Bundled Dex OIDC provider - (以下略)

  • Existing OIDC provider - (以下略)

Argo CDの公式ドキュメントに書かれているように、Argo CD自体はadmin以外のユーザー管理をせず、他のユーザーを使いたい場合は組み込みのdexを使用するか、OktaやAuth0やOneLoginなど外部のOIDC Providerを使うかの2通りのやり方があります。

私のケースの場合、既にLDAPサーバーはあり、そのデータを使って管理をしたいので、組み込みのdexと連携させる必要があったのですが、Argo CDの方はgithub連携の例しか書いておらず、LDAPと連携したい場合は下記のdexのLDAP連携の記事と合わせて理解する必要があって、どうやっていいのかよく分かりませんでした。

https://github.com/dexidp/dex/blob/master/Documentation/connectors/ldap.md

結局最終的にどうやればいいのかよく分からなかったのですが、github連携の例を自分で試した後、「github連携の例で kubectl edit configmap argocd-cm -n argocd で変更しているConfigMapの値を、dexのLDAP connectorに記載されたフォーマットでLDAPの情報を書いてやればいいんだろうな」と分かったので試したところ、上手くいきました。

どんな値を入れたかというと、以下のような値です。LDAPサーバーのホストが yourldaphost 、LDAPサーバーが使用するportが 37685 、Argo CDのURLが https://localhost:8080 の時、以下のように書けば私のニーズは満たせました。

data:
  url: https://localhost:8080
  dex.config: |
    connectors:
    - type: ldap
      # Required field for connector id.
      id: ldap
      # Required field for connector name.
      name: LDAP
      config:
        host: yourldaphost.com:37685
        bindDN: cn=viewer,dc=yourldap,dc=com
        bindPW: <masked>
        usernamePrompt: LDAP Username
        userSearch:
          baseDN: dc=yourldap,dc=com
          username: uid
          idAttr: uid
          emailAttr: mail
          nameAttr: displayName

DexのLDAP connectorのドキュメントを見る限り、グループとかの設定も含めて細かく設定する場合は、LDAPの知識も必要になりそうな感じですが、単純なLDAP連携でいいならこんな感じでやればよさそうです。

LDAP連携だけだと権限はまだ設定していないので、,LDAPのユーザーやグループ毎に違う権限を設定したい場合はArgo CDのRBACの設定がおそらく必要なのでしょう。

引き続きArgo CDの使い方を調べていきたいと思います。