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-cmConfigMap의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 name과Logo— 필요에 맞게 설정하세요. 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 ID와Client 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 type을ID Token,Always로 조정하세요.Value type을Groups로 조정하세요.- ArgoCD로 전달하려는 Okta 그룹과 일치하는 필터를 추가하세요. 예:
Regex: argocd-.*. Include in을groups(위에서 만든 스코프)로 설정하세요.
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 name과Logo— 필요에 맞게 설정하세요. Okta 카탈로그에 표시됩니다.Sign-in redirect URLs:http://localhost:8085/auth/callback을 추가하세요.Sign-out redirect URIs:http://localhost:8085을 추가하세요.- 그룹을 할당하거나 지금은 이 단계를 건너뛰도록 선택하세요.
- 나머지 옵션은 그대로 두고 통합을 저장하세요.
- 새로 만든 앱에서
Client ID를 복사하세요.cliClientID: <Client ID>가argocd-cmConfigMap에서 사용됩니다. - 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 시크릿 처리 방법을 참조하세요.