Okta 연동

Okta 연동

이 문서는 Okta를 ID 프로바이더로 사용해 Argo CD single sign-on을 구성하는 두 가지 방법(SAML(with Dex), OIDC(without Dex))을 안내합니다. Okta 그룹을 Argo CD RBAC 역할에 연결하는 방법도 다룹니다.

출처: 문서

본문

Okta

참고: 이 방법을 사용하고 있나요? 기여해 주세요! 이 IdP를 사용하고 있다면 이 문서에 기여하는 것을 고려해 주세요.

Okta를 사용한 working Single Sign-On 구성은 최소 두 가지 방법으로 달성되었습니다:

  • SAML (with Dex)
  • OIDC (without Dex)

SAML (with Dex)

참고: Okta 앱 그룹 할당 — Okta 앱의 Group Attribute Statements 정규식은 나중에 Okta 그룹을 Argo CD RBAC 역할에 매핑하는 데 사용됩니다.

  • Okta UI에서 새 SAML 애플리케이션을 만드세요. Dex가 프로바이더 시작 로그인 흐름을 지원하지 않으므로 App Visibility를 비활성화했습니다.
  • Okta에서 애플리케이션을 만든 후 View setup instructions를 클릭하세요.
  • argocd-cm의 data.url에 Argo CD URL을 복사하세요.
data:
  url: https://argocd.example.com
  • argocd-cm 구성에 사용할 CA 인증서를 다운로드하세요. caData 필드에서 사용한다면 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 스탠자를 포함한 전체 인증서를 base64 인코딩해야 합니다(예: base64 my_cert.pem).
  • ca 필드를 사용하고 CA 인증서를 별도의 시크릿으로 저장한다면, argocd-dex-server 디플로이먼트의 dex 컨테이너에 시크릿을 마운트해야 합니다.
  • argocd-cm을 편집하고 data.dex.config 섹션을 구성하세요:
dex.config: |
  logger:
    level: debug
    format: json
  connectors:
  - type: saml
    id: okta
    name: Okta
    config:
      ssoURL: https://yourorganization.oktapreview.com/app/yourorganizationsandbox_appnamesaml_2/rghdr9s6hg98s9dse/sso/saml
      # You need `caData` _OR_ `ca`, but not both.
      caData: |
        <CA cert passed through base64 encoding>
      # You need `caData` _OR_ `ca`, but not both.
      # Path to mount the secret to the dex container
      ca: /path/to/ca.pem
      redirectURI: https://ui.argocd.yourorganization.net/api/dex/callback
      usernameAttr: email
      emailAttr: email
      groupsAttr: group

프라이빗 배포

Okta 콜백 URL만 유일하게 공개적으로 노출된 엔드포인트인 프라이빗 Argo CD 설치로 Okta SSO를 구성할 수 있습니다. 설정은 대체로 동일하지만 Okta 앱 구성과 argocd-cm ConfigMap의 data.dex.config 섹션에 몇 가지 변경이 있습니다.

이 배포 모델을 사용하면 사용자는 프라이빗 Argo CD UI에 연결되고, Okta 인증 흐름이 프라이빗 UI URL로 원활하게 리다이렉트됩니다.

종종 이 공개 엔드포인트는 Ingress 객체로 노출됩니다.

  • Okta 앱의 General settings에서 URL을 업데이트하세요. Single sign on URL 필드는 공개 노출 엔드포인트를 가리키고, 다른 모든 URL 필드는 내부 엔드포인트를 가리킵니다.
  • argocd-cm ConfigMap의 data.dex.config 섹션을 외부 엔드포인트 참조로 업데이트하세요.
dex.config: |
  logger:
    level: debug
  connectors:
  - type: saml
    id: okta
    name: Okta
    config:
      ssoURL: https://yourorganization.oktapreview.com/app/yourorganizationsandbox_appnamesaml_2/rghdr9s6hg98s9dse/sso/saml
      # You need `caData` _OR_ `ca`, but not both.
      caData: |
        <CA cert passed through base64 encoding>
      # You need `caData` _OR_ `ca`, but not both.
      # Path to mount the secret to the dex container
      ca: /path/to/ca.pem
      redirectURI: https://external.path.to.argocd.io/api/dex/callback
      usernameAttr: email
      emailAttr: email
      groupsAttr: group

Okta 그룹을 Argo CD 역할에 연결

Argo CD는 Group Attribute Statements 정규식과 일치하는 Okta 그룹의 사용자 멤버십을 인식합니다. 위 예시는 argocd-* 정규식을 사용하므로 Argo CD는 argocd-admins라는 그룹을 인식합니다.

argocd-rbac-cm ConfigMap을 수정해 argocd-admins Okta 그룹을 내장 Argo CD admin 역할에 연결하세요:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
data:
  policy.csv: |
    g, argocd-admins, role:admin
  scopes: '[email,groups]'

OIDC (without Dex)

경고: RBAC용 Okta 그룹 — Okta에서 groups 스코프 반환을 원한다면 Okta로 API Access Management를 활성화해야 합니다. 이 애드온은 무료이며 Okta 개발자 버전에서 자동으로 활성화됩니다. 그러나 프로덕션 환경에서는 추가 비용이 있는 선택적 애드온입니다. 대안으로 기본 인가 서버에 "groups" 스코프와 클레임을 추가한 다음 Okta 애플리케이션 구성에서 클레임을 필터링할 수도 있습니다. 이것이 Authorization Server 애드온이 필요한지는 명확하지 않습니다. 이 옵션이 불가능하다면 위의 SAML(with Dex) 옵션을 대신 사용하세요.

참고: 이 지침과 스크린샷은 Okta 버전 2023.05.2 E 기준입니다. 현재 버전은 Okta 웹사이트 하단에서 확인할 수 있습니다.

