Argo CD に GitHub でログインできるようにする
検証環境
- Argo CD - v2.4.0
- kubectl - v1.24.2
- Kubernetes - v1.23.6
準備
こちらの記事を参考に、 Kubernetes クラスタに Argo CD をインストールします。
Argo CD API サーバーをポートフォワーディングしてアクセスできるようにしておきます。
$ kubectl port-forward svc/argocd-server -n argocd 8080:443
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
https://localhost:8080 にアクセスして Argo CD の UI が表示されれば OK です。
GitHub OAuth Application を作成する
https://github.com/settings/applications/new にアクセスします。
画面から移動する場合の操作手順
メニュー → Settings
の順にクリック。
Developer settings
をクリック。
OAuth Apps
をクリック。
Register a new application
をクリック。
Application name
, Homepage URL
, Authorization callback URL
にそれぞれ以下のように入力します。
項目 | 値 |
---|---|
Application name | 任意のアプリケーション名。 今回は Argo CD SSO Example にしておきます。 |
Homepage URL | Argo CD API サーバーの URL 。 今回は https://localhost:8080 。 |
Authorization callback URL |
{Argo CD APIサーバーのURL}/api/dex/callback 。今回は https://localhost:8080/api/dex/callback 。 |
上記を入力したら Register application
をクリック。
Generate a new client secret
をクリック。
Client Secret が生成されます。
Client ID と Client Secret は後で必要になるため、ひかえておきます。
Argo CD の設定を更新
argocd-cm
ConfigMap に SSO の設定を追加します。
今回は kubectl edit
を使って直接編集します。
$ kubectl -n argocd edit configmap argocd-cm
data:
に以下のような設定を追加します。
# ...省略
data:
url: https://localhost:8080 # Argo CD API サーバーの URL
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: 09d37046939e752024ab # OAuth Application の Client ID
clientSecret: eb025cb0e8d948f4f3a9ee585dfdc83581f8c14d # OAuth Application の Client Secret
# ...省略
GitHub でログインする
CLI 経由
argocd login {Argo CD API サーバー} --sso
を実行するとブラウザが立ち上がり、認可画面が表示されます。
$ argocd login localhost:8080 --sso
Opening browser for authentication
Performing authorization_code flow login: https://localhost:8080/api/dex/auth?access_type=offline&client_id=argo-cd-cli&code_challenge=********&code_challenge_method=S256&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2Fauth%2Fcallback&response_type=code&scope=openid+profile+email+groups+offline_access&state=********
Authorize {ユーザー名}
をクリック。
認可画面
認可に成功すると成功画面が表示されます。
この画面はもう閉じて大丈夫です。
認可成功画面
コンソールには以下のようなログが表示されます。
Authentication successful
'kou.pg.0131@gmail.com' logged in successfully
Context 'localhost:8080' updated
UI 経由
https://localhost:8080/login にアクセスすると LOG IN VIA GITHUB
ボタンが表示されているので、クリックします。
ログイン画面
認可画面が表示されます。
Authorize {ユーザー名}
をクリック。
認可画面
ログインできました。
ログイン直後の画面
Client Secret を Secret に入れる
Client Secret の値を argocd-cm
ConfigMap にそのまま入れておくのはセキュリティ上あまりよろしくないので、 Secret に入れます。
Argo CD では argocd-secret
Secret を使って任意の機密データを保存できます。
詳しい説明は公式ドキュメントをご参照ください。
今回は kubectl edit
を使って直接編集します。
$ kubectl -n argocd edit secret argocd-secret
data:
に dex.github.clientSecret: {Client SecretをBase64エンコードした値}
を追加します。
# ...省略
data:
# $ echo -n eb025cb0e8d948f4f3a9ee585dfdc83581f8c14d | base64
dex.github.clientSecret: ZWIwMjVjYjBlOGQ5NDhmNGYzYTllZTU4NWRmZGM4MzU4MWY4YzE0ZA==
# ...省略
最後に argocd-cm
ConfigMap を、上記の argocd-secret
の値を参照するように更新します。
$ kubectl -n argocd edit configmap argocd-cm
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: 09d37046939e752024ab
- clientSecret: eb025cb0e8d948f4f3a9ee585dfdc83581f8c14d
+ clientSecret: $dex.github.clientSecret
参考
Discussion