Google (Google Workspace) 연동
Argo CD 로그인을 Google Workspace 사용자와 통합하는 방법은 세 가지가 있습니다. 일반적으로 OpenID Connect(oidc) 방식이 권장되며(또한 더 쉽습니다), 필요에 따라 다른 옵션을 선택할 수 있습니다. 구글 그룹 멤버십을 RBAC에 사용하려면 세 번째 방식을 사용합니다.
출처: 문서
본문
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.profile과openid스코프를 추가하세요. - 저장하고 변경 내용 요약을 검토한 뒤 마칩니다.
새 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를 추가하세요. clientID와 clientSecret은 앞서 저장한 값으로 교체하세요:
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 URL과Entity ID둘 다에 Argo Dex Callback URL을 사용하세요. 예:https://argocd.example.com/api/dex/callback- SAML 속성 매핑을 추가하세요.
Primary email을name에,Primary Email을email에 매핑하고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 섹션에 다음url과dex.config를 추가하세요.clientID와clientSecret은 앞서 저장한 값으로,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