LoginSignup
7
6

More than 3 years have passed since last update.

ArgoCDのGithubとのSSO連携設定

Last updated at Posted at 2019-07-07

概要

ArgoCDを複数チームで使用しようとした場合、各開発チームに管理ユーザを渡すのではなく、個別のローカルユーザーを渡したい。デフォルトでは管理ユーザしか存在しないので、ローカルユーザーを作成する方法について調査して、試してみた。

結論から書くと、
ArgoCDは組込みのadminユーザ以外に自前でローカルユーザーを作成する手段を持ち合わせていない。
admin以外のユーザはSSOを介してログインさせる必要がある。
SSOを設定する方法は2つ用意されていて

  1. インストール時に同梱されているDexを認証プロバイダとして使用し、Dexのコネクタ機能を利用して外部の認証プロバイダと連携する方法
  2. Dexを使わずに認証プロバイダを直接設定する方法

今回は1.の方法を使ってGithubアカウントでログインできるようにしてみます。

SSO連携設定

今回は連携先をGithubとして、以下のページを参考にしながら進めていきます。

SSO Configuration

ArgoCDをセットアップ

まずは、以前私が書いた記事を参考にログインが確認できる部分までセットアップ。
GCPアカウントが既に有ればクラスタ起動までの待機時間込みで、脳死コピペで10分ぐらいでセットアップできます。

Github(設定するIDプロバイダ)にArgoCDを登録

Githubにログインして、以下のURLにアクセス。
https://github.com/settings/developers

OAuth Apps -> Register a new applicationと進む。

Cut2019_0707_1003_34.jpg

必要な情報を入力して、Regiter applicationをクリック。

callback URLの形式は/api/dex/callbackであること。

Cut2019_0707_1006_58.jpg

登録が完了すると、OAuth2クライアントIDとシークレットが発行される。(既に削除済みなのでSecretも公開していく)

Cut2019_0707_1009_39.jpg

ArgoCDにSSO連携設定

SSOの連携先を設定するために、argocdのconfigmapを編集する。
本当はArgoCD自体もGitOpsでやりたい。。その方法はまた今度。

kubectl edit configmap argocd-cm -n argocd

以下の設定を追加しました。
clientSecretは別途暗号化したほうが良いです。今回はそのまま書きました。

data:
  #ArgoCDのURL
  url: https://35.221.69.97
  dex.config: |
    connectors:
      - type: github
        id: github
        name: GitHub
        #先ほど取得したIDとシークレットを記入
        config:
          clientID: 183d1478019b1b089c78
          clientSecret: 523641358a11ac37434bd92dd234e465b72bb305

あとは自動で反映されます。

ArgoCDにGithubアカウントでログイン

ArgoCDにアクセスします。
これまで無かったLOGIN VIA GITHUBなる文字が追加されました。クリックしてみます。

Cut2019_0707_1020_35.jpg

Githubアカウントで認証するかの確認を求められます。進めます。
Cut2019_0707_1021_19.jpg

Githubアカウントでログインできました!
Cut2019_0707_1034_03.jpg

オマケ:ログインログの確認

監査対応のためにログインのログも確認する必要がありますよね。
podの標準出力を確認して、ログを吐いているか確認します。

$ kubectl get pod -n argocd
NAME                                            READY   STATUS    RESTARTS   AGE
argocd-application-controller-9c45ddc4c-v82th   1/1     Running   2          71m
argocd-dex-server-7b9ccb486-w2ljp               1/1     Running   0          71m
argocd-redis-ha-server-0                        2/2     Running   0          71m
argocd-redis-ha-server-1                        2/2     Running   0          70m
argocd-redis-ha-server-2                        2/2     Running   0          70m
argocd-repo-server-5994b64ccb-2drhx             1/1     Running   0          71m
argocd-repo-server-5994b64ccb-v7vgw             1/1     Running   0          71m
argocd-server-569c655c64-cxwx4                  1/1     Running   0          71m
argocd-server-569c655c64-dqvp5                  1/1     Running   0          71m

まずは、OIDCプロバイダとの連携を担当している、dexサーバのログを確認してみます。

$ kubectl logs argocd-dex-server-7b9ccb486-w2ljp -n argocd
###一部省略
time="2019-07-07T01:31:25Z" level=info msg="login successful: connector \"github\", username=\"ssbtn\", email=\"aaaaa\", groups=[]"

githubアカウントでログインした際のログは確認できていますね。
ただ、adminアカウントでログインした際のログはありませんでした。
次に有用なログが有りそうなargocd-serverのログを確認してみます。

$ kubectl logs argocd-server-569c655c64-dqvp5 -n argocd
###一部省略
time="2019-07-07T01:44:40Z" level=info msg="received streaming call /application.ApplicationService/Watch" grpc.method=Watch grpc.request.claims="{\"iat\":1562463880,\"iss\":\"argocd\",\"nbf\":1562463880,\"sub\":\"admin\"}" grpc.request.content="resourceVersion:\"\" " grpc.service=application.ApplicationService grpc.start_time="2019-07-07T01:44:40Z" span.kind=server system=grpc


time="2019-07-07T01:46:23Z" level=info msg="received streaming call /application.ApplicationService/Watch" grpc.method=Watch grpc.request.claims="{\"at_hash\":\"qL7WGdPxHJ5K3vkBwGz44w\",\"aud\":\"argo-cd\",\"email\":\"aaaaaaa\",\"email_verified\":true,\"exp\":1562550382,\"iat\":1562463982,\"iss\":\"https://35.221.69.97/api/dex\",\"name\":\"ssbtn\",\"sub\":\"Cgg0NzkzNTU3NRIGZ2l0aHVi\"}" grpc.request.content="resourceVersion:\"\" " grpc.service=application.ApplicationService grpc.start_time="2019-07-07T01:46:23Z" span.kind=server system=grpc

adminのログインも含めて、ArgoCDの操作に関する諸々のログがargocd-serverに吐かれていました。
ただ、今回は冗長構成にしているので、どちらに吐かれるか分からず見づらかったです。。やっぱり、コンテナのログは生で見るものじゃないですね。

所感

SSOの連携先はOIDCプロバイダーやLDAPであれば何でも良いので、エンタープライズで利用する場合はプライベートクラウドやオンプレに立てたGitOpsをするためのGitlabサーバが有力な連携先になるのかなと思いました。

GitOpsをするに当たり、前提としてGithubやGitlabのアカウントが存在することになります。
ローカルユーザーの管理は作成機能を持たせずに、SSO連携のみに絞っていて、不用意にユーザ管理が多重化するのを防いでおり、クールだなと思いました。

参考

SSO Configuration

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6