Argo CD & Workflow | Google SSO

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.