먼저 OIDC 통합을 만드세요:

  • Okta Admin 페이지에서 Applications > Applications.의 Okta Applications로 이동하세요.
  • Create App Integration을 선택하고, 나오는 대화상자에서 OIDC를 선택한 다음 Web Application을 선택하세요.
  • 다음을 업데이트하세요:
    • App Integration nameLogo — 필요에 맞게 설정하세요. Okta 카탈로그에 표시됩니다.
    • Sign-in redirect URLs: argocd.example.com을 ArgoCD 웹 인터페이스 URL로 교체해 https://argocd.example.com/auth/callback을 추가하세요.
    • Sign-out redirect URIs: 위와 같이 올바른 도메인 이름으로 대체해 https://argocd.example.com을 추가하세요.
  • 그룹을 할당하거나 지금은 이 단계를 건너뛰도록 선택하세요.
  • 나머지 옵션은 그대로 두고 통합을 저장하세요.
  • 새로 만든 앱에서 Client IDClient Secret을 복사하세요. 나중에 필요합니다.

다음으로 커스텀 Authorization server를 만드세요:

  • Okta Admin 페이지에서 Security > API의 Okta API Management로 이동하세요.
  • Add Authorization Server를 클릭하고 이름과 설명을 지정하세요. Audience는 ArgoCD URL(https://argocd.example.com)과 일치해야 합니다.
  • Scopes > Add Scope를 클릭하세요:
    • groups라는 스코프를 추가하세요. 나머지 옵션은 기본값으로 두세요.
  • Claims > Add Claim을 클릭하세요:
    • groups라는 클레임을 추가하세요.
    • Include in token typeID Token, Always로 조정하세요.
    • Value typeGroups로 조정하세요.
    • ArgoCD로 전달하려는 Okta 그룹과 일치하는 필터를 추가하세요. 예: Regex: argocd-.*.
    • Include ingroups(위에서 만든 스코프)로 설정하세요.
  • Access Policies > Add Policy.를 클릭하세요. 이 정책은 이 인가 서버가 어떻게 사용되는지 제한합니다.
    • 이름과 설명을 추가하세요.
    • 위에서 만든 클라이언트(앱 통합)에 정책을 할당하세요. 필드에 입력하면 자동 완성됩니다.
    • 정책을 생성하세요.
  • 정책에 규칙을 추가하세요:
    • 이름을 추가하세요. default가 이 규칙에 합리적인 이름입니다.
    • 조직의 보안 수준에 맞게 설정을 세부 조정하세요. 몇 가지 아이디어:
      • Authorization Code를 제외한 모든 grant type의 선택을 해제하세요.
      • 세션이 지속될 수 있는 시간을 정하려면 토큰 수명을 조정하세요.
      • refresh token 수명을 제한하거나 완전히 비활성화하세요.
  • 마지막으로 Back to Authorization Servers를 클릭하고 Issuer URI를 복사하세요. 나중에 필요합니다.

CLI 로그인

CLI로 로그인하려면(argocd login https://argocd.example.com --sso) Okta에 별도의 전용 App Integration이 필요합니다:

  • Create App Integration을 만들고 OIDC를 선택한 다음 Single-Page Application을 선택하세요.
  • 다음을 업데이트하세요:
    • App Integration nameLogo — 필요에 맞게 설정하세요. Okta 카탈로그에 표시됩니다.
    • Sign-in redirect URLs: http://localhost:8085/auth/callback을 추가하세요.
    • Sign-out redirect URIs: http://localhost:8085을 추가하세요.
    • 그룹을 할당하거나 지금은 이 단계를 건너뛰도록 선택하세요.
    • 나머지 옵션은 그대로 두고 통합을 저장하세요.
  • 새로 만든 앱에서 Client ID를 복사하세요. cliClientID: <Client ID>argocd-cm ConfigMap에서 사용됩니다.
  • Authorization Server Access Policies를 편집하세요:
    • Security > API의 Okta API Management로 이동하세요.
    • 이전에 만든 기존 Authorization Server를 선택하세요.
    • Access Policies > Edit Policy를 클릭하세요.
    • 텍스트 상자에 입력하고 Update Policy를 클릭해 새로 만든 App Integration을 할당하세요.

아직 Okta 그룹을 만들고 애플리케이션 통합에 할당하지 않았다면 지금 해야 합니다:

  • Directory > Groups로 이동하세요.
  • 추가하려는 각 그룹에 대해:
    • Add Group을 클릭하고 의미 있는 이름을 선택하세요. 커스텀 group 클레임에 추가한 정규식 또는 패턴과 일치해야 합니다.
    • 그룹을 클릭하세요(새 그룹이 목록에 나타나지 않으면 페이지를 새로고침하세요).
    • Okta 사용자를 그룹에 할당하세요.
    • Applications를 클릭하고 만든 OIDC 애플리케이션 통합을 이 그룹에 할당하세요.
  • 필요에 따라 반복하세요.

마지막으로 ArgoCD 자체를 구성하세요. argocd-cm configmap을 편집하세요:

url: https://argocd.example.com
oidc.config: |
  name: Okta
  # this is the authorization server URI
  issuer: https://example.okta.com/oauth2/aus9abcdefgABCDEFGd7
  clientID: 0oa9abcdefgh123AB5d7
  cliClientID: gfedcba0987654321GEFDCBA # Optional if using the CLI for SSO
  clientSecret: ABCDEFG1234567890abcdefg
  requestedScopes: ["openid", "profile", "email", "groups"]
  requestedIDTokenClaims: {"groups": {"essential": true}}

clientSecret을 Kubernetes 시크릿에 저장하고 싶을 수 있습니다. 자세한 내용은 SSO 시크릿 처리 방법을 참조하세요.

더 알아보기 (Learn more)