Dex Expiration Time on Openshift Gitops

ArgoCD 頁面自動登出設定

本文介紹如何在 ArgoCD 中設置自動登出功能。這有助於提高安全性,避免未經授權的存取。

ArgoCD 認證機制:

login

修改流程:

operator

環境描述

近期由於客戶需要導入 ArgoCD 管理 CRDs,因此在客戶的 Openshift 4.x 上安裝 GitOps Operator。安裝後發現了一個問題,ArgoCD 的 Web 介面需要約 24 小時後才會自動登出,客戶希望調整登出時間。

home

從上圖可得知,ArgoCD 的 web 會再登入後產生一把 token 並放到 cookie 內,名為 argocd.token,我們可以透過 jwt.io 解析這把 token,查看 expiration date:

token

在沒有做任何設定的情況下,透過 Openshift 帳密使用 SSO 登入機制進入 ArgoCD 畫面,所產生的 token 過期時間應該是 24h 後,這是因為 ArgoCD 在 SSO 認證上是交給 Dex Server 控制,而 Dex Server 的預設過期時間是 24h

pod

可以從 ArgoCD 的 Security 文章查看 Dex Server 的說明:

argo-doc

尋找方法

ArgoCD Operator 會透過 Kind: ArgoCD 的 CRD ,名為 openshift-gitops,產生需要的 components,如 server、applicationSet、grafana…:

crd

而 ArgoCD Operator 會將 CRD 上的設定轉換成 configmap,名為 argocd-cm:

configmap

可以從 argocd-cm 看到有關 Dex Server 的設定,其中的 connector 是透過 openshift-gitops 內的 sso.dex.openShiftOAuth 參數產生的:

config

connectors:
    - config:
        clientID: system:serviceaccount:openshift-gitops:openshift-gitops-argocd-dex-server
        clientSecret: $oidc.dex.clientSecret
        groups: []
        insecureCA: true
        issuer: https://kubernetes.default.svc
        redirectURI: https://openshift-gitops-server-openshift-gitops.apps.ocp.olg.online.com/api/dex/callback
        id: openshift
        name: OpenShift
        type: openshift

在 ArgoCD Operator 的文件上有寫道 Dex Options 可以設定的值,我們可以將將設定放在 openshift-gitopsdex.config,但這個會導致 sso.dex.openShiftOAuth 的設定失效:

dex-options

修改設定

參考在 Dex Server 的 github 上的 example/config-dev.yaml:

dex-github

在 Dex 的官網中有針對 expiry 參數的說明,可以看到只需要調整 idTokens,便可以修改 token 過期時間:

expiration-setting

複製原本的 connector 的內容,並加入 expiry 的設定,一同寫入 sso.dex.config 上 (需自行新增):

expiry

sso:
  dex:
    config: |
      expiry:
        idTokens: "10h"
      connectors:
      - config:
          clientID: system:serviceaccount:openshift-gitops:openshift-gitops-argocd-dex-server
          clientSecret: $oidc.dex.clientSecret
          groups: []
          insecureCA: true
          issuer: https://kubernetes.default.svc
          redirectURI: https://openshift-gitops-server-openshift-gitops.apps.ocp.olg.online.com/api/dex/callback
        id: openshift
        name: OpenShift
        type: openshift
...

結果

儲存設定後,會看到 Managed resource 的警告,無須理會,修改 ArgoCD 的 CRD 並不會被 overwrite:

alert

ArgoCD Operator 會更新 argocd-cmdex.config:

new-config

等待 Dex Server 的 pod 重啟後再次登入 Web 介面,可以看到 jwt token 的 expiration date 已被調整,在過期後會自動登出:

signout

Reference