預計完成時間: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 伺服器設定。將 [Site] 替換為您的網站代碼。
$Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1" c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty登入 ADFS1 VM,開啟 AD FS 管理 MMC,然後點選「應用程式群組」,即可驗證 OIDC 設定。
登入 ADFS1 VM 後,開啟
C:\config並尋找名為<Your Connector Name> Srv App.txt的檔案。儲存這個檔案中的Identifier和ClientSecret值,以便稍後與應用程式搭配使用。記錄 ID 和密鑰值後,請刪除這個檔案。
GDC 基礎架構控制台的 OIDC 設定
收集 GDC 部署作業的 OIDC 連接器資訊。
- 重新導向 URI:
https://ais-core.<GDC_name>.<DNS_domain>/finish-login, 例如https://ais-core.example.domain.local/finish-login。 - GDC 服務控制台網址:
https://infra-console.<GDC_name>.<DNS_domain>, 例如https://infra-console.example.domain.local。
- 重新導向 URI:
按照上述步驟建立 OIDC 連線。
設定 GDC 儲存格上的 Anthos Identity Service (AIS) 後,請使用 GDC 控制台的網址測試 OIDC 設定。
- 登入 OIC 工作站。
- 開啟 Chrome,然後前往基礎架構控制台網址,例如
https://infra-console.example.domain.local。 - 系統提示時,請輸入使用者名稱和密碼。如果憑證有效,系統會將您重新導向至基礎架構控制台 GUI。
針對這個 ADFS 伺服器管理的每個 GDC 儲存格,視需要重複執行這個步驟。
ADFS 的 GDC DNS 設定
登入系統控制器或 Bootstrapper。
匯出根管理員叢集的
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 複製到系統控制器或 Bootstrapper,並命名為
adfs.cer。登入系統控制器或啟動程序,然後將 ADFS 根 CA 匯出至殼層變數,並採用 Base64 編碼。下列指令會將憑證 (包含標頭) 編碼為單行 Base64 格式 (不含換行字元):
export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")匯出 Root 管理員叢集
kubeconfig:export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig前往
iac存放區,然後新增全域機構的目錄結構: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值。GKE Identity Service 必須使用這個採用 Base64 編碼和 PEM 編碼的憑證,才能與內部 ADFS 執行個體建立安全連線。
ADFS_CLIENT_IDADFS 中機構用戶端的 OpenID Connect ID。 ADFS_CLIENT_SECRET在 ADFS 中註冊的機構用戶端 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 commit將更新推送至 GitLab:
git -c http.sslVerify=false push等待程式碼審查和合併。
確認新增的 IdP 是否位於
ClientConfig中:kubectl get ClientConfig default -n kube-public -o yaml
設定 ADFS 多重驗證
需求條件
- 已根據「5.16 強化和政策應用」一節,為使用者佈建 YubiKey。
- 已確認 AD FS 的所有先前步驟都正常運作,也就是說,使用者可以透過 AD FS 的使用者名稱和密碼驗證,存取 GDC 端點。
操作說明
請按照下列步驟設定 ADFS 多重驗證。
全域啟用 ADFS 憑證驗證
在 ADFS1 主機上執行下列步驟。
- 使用 -sa 帳戶 (例如 username-sa),透過遠端桌面協定連線至 ADFS1 主機。
- 以
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 組織)
- GitLab
- ServiceNow
- 其他組織
在全球範圍內嚴格強制執行 ADFS MFA 驗證
在 ADFS1 主機上執行下列步驟。
- 以 -sa 帳戶 (例如 alexb-sa) 遠端桌面連線至 ADFS1 主機。
- 以管理員身分執行 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 碼,與先前的測試相同。
設定完成。