예상 소요 시간: 18시간
작동 가능 구성요소 소유자: OIC
OIDC 연결을 구성하는 방법
OIDC 연결은 원하는 상태 구성 (DSC)에 의해 관리됩니다. 수동으로 만들 수도 있지만 DSC가 선호되는 방법입니다.
Marvin사용자로 CONFIG1 VM에 로그인합니다.VSCode 또는 원하는 편집기를 사용하여 c:\config\config.ps1을 엽니다.
-ADFS1를 검색하여 ADFS 서버의 구성 노드를 찾습니다.# Example ADFS server noe in config.ps1 NodeName = "$Site1Code-ADFS1" HyperVHost = 'AA-OC-BM01' Role = 'adfs' IPv4Addr = '172.21.0.23'AdfsAppGrp이라는 배열에는 OIDC 연결의 해시 테이블이 포함됩니다.Example-OIDC의 전체 해시 테이블을 복사하여 기존Example-OIDC해시 테이블 뒤에 붙여넣습니다. 예:@{ Name = 'Example-OIDC' AdfsSrvApp = @{ … } @{ Name = 'Example-OIDC' AdfsSrvApp = @{ … }Name및RedirectURI매개변수를 새 OIDC 연결과 연결된 값으로 업데이트합니다. config.ps1 파일을 저장합니다.관리자 권한으로 PowerShell 창을 열고 ADFS1 서버 구성을 업데이트합니다. [사이트] 를 사이트 코드로 바꿉니다.
$Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1" c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdPartyADFS1 VM에 로그인하고 AD FS 관리 MMC를 연 다음 애플리케이션 그룹을 클릭하여 OIDC 구성을 검증합니다.
ADFS1 VM에 로그인한 상태에서
C:\config을 열고<Your Connector Name> Srv App.txt이라는 파일을 찾습니다. 이 파일에서 찾은Identifier및ClientSecret값을 저장하여 나중에 애플리케이션에서 사용합니다. 식별자와 보안 비밀 값이 기록되면 이 파일을 삭제합니다.
GDC 인프라 콘솔의 OIDC 구성
GDC 배포를 위한 OIDC 커넥터 정보를 수집합니다.
- 리디렉션 URI:
https://ais-core.<GDC_name>.<DNS_domain>/finish-login(예:https://ais-core.example.domain.local/finish-login) - GDC 서비스 콘솔 URL:
https://infra-console.<GDC_name>.<DNS_domain>(예:https://infra-console.example.domain.local)
- 리디렉션 URI:
이전 단계에 따라 OIDC 연결을 만듭니다.
GDC 셀의 Anthos Identity Service (AIS)가 구성되면 GDC 콘솔의 URL로 OIDC 구성을 테스트합니다.
- OIC 워크스테이션에 로그인합니다.
- Chrome을 열고 인프라 콘솔 URL(예:
https://infra-console.example.domain.local)로 이동합니다. - 메시지가 표시되면 사용자 이름과 비밀번호를 입력합니다. 사용자 인증 정보가 유효하면 인프라 콘솔 GUI로 리디렉션됩니다.
이 ADFS 서버에서 관리하는 각 GDC 셀에 대해 필요에 따라 이 단계를 반복합니다.
ADFS용 GDC DNS 구성
시스템 컨트롤러 또는 부트스트래퍼에 로그인합니다.
루트 관리자 클러스터의
kubeconfig를 내보냅니다.export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig전달 영역을 사용하여 OCIT_DOMAIN를 구성합니다. OCIT_DOMAIN을 OCIT 도메인 이름으로 바꾸고 엔드포인트를 OC DNS IP 주소로 바꿉니다.
kubectl apply -f - <<EOF apiVersion: network.private.gdc.goog/v1alpha1 kind: DNSZone metadata: namespace: dns-system name: ocit-domain spec: domainName: OCIT_DOMAIN forwardingConfig: # Set to OC DNS IPs (the AD domain controllers) endpoints: - 192.0.2.0 - 192.0.2.1 replicateToTenantOrg: true EOF출력은 다음 예와 같이 표시됩니다.
dnszone.network.private.gdc.goog/ocit-domain created변경사항이 적용되지 않으면 배포를 다시 시작합니다.
kubectl rollout restart deployment -n dns-system gpc-coredns-forwarder이 DNS 변경사항은 GDC의 모든 클러스터에 전파됩니다.
루트 관리자 kubeconfig를 사용하여 OCIT 도메인 확인이 의도한 대로 작동하는지 확인합니다.
NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \ awk '/[0-9]\./ {print $4}') dig +short @${NAMESERVER} fs.OCIT_DOMAIN조직 관리자 클러스터의
kubeconfig를 내보냅니다.export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig조직 관리자 kubeconfig를 적용하고 OCIT 도메인 확인이 의도한 대로 작동하는지 확인합니다.
NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-infra-forwarder | \ awk '/[0-9]\./ {print $4}') dig +short @${NAMESERVER} fs.OCIT_DOMAIN
콘솔의 GDC AIS 구성
ADFS1에 로그인한 다음 AD FS 관리 MMC를 엽니다.
서비스 > 인증서를 클릭합니다.
서비스 통신 인증서를 더블클릭합니다.
인증 경로 탭을 클릭합니다.
'루트'로 표시된 최상위 인증서를 선택합니다.
인증서 보기를 클릭합니다.
세부정보 탭을 선택한 다음 파일로 복사를 클릭합니다.
- Base-64 (.CER) 형식으로 저장
ADFS 루트 CA를 시스템 컨트롤러 또는 부트스트래퍼에
adfs.cer로 복사합니다.시스템 컨트롤러 또는 부트스트래퍼에 로그인한 다음 ADFS 루트 CA를 base64 인코딩으로 셸 변수에 내보냅니다. 다음 명령어는 헤더를 포함한 인증서를 줄 바꿈 문자 없이 단일 행으로 base64로 인코딩합니다.
export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")루트 관리자 클러스터
kubeconfig를 내보냅니다.export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfigiac저장소로 이동하여 전역 조직의 디렉터리 구조를 추가합니다.cd iac; mkdir -p infrastructure/global/orgs/root/조직의
ioauthmethod.yaml파일을 추가합니다.cat > infrastructure/global/orgs/root/ioauthmethod.yaml << EOF apiVersion: iam.global.private.gdc.goog/v1alpha1 kind: IOAuthMethod metadata: name: adfs-oidc namespace: gpc-system spec: oidc: certificateAuthorityData: ADFS_CERT_BASE64 clientID: ADFS_CLIENT_ID clientSecret: ADFS_CLIENT_SECRET groupPrefix: gdch-infra-operator- groupsClaim: groups issuerURI: https://fs.OCIT_DOMAIN/adfs scopes: openid email offline_access userClaim: email userPrefix: gdch-infra-operator- cloudConsoleRedirectURI: http://cloud.console.not.enabled kubectlRedirectURI: http://localhost:9879/callback EOF다음 변수를 바꿉니다.
변수 정의 ADFS_CERT_BASE64이전 단계에서 만든
$BASE64_CERT값입니다.ADFS가 자체 서명하는 데 사용하는 이 base64로 인코딩된 PEM으로 인코딩된 인증서는 GKE Identity Service가 내부 ADFS 인스턴스와 보안 연결을 설정하는 데 필요합니다.
ADFS_CLIENT_IDADFS에 있는 조직 클라이언트의 OpenID Connect ID입니다. ADFS_CLIENT_SECRETADFS에 등록된 조직 클라이언트의 OpenID Connect 보안 비밀번호입니다. OCIT_DOMAINOCIT 도메인 이름입니다. 자세한 내용은 ADFS용 GDC DNS 구성을 참고하세요. kustomization.yaml파일을 전역iac폴더에 추가합니다.cat > infrastructure/global/orgs/root/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ioauthmethod-kustomization resources: - ioauthmethod.yaml EOF조직 YAML 파일과 kustomize 파일을 스테이징하고 커밋합니다.
git add "infrastructure/global" git add "infrastructure/zonal" git commitGitLab에 업데이트를 푸시합니다.
git -c http.sslVerify=false push코드 검토 및 병합을 기다립니다.
새로 추가된 IdP가
ClientConfig에 있는지 확인합니다.kubectl get ClientConfig default -n kube-public -o yaml
ADFS 다중 인증 설정
요구사항
- YubiKey는 5.16 강화 및 정책 적용 섹션에 따라 사용자에게 프로비저닝되었습니다.
- AD FS의 이전 단계가 모두 예상대로 작동하는 것으로 확인되었습니다. 즉, 사용자가 AD FS를 사용하여 사용자 이름과 비밀번호 인증으로 GDC 엔드포인트에 액세스할 수 있습니다.
안내
다음 단계에 따라 ADFS 다단계 인증을 설정합니다.
ADFS 인증서 인증을 전역적으로 사용 설정
ADFS1 호스트에서 다음 단계를 실행합니다.
- -sa 계정(예: username-sa)을 사용하여 ADFS1 호스트에 RDP로 연결합니다.
Administrator로 PowerShell 창을 실행합니다.환경에서 CertificateAuthentication이 이미 사용 설정되어 있는지 확인합니다.
# Checking current Global Authentication Policy for # PrimaryIntranetAuthenticationProvider Get-AdfsGlobalAuthenticationPolicy | Select-Object ` -Property PrimaryIntranetAuthenticationProvider # Example output, note it is missing CertificateAuthentication PrimaryIntranetAuthenticationProvider : {FormsAuthentication, WindowsAuthentication, MicrosoftPassportAuthentication}PrimaryIntranetAuthenticationProvider를 설정하여 CertificateAuthentication을 포함합니다. 또한 OC IT에서 사용하지 않는 인증 방법인 MicrosoftPassportAuthentication을 삭제합니다.
# Setting the Global Authentication Policy for # PrimaryIntranetAuthenticationProvider to include CertificateAuthentication Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider ` @('FormsAuthentication', 'WindowsAuthentication', 'CertificateAuthentication') # Validating the update to Global Authentication Policy for # PrimaryIntranetAuthenticationProvider Get-AdfsGlobalAuthenticationPolicy | Select-Object ` -Property PrimaryIntranetAuthenticationProvider # Desired output PrimaryIntranetAuthenticationProvider : {CertificateAuthentication, FormsAuthentication, WindowsAuthentication}
ADFS 인증서 인증 테스트
OC IT 워크스테이션에서 다음 단계를 완료합니다.
- 권한이 없는 계정으로 OC IT 워크스테이션에 로그인합니다.
- Chrome 브라우저를 열고 평소와 같이 infra-console.CELL_NAME.DOMAIN에 액세스합니다(예: https://infra-console.example.domain.local).
로그인 버튼 아래에 표시되는 인증서를 사용하여 로그인 옵션을 클릭합니다.
대화상자 창에서 권한이 없는 사용자 인증서를 선택하고 확인을 클릭합니다.
메시지가 표시되면 YubiKey PIN을 입력하고 확인을 클릭합니다.
ADFS 인증이 올바르게 작동하면 사용자 이름과 비밀번호를 입력한 것처럼 인프라 콘솔 GUI가 표시됩니다.
로그아웃 버튼을 사용하여 인프라 콘솔에서 로그아웃한 다음 모든 Chrome 창을 닫습니다. 이 작업을 수행하면 캐시된 사용자 인증 정보가 삭제되고 각 GDC 엔드포인트를 테스트할 수 있습니다.
각 GDC 엔드포인트에 대해 이 섹션의 단계를 반복합니다. 매번 로그아웃하고 Chrome을 닫아 AD FS 인증 프롬프트가 표시되도록 합니다.
- Console.gdchservices (gdchservices org)
- GitLab
- ServiceNow
- 다른 조직
ADFS MFA 인증을 전역적으로 엄격하게 적용
ADFS1 호스트에서 다음 단계를 실행합니다.
- alexb-sa와 같은 -sa 계정으로 ADFS1 호스트에 RDP를 실행합니다.
- 관리자 권한으로 PowerShell 창을 실행합니다.
PrimaryIntranetAuthenticationProvider를 설정하여 CertificateAuthentication만 포함합니다.
# Setting the Global Authentication Policy for # PrimaryIntranetAuthenticationProvider to include CertificateAuthentication Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider ` @('CertificateAuthentication') # Validating the update to Global Authentication Policy for # PrimaryIntranetAuthenticationProvider Get-AdfsGlobalAuthenticationPolicy | Select-Object ` -Property PrimaryIntranetAuthenticationProvider # Desired output PrimaryIntranetAuthenticationProvider : {CertificateAuthentication}
각 GDC 엔드포인트 재테스트
OC IT 워크스테이션에서 다음 단계를 실행합니다.
- 권한이 없는 계정으로 OC IT 워크스테이션에 로그인합니다.
- Chrome 브라우저를 열고 평소와 같이 infra-console.CELL_NAME.DOMAIN에 액세스합니다(예: https://infra-console.example.domain.local).
AD FS 포털에서 즉시 인증서 또는 YubiKey를 요청합니다. 사용자 이름 또는 비밀번호 입력란이 더 이상 표시되지 않아야 합니다.
인증서를 선택한 후 이전 테스트와 동일한 YubiKey PIN을 입력합니다.
설정이 완료되었습니다.