Google

Google (Google Workspace) 연동

Argo CD 로그인을 Google Workspace 사용자와 통합하는 방법은 세 가지가 있습니다. 일반적으로 OpenID Connect(oidc) 방식이 권장되며(또한 더 쉽습니다), 필요에 따라 다른 옵션을 선택할 수 있습니다. 구글 그룹 멤버십을 RBAC에 사용하려면 세 번째 방식을 사용합니다.

출처: 문서

본문

Google

Argo CD 로그인을 Google Workspace 사용자와 통합하는 방법은 세 가지가 있습니다. 일반적으로 OpenID Connect(oidc) 방식이 권장되지만(또한 더 쉽습니다), 필요에 따라 다른 옵션을 선택할 수 있습니다.

  • Dex를 사용한 OpenID Connect 사용자가 속한 그룹에 대한 정보가 필요 없다면 이 로그인 방식을 권장합니다. Google은 oidc로 groups 클레임을 노출하지 않으므로 Google Groups 멤버십 정보를 RBAC에 사용할 수 없습니다.

  • Dex를 사용한 SAML App Auth Dex는 이 방법을 피하길 권장합니다. 또한 이 방법으로는 Google Groups 멤버십 정보를 얻을 수 없습니다.

  • Dex를 사용한 OpenID Connect + Google Groups RBAC 구성에서 Google Groups 멤버십을 사용해야 한다면 이 방법을 권장합니다.

위 통합 중 하나를 설정한 후에는 반드시 argo-rbac-cm을 편집해 권한을 구성하세요(아래 예시 참조). 더 자세한 시나리오는 RBAC Configurations를 참조하세요.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.default: role:readonly

Dex를 사용한 OpenID Connect

OAuth 동의 화면 구성

이것을 한 번도 구성하지 않았다면 OAuth Client ID를 만들려고 할 때 바로 이 화면으로 리다이렉트됩니다.

  • OAuth Consent 설정으로 이동하세요. 아직 생성하지 않았다면 Internal 또는 External을 선택하고 Create를 클릭하세요.
  • OAuth 동의 화면을 편집하고 올바른 프로젝트에 있는지 확인하세요!
  • 로그인 앱 이름과 사용자 지원 이메일 주소를 구성하세요.
  • 앱 로고와 정보 링크 채우기는 필수가 아니지만, 로그인 페이지에 좋은 마무리가 됩니다.
  • "Authorized domains"에 ArgoCD에 로그인할 수 있는 도메인을 추가하세요(예: example.com을 추가하면 @example.com 주소를 가진 모든 Google Workspace 사용자가 로그인할 수 있습니다).
  • 저장하여 "Scopes" 섹션으로 계속 진행하세요.
  • "Add or remove scopes"를 클릭하고 .../auth/userinfo.profileopenid 스코프를 추가하세요.
  • 저장하고 변경 내용 요약을 검토한 뒤 마칩니다.

