👌

ArgoCDにGoogleアカウントでログインできるようにする(OAuth・OIDC)

2023/10/04に公開

記事の内容

ArgoCDにGoogleアカウントを使ってログインできるように設定します。

記事を読むと得られるもの

  • ArgoCDにGoogleログインを導入できます

対象読者

  • ArgoCDユーザー
  • ArgoCDにGoogle Loginを導入したい人

記事の長さ

3分で読めます

ArgoCDにGoogleログインを実装する

ArgoCDを準備する

https://zenn.dev/ring_belle/articles/2c4bbe4365b544

ArgoCD自体をKubernetesに導入するフローは割愛致します。上記記事に、以前、GKE上でArgoCDを導入する方法をまとめましたので、クラスター自体がまだない人は参照してください。

GCP Project上でOAuthの準備をする

https://console.cloud.google.com/apis/credentials/consent

ArgoCD-Google-Login

GCP上でOAuthの設定を行います。(上記リンクをクリックすると、OAuthの設定画面に飛びますので、このページで設定を進めます。)

上記の設定(Internal or External)を進めると、Oauth consent screenを設定する画面に進みます。

ArgoCD-Google-Login

  • App Name
  • User Support Email
  • Developer contact information

等は自由に入力していただき、

  • Authorized domains

に許可したいドメイン名を入力してください。もし、example.devというドメインを許可した場合、taro@example.devhanako@example.dev といったメールアドレスがログイン対象になります。

Scopes画面

OAuth consent screen画面の設定を終えると、Scopes画面に遷移します。

ArgoCD-Google-Login

ADD OR REMOVE SCOPESボタンを押し、以下の二つを選択します。

  • .../auth/userinfo.profile
  • openid

ArgoCD-Google-Login

以上にて、GCP Project上のOAuth consent screenの設定は完了です。

OAuth Client IDを設定する

次に、再度GCP上で、OAuth Client IDを設定します。

https://console.cloud.google.com/apis/credentials

こちらにアクセスし、Create Credentials ボタンをクリック、OAuth client ID を選択します。

ArgoCD-Google-Login

  • Application typeWeb applicationを選択
  • Nameは任意の値を入力
  • Authorized JavaScript originsにArgoCDのDashboardのURLを入力(ローカルの場合は、https://localhost:8080)
  • Authorized redirect URIsには、URL + /api/dex/callbackを入力(ローカルの場合は、https://localhost:8080/api/dex/callback)

上記設定にて、作成します。

ArgoCD-Google-Login

作成すると、ClientIDやClientSecretが画面に表示されるため、メモしておきます(後ほど利用します)

ArgoCDにOpenID Connectを設定する

GCP上で作成したClientIDとClientSecretをArgoCD上に設定していきます。

OIDCをArgoCDに適用するために、argocd-cmという名称のConfigMapに以下のValueを追加します。

data:
  url: https://localhost:8080
  dex.config: |
    connectors:
    - config:
        issuer: https://accounts.google.com
        clientID: XXXXXXXXXXXXX.apps.googleusercontent.com
        clientSecret: XXXXXXXXXXXXX
      type: oidc
      id: google
      name: Google

直接、クラスターの中の値を変更する場合、以下のようなコマンドで実行可能です。

$ kubectl edit configmaps argocd-cm -n argocd

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  ...
# 以下にOIDCの設定を追加する(URLとclientIDとclientSecretは要件に合わせて変更する)
data:
  dex.config: |
    connectors:
    - config:
        issuer: https://accounts.google.com
        clientID: XXXXXX.apps.googleusercontent.com
        clientSecret: XXXX
      type: oidc
      id: google
      name: Google
  url: https://localhost:8080

上記設定が正しく反映されると、以下の画像のように、LOG IN VIA GOOGLEというボタンが表示されます。

ArgoCD-Google-Login

Loginしてみる

LOG IN VIA GOOGLEというボタンをクリックして、ドメインに登録したメールアドレスでGoogle認証を行うと、無事ログインできることが確認できます。

$ kubectl logs deployments/argocd-dex-server -n argocd
...
time="2023-10-04T02:42:51Z" level=info msg="login successful: connector \"google\", username=\"Name\", preferred_username=\"\", email=\"y.sakakibara@<domain name>\", groups=[]"

※ドメインに登録していないメールアドレスでログインを試みると失敗します。

Google以外のログインを禁止する

data:
  admin.enabled: "false"

を、argocd-cmConfigmapに追加すると、useridとpasswordによるログインができなくなります。

ArgoCD-Google-Login

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion