📚

GKE 上の ArgoCD での権限管理に GitHub team を利用する

2023/09/23に公開

ゴール

ArgoCD での権限管理に GitHub team を利用し、特定の team ごとに異なる権限を付与する方法を理解する。

手順

Organization で GitHub App を作成する

以下の情報を記載して GitHub App を作成します。
https://github.com/organizations/< organization 名 >/settings/apps/new

  • GitHub App name : 任意の名前
  • Homepage URL : 任意の URL
  • Callback URL : ArgoCD をデプロイしているドメイン ( 例 : https://tetsuya28-argocd.xxx )
  • Webhook : Active のチェックを外す
  • Organization permissions から Members の項目を Read-only に変更[1]

作成後、Generate a new client secret から client secret を生成します。
※ 後ほど利用するためコピーしておきます。

その後、GitHub App のメニューより「Install App」を選択し、対象の organization にインストールします。

ArgoCD をデプロイする

Helm を利用して ArgoCD ( version : v2.8.4 ) をインストールします。
https://argoproj.github.io/argo-helm

利用する Helm version は v5.46.6 です。
https://artifacthub.io/packages/helm/argo/argo-cd/5.46.6

values.yaml を編集する

GitHub 上の team 情報と連携するための設定を追加していきます。

configs.cm.dex.config に GitHub App の情報を追加します。

connectors:
  - type: github
    id: github
    name: GitHub
    config:
      clientID: "" # 先ほど取得した Client ID
      clientSecret: $dex.github.clientSecret # Secret から読み込むための設定
      orgs:
        - name: "" # GitHub App をインストールした organization 名

configs.cm.url に ArgoCD の URL を追記します。

url: https://tetsuya28-argocd.xxx

configs.params.server.insecuretrue に設定します。[2]

configs.rbac.policy.csv に権限を設定します。
github-organization / github-team はそれぞれの環境に応じて置き換えてください。
role:admin はドキュメントを参考に必要な権限に置き換えてください。
https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/

policy.csv: |
  g, github-organization:github-team, role:admin

configs.rbac.policy.default を設定することでデフォルトの権限を設定することができます。

policy.default: role:readonly

GitHub でのログインを行うため、 admin でのログインを禁止します。
configs.cm.admin.enabledfalse に設定します。

admin.enabled: false

Client secret を登録する

GitHub App に登録した client secret を Kubernetes Secret 経由で ArgoCD の dex に渡します。
argocd-secret Secret に dex.github.clientSecret というキーで client secret を base64 エンコードした値を登録します。

apiVersion: v1
kind: Secret
metadata:
  name: argocd-secret
  namespace: argocd
data:
  dex.github.clientSecret: "" # Client secret を base64 エンコードした値

ArgoCD にログインする

上記の設定を完了した状態で helm install などを用いてデプロイを行うと ArgoCD のログインページに GitHub でのログインボタンが表示されます。

GitHub への権限を許可することで GitHub 経由で ArgoCD にログインすることができます。

ログイン後、User Info を確認すると GitHub team の情報が Groups として付与されていることが確認できます。
この group の情報を元に policy.csv で設定した RBAC が適用されます。

脚注
  1. Permissions を指定しない場合でもログインはできますが、team の情報が取得できないため後述の team による権限設定を行うことができません。 ↩︎

  2. 未調査ですが、 false の場合 GitHub ログインに失敗します。 ↩︎

Discussion