Bir süre önce deployment yönetimi için argo’ya geçiş yaptık. Henüz testlerimiz devam ederken SSO konusunu da gündeme getirdik.
Argo’yu sso ile bağlamak için ürün araştırırken çokça Okta gördüm. Fakat testler, başlangıç ve genel süreçte kullanıcı başı 1-2$ ödemeyi gereksiz gördük.
Google 50 kullanıcıya kadar herhangi bir ücret talep etmiyor.
https://cloud.google.com/identity/pricing

ArgoCD SSO
Kurulumu helm ile yapacağım. Dökümantasyonda bazı bölümler karışık kısaca özetleyelim.
https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/
Entegrasyon için birden çok yol olduğunu görüyoruz;
There are three different ways to integrate Argo CD login with your Google Workspace users. Generally the OpenID Connect (oidc) method would be the recommended way of doing this integration (and easier, as well...), but depending on your needs, you may choose a different option.
Argo CD özelinde google hesaplarındaki grup bilgisini çekemedim. Bu konu ile ilgili bir çok case var. Çalışmalarımız devam ediyor, ek bir makale yayınlamayı düşünüyoruz. Yetkilendirmeyi şimdilik kişilerin mail adresleri ile gerçekleştireceğiz.
cloud.google.com üzerinde OAuth content screen oluşturuyoruz. Kurulum adımları için bu linki takip edebilirsiniz.
https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/google/#openid-connect-using-dex

Oluşturulan screen için client id ayarlarını gerçekleştiriyoruz. https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/google/#configure-a-new-oauth-client-id

Configmap üzerinde dex.config ayarlarını ve helm values için gerekli diğer tüm ayarlar aşağıdaki gibi;
En alttaki extraobject workflow için;
configs:
cm:
url: https://gitops-sso.mnmedya.com
admin.enabled: true
dex.config: |
staticClients:
- id: 30--
name: argo-sso-wf
redirectURIs:
- https://gitops-sso-wf.mnmedya.com/oauth2/callback
secretEnv: ARGO_WORKFLOWS_SSO_CLIENT_SECRET
logger:
level: debug
format: json
connectors:
- type: oidc
id: google
name: Google
config:
redirectURI: https://gitops-sso.mnmedya.com/api/dex/callback
issuer: https://accounts.google.com
clientID: 30----
clientSecret: GOC----
adminEmail: sm@mnm.com.tr
###rbac configuration
params:
server.insecure: true
dexserver.disable.tls: true
rbac:
scopes: '[email]'
policy.default: role:readonly
policy.csv: |
p, role:org-admin, *, *, */*, allow
p, role:developer, applications, sync, magento/*, allow
p, role:developer, applications, sync, product/*, allow
g, developer@mnm.com.tr, role:developer
g, mert@mnm.com.tr, role:org-admin
###rbac configuration
dex:
enabled: true
env:
- name: ARGO_WORKFLOWS_SSO_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: argo-workflows-sso
key: client-secret
server:
autoscaling:
enabled: true
minReplicas: 2
ingress:
enabled: true
https: true
ingressClassName: "nginx"
hosts:
- gitops-sso.mnmedya.com
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
###wf
extraObjects:
# sso
- apiVersion: v1
kind: Secret
metadata:
name: argo-workflows-sso
labels:
app.kubernetes.io/part-of: argocd
data:
client-id: MzA0O-
client-secret: R0--
Helm ile deploy için;
helm upgrade --install argo-cd argo-cd/argo-cd -n gitops -f values.yaml && kubectl rollout restart deployment -n gitops argo-cd-argocd-applicationset-controller argo-cd-argocd-dex-server argo-cd-argocd-notifications-controller argo-cd-argocd-redis argo-cd-argocd-repo-server argo-cd-argocd-server
Argo Workflow SSO
Dökümantasyonu takip ettimizde; https://argoproj.github.io/argo-workflows/argo-server-sso/#argo-server-sso
Helmin yeteneklerini kullanarak dökümanda istenen secretları extraobject olarak ekliyoruz, auth mode sso olacak,
Workflow’a erişilmek istendiğinde her kullanıcının servis account ile ilişlisi olması gerek bunun için; https://argoproj.github.io/argo-workflows/argo-server-sso/#recommended-usage
server:
extraArgs:
- --auth-mode=sso
serviceType: LoadBalancer
serviceAnnotations:
metallb.universe.tf/address-pool: "staging-gitops-wf-pool"
secure: true
sso:
enabled: true
scopes:
- email
rbac:
enabled: true
issuer: "https://gitops-sso.mnmedya.com/api/dex"
sessionExpiry: 240h
redirectUrl: "https://gitops-sso-wf.mnmedya.com/oauth2/callback"
clientId:
name: client-id-secret
key: client-id-key
clientSecret:
name: client-secret-secret
key: client-secret-key
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/backend-protocol: https
cert-manager.io/cluster-issuer: letsencrypt-staging
hosts:
- gitops-sso-wf.mnmedya.com
tls:
- hosts:
- '*.mnmedya.com'
secretName: tls-secret
extraObjects:
- |
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: argo-workflows-ui
rules:
- apiGroups:
- argoproj.io
resources:
- "cronworkflows"
- "eventbus"
- "eventsources"
- "sensors"
- "workflows"
- "workflowtemplates"
- "workflowartifactgctasks"
- "workfloweventbindings"
- "workflowtaskresults"
- "workflowtasksets"
verbs:
- "list"
- "get"
- "watch"
- apiGroups:
- ""
resources:
- "pods"
- "pods/log"
verbs:
- "get"
- "list"
- "logs"
- "watch"
- |
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: argo-workflows-ui
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: argo-workflows-ui
subjects:
- kind: ServiceAccount
name: argo-workflows-ui
namespace: gitops-wf
- |
apiVersion: v1
kind: Secret
metadata:
name: argo-workflows-ui-sa-token
annotations:
kubernetes.io/service-account.name: argo-workflows-ui
type: kubernetes.io/service-account-token
- |
apiVersion: v1
kind: ServiceAccount
metadata:
name: argo-workflows-ui
annotations:
workflows.argoproj.io/rbac-rule: "true"
workflows.argoproj.io/rbac-rule-precedence: "0"
# sso
- |
apiVersion: v1
kind: Secret
metadata:
name: argo-workflows-sso
data:
client-id: Mz--
client-secret: R0--
# sso
- |
apiVersion: v1
data:
client-id-key: Mz--
kind: Secret
metadata:
name: client-id-secret
type: Opaque
# sso
- |
apiVersion: v1
data:
client-secret-key: R0--
kind: Secret
metadata:
name: client-secret-secret
type: Opaque
Helm ile deploy için;
helm upgrade --install argo-wf argo/argo-workflows -n gitops-wf -f values.yaml && kubectl rollout restart deployment -n gitops-wf argo-wf-argo-workflows-server argo-wf-argo-workflows-workflow-controller