새 OAuth Client ID 구성

  • Google API Credentials 콘솔로 이동하고 올바른 프로젝트에 있는지 확인하세요.
  • "+Create Credentials"/"OAuth Client ID"를 클릭하세요.
  • Application Type 드롭다운 메뉴에서 "Web Application"을 선택하고 앱을 식별하는 이름(예: Argo CD)을 입력하세요.
  • "Authorized JavaScript origins"에 Argo CD URL(예: https://argocd.example.com)을 채우세요.
  • "Authorized redirect URIs"에 Argo CD URL과 /api/dex/callback(예: https://argocd.example.com/api/dex/callback)을 채우세요.
  • "Create"를 클릭하고 "Client ID"와 "Client Secret"을 나중을 위해 저장하세요.

Argo가 OpenID Connect를 사용하도록 구성

argocd-cm을 편집하고 data 섹션에 다음 dex.config를 추가하세요. clientIDclientSecret은 앞서 저장한 값으로 교체하세요:

data:
  url: https://argocd.example.com
  dex.config: |
    connectors:
    - config:
        issuer: https://accounts.google.com
        clientID: XXXXXXXXXXXXX.apps.googleusercontent.com
        clientSecret: XXXXXXXXXXXXX
      type: oidc
      id: google
      name: Google

참고 자료

  • Dex oidc connector docs

Dex를 사용한 SAML App Auth

새 SAML App 구성

경고: 폐기 경고 — Dex 문서에 따르면 SAML은 안전하지 않은 것으로 간주되며 해당 모듈을 폐기할 계획입니다.

  • Google 관리 콘솔에서 왼쪽 메뉴를 열고 Apps > SAML Apps를 선택하세요.
  • Add App 아래에서 Add custom SAML app을 선택하세요.
  • 애플리케이션의 Name을 입력하고(예: Argo CD) Continue를 선택하세요.
  • 아이덴티티 프로바이더 세부 정보에서 SSO URL, Certificate, 그리고 선택적으로 Entity ID를 다음 섹션에서 사용하기 위해 다운로드하거나 복사하세요. continue를 선택하세요.
  • 인증서 파일 내용을 base64로 인코딩하세요. 예:
  • $ cat ArgoCD.cer | base64
  • 인코딩된 출력의 사본을 다음 섹션에서 사용하기 위해 보관하세요.
  • base64 인코딩 전에 인증서가 PEM 형식인지 확인하세요.
  • ACS URLEntity ID 둘 다에 Argo Dex Callback URL을 사용하세요. 예: https://argocd.example.com/api/dex/callback
  • SAML 속성 매핑을 추가하세요. Primary emailname에, Primary Emailemail에 매핑하고 ADD MAPPING 버튼을 클릭하세요.
  • 애플리케이션 생성을 마칩니다.

Argo가 새 Google SAML App을 사용하도록 구성

argocd-cm을 편집하고 data 섹션에 다음 dex.config를 추가하세요. caData, argocd.example.com, sso-url, 그리고 선택적으로 google-entity-id를 Google SAML App의 값으로 교체하세요:

data:
  url: https://argocd.example.com
  dex.config: |
    connectors:
    - type: saml
      id: saml
      name: saml
      config:
        ssoURL: https://sso-url (e.g. https://accounts.google.com/o/saml2/idp?idpid=Abcde0)
        entityIssuer: https://argocd.example.com/api/dex/callback
        caData: |
          BASE64-ENCODED-CERTIFICATE-DATA
        redirectURI: https://argocd.example.com/api/dex/callback
        usernameAttr: name
        emailAttr: email
        # optional
        ssoIssuer: https://google-entity-id (e.g. https://accounts.google.com/o/saml2?idpid=Abcde0)

참고 자료

  • Dex SAML connector docs
  • Google's SAML error messages

Dex를 사용한 OpenID Connect + Google Groups

Dex의 google 커넥터를 사용해 사용자로부터 추가 Google Groups 정보를 얻어 RBAC에서 그룹 멤버십을 사용할 수 있게 합니다. 즉, [email protected] 그룹 전체에 admin 역할을 주는 방식입니다.

이 커넥터는 두 가지 다른 자격 증명을 사용합니다:

  • oidc 클라이언트 ID와 시크릿 OpenID 연결을 구성할 때와 동일하게, 이는 사용자를 인증합니다.
  • Google 서비스 계정 이는 Google Directory API에 연결해 사용자의 그룹 멤버십 정보를 가져오는 데 사용됩니다.

또한 이 도메인에서 관리자 사용자의 이메일 주소가 필요합니다. Dex는 그 사용자 신원을 가장(impersonate)하여 API에서 사용자 정보를 가져옵니다.

OpenID Connect 구성

Dex를 사용한 OpenID Connect와 같은 단계를 진행하되 argocd-cm 구성은 제외합니다. 그것은 나중에 하겠습니다.

Directory API 접근 설정

  • Google 지침에 따라 도메인 전체 위임(Domain-Wide Delegation)이 있는 서비스 계정을 생성하세요.
  • 서비스 계정에 API 스코프를 할당할 때 스코프는 반드시 https://www.googleapis.com/auth/admin.directory.group.readonly를 포함해야 합니다. 더 넓은 https://www.googleapis.com/auth/admin.directory.group 스코프만 할당하면 API에서 데이터를 검색할 수 없습니다.
  • 자격 증명을 JSON 형식으로 만들고 안전한 곳에 보관하세요. 나중에 필요합니다.
  • Admin SDK를 활성화하세요.

Dex 구성

  • 인증 자격 증명 구성

옵션 1: 서비스 계정 파일 사용(전통적인 방법)

이전 json 파일의 내용을 base64로 인코딩한 시크릿을 다음과 같이 생성하세요:

apiVersion: v1
kind: Secret
metadata:
  name: argocd-google-groups-json
  namespace: argocd
data:
  googleAuth.json: JSON_FILE_BASE64_ENCODED

그런 다음 argocd-dex-server 디플로이먼트를 편집해 그 시크릿을 파일로 마운트하세요:

  • /spec/template/spec/containers/0/volumeMounts/에 다음과 같은 볼륨 마운트를 추가하세요. 실행 중인 컨테이너를 편집하고 init 컨테이너는 편집하지 않도록 주의하세요!
volumeMounts:
  - mountPath: /shared
    name: static-files
  - mountPath: /tmp
    name: dexconfig
  - mountPath: /tmp/oidc
    name: google-json
    readOnly: true
  • /spec/template/spec/volumes/에 다음과 같은 볼륨을 추가하세요:
volumes:
  - emptyDir: {}
    name: static-files
  - emptyDir: {}
    name: dexconfig
  - name: google-json
    secret:
      defaultMode: 420
      secretName: argocd-google-groups-json

옵션 2: Workload Identity 사용(Dex > v2.34.0)

argocd-dex-server 서비스 계정에 Workload Identity를 구성하세요. Workload Identity를 사용할 때는 시크릿 파일이 필요 없습니다.

  • argocd-cm을 편집하고 data 섹션에 다음 urldex.config를 추가하세요. clientIDclientSecret은 앞서 저장한 값으로, adminEmail은 가장할 관리자 사용자의 주소로 교체하고, redirectURI는 Argo CD 도메인으로 편집하세요(type이 이제 oidc가 아닌 google이라는 점에 주의):

옵션 1: 서비스 계정 파일 사용

data:
  url: https://argocd.example.com
  dex.config: |
    connectors:
    - config:
        redirectURI: https://argocd.example.com/api/dex/callback
        clientID: XXXXXXXXXXXXX.apps.googleusercontent.com
        clientSecret: XXXXXXXXXXXXX
        serviceAccountFilePath: /tmp/oidc/googleAuth.json
        adminEmail: [email protected]
        # Optional: Enable transitive group membership (Dex > v2.31.0)
        # fetchTransitiveGroupMembership: True
      type: google
      id: google
      name: Google

옵션 2: Workload Identity 사용(Dex > v2.34.0)

data:
  url: https://argocd.example.com
  dex.config: |
    connectors:
    - config:
        redirectURI: https://argocd.example.com/api/dex/callback
        clientID: XXXXXXXXXXXXX.apps.googleusercontent.com
        clientSecret: XXXXXXXXXXXXX
        adminEmail: [email protected]
        fetchTransitiveGroupMembership: True
      type: google
      id: google
      name: Google
  • 최신 구성을 사용하는지 확인하기 위해 argocd-dex-server 디플로이먼트를 재시작하세요.
  • Argo CD에 로그인하고 "User info" 섹션으로 가서 자신이 멤버인 그룹을 확인하세요.
  • 이제 그룹 이메일 주소를 사용해 RBAC 권한을 부여할 수 있습니다.

참고 자료

  • Dex Google connector docs

더 알아보기 (Learn more)