ArgoCDでGithubとのSSOを設定する

# 初めに

この記事は2025/3/6時点での情報です。最新の情報、セキュリティ、権限についてのより詳細な設定については公式ページを参照することを推奨します。

https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/#sso

# 概要

- Argo CDは各種Permission関連の設定項目がありますが、SSOによるアカウントの統合を行う事でユーザーの管理をすべて外部に委託する事が出来ます。
    - SSOを用いる事でArgo CD内部では `github-organization:github-team` という形でグループ化されるため、ArgoCDでの権限管理と組み合わせることで、より効率的な運用が見込めます。
    - ※Argo CDにおいてもSSOの使用が推奨されています。
        
        > So if you need such features it is strongly recommended to use SSO. https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/#local-usersaccounts
        > 
- 今回はGithubを利用したArgo CDでのSSO統合を行います。

# 環境

- Microk8s
- ArgoCD v2.14.4

# githubでOAuthAppを作る

- Github経由で認証を行うには橋渡しとなるOAuthAppを作成します。
- 設定画面メニュー下部にあるDeveloper Settings内にアプリ設定が存在するため、こちらのNew OAuth Appから作成します。
- Argo CDではRepositoryの登録の際にGithub Appを利用できますが、そちらと間違えないようにしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494649/b784ea76-b0d7-4cff-a998-d294b31ae1a3.png)


- 各種項目は以下の通りです。
    
    
    | 項目 | 説明 |
    | --- | --- |
    | Application name | 認証時に表示されるアプリケーション名 |
    | Homepage URL | Argo CD サーバーURL  |
    | Authorization callback URL | Argo CDのAPI URLを渡します。 |
- なお、コールバックURLはデフォルトで`https://<host>/api/dex/callback` を使用していますが、カスタムしている場合は異なる為、変更を行っている方は確認を行ってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494649/a7c81cd7-e317-40c4-b918-8efa40f7d738.png)


- アプリケーション作成後、設定画面にあるGenerate a new client secretを押して作成し、シークレットを控えておきます。この時ClientIDも控えておきます。
    
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494649/c8a03467-f957-4589-b0c6-2af4c1e44afa.png)

    

# Configの設定

- 得られたSecretsを利用しSSOを設定しますが、機密情報をconfigに記載するのはセキュリティや管理の都合から推奨されない為、環境に合わせて設定してください。ここではargocdのsecret内に記述します。
    - なお、secret内はKubernetesの仕様でbase64で記述を行わなければいけないので変換します。
        
        ```markdown
        echo "<ここにsecret>" | base64
        ```
        
    - 以下のコマンドでterminal内で編集を行えます。
    
    ```markdown
    kubectl -n argocd edit secret argocd-secret~ 略
    ```
    
    ```yaml
    ~ 略
    data:
    	~ 略
    	dex.github.clientSecret: <ここにbase64に変換した鍵>
    	~ 略
    ```
    
- 次にSSO設定をyamlに記述します。
    
    
    ```yaml
    data:
      url: https://argocd.example.com # ここにサーバーURL
      dex.config: |
        connectors:
          - type: github
            id: github
            name: GitHub
            config:
              clientID: <client id>
              clientSecret: $dex.github.clientSecret # secretの参照
            orgs: # もしgroupで権限を設定したい場合。
              - name: niri-la # github organizationの名前(https://github.com/organizations/<ここ>))
                teams:
                - Developer # organization内のチーム名
    ```
    
- 以下のコマンドで適用できます
    
    ```markdown
    kubectl patch configmap argocd-cm -n argocd --patch-file github-sso-patch.yaml
    ```
    

# ログイン

- `Login via github` という項目が出ているので、このボタンを押下すると作成したアプリケーションと紐づけることができます。
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494649/10bd72c2-7ce1-4f87-87b8-c2911b66eb04.png)

    
- 紐づける際にorganizationと紐づけるとorganizationのTeamsに入っているメンバーのみのアクセスとすることができます。
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494649/23d1ec58-fd21-4261-9d4c-3c1821c6c19c.png)

    
- 無事にログインが完了したら終了となります。

# 終わりに

- ArgoCDを触ってみた感想として、柔軟性はさておきながら、権限管理に関しては比較的明瞭に理解しやすい構造になっていると感じました。特に次回以降(未定)に触れるProject毎の権限やyamlは比較的書きやすい、理解しやすい物でした。
- 今回自身の嵌まりポイントはGithub AppとOAuthを混同した事でした。深夜の遅い時間帯に行うと処理に致命的な問題が発生してしまいますね。
- 次回はgithubアカウントを利用した権限の設定を行います。
- 今回の記事、情報について誤っているポイント、よりよい情報がありましたらコメントに記載いただけると幸いです。