GKE 上の ArgoCD での権限管理に GitHub team を利用する
ゴール
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
) をインストールします。
利用する Helm version は v5.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.insecure
を true
に設定します。[2]
configs.rbac.policy.csv
に権限を設定します。
github-organization
/ github-team
はそれぞれの環境に応じて置き換えてください。
role:admin
はドキュメントを参考に必要な権限に置き換えてください。
policy.csv: |
g, github-organization:github-team, role:admin
configs.rbac.policy.default
を設定することでデフォルトの権限を設定することができます。
policy.default: role:readonly
GitHub でのログインを行うため、 admin でのログインを禁止します。
configs.cm.admin.enabled
を false
に設定します。
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 が適用されます。
Discussion