Argo CD で 個人の Github アカウントでログインして権限管理をする

最近 Argo CD を使いはじめた。 argoproj.github.io

ログインはID, Passwordによる方法も提供されていますが、SSO によるログインも可能になっています。
GithubGoogle アカウントを使う場合は Argo CD では build-in されている dexidp/dex というライブラリを内部で使っているようです。

今回は Argo CD のドキュメントでも紹介されており dex でも stable になっている Gtihub アカウントによるログインを行います。
argoproj.github.io

導入手順自体は上記のドキュメントに書いてあるやり方でスッと導入できます。
ただ権限管理をしようと思ったときにパッとドキュメントをみて解決できなかったことがあったのでそれのメモの記事です。

今回はプライベートでの導入となっているので、特定のOrganizationに所属はしていません。
特定の orgnization に所属している場合はそのornization配下にチームを作成して下記のドキュメントにもあるように Configmap argocd-rbac-cmg, [github-org]:[github-team], role:admin を指定すれば可能です。

argoproj.github.io

ただ個人アカウントベースの時は特定のチームに所属しているわけではないので、別の方法で指定をする必要があります。

試しに g, [email], role:admin を指定してみましたが、付与されませんでした。
結果として下記のように scope を指定してあげることで任意の Role を特定のアカウントに付与することができました。

apiVersion: v1
kind: ConfigMap
data:
  policy.csv: |
    p, role:org-admin, *, *, *, allow

    g, [email], role:org-admin
  scopes: '[email]'

後はデフォルトでは何もできないことを明示的に指定したいので、p, role:none, *, *, *, deny のように指定してすべてが拒否された role を作成して policy.default に指定します。

ちなみに deny はドキュメントをパッとみたところなさそうでしたが、コード内には分岐が定義されており、実際にすべてが拒否された role が作成されたようでした。
https://github.com/argoproj/argo-cd/blob/f66dd977e7a65d5576a60f744f4091cec9b977ef/pkg/apis/application/v1alpha1/types.go#L1684-L1688

最終的な権限に関する configmap の設定は下記のようになりました。

apiVersion: v1
kind: ConfigMap
data:
  policy.csv: |
    p, role:org-admin, *, *, *, allow
    p, role:none, *, *, *, deny

    g, [email], role:org-admin
  policy.default: role:none
  scopes: '[email]'