20. OI Active Directory 同盟服務

預計完成時間:18 小時

可操作元件擁有者:OIC

如何設定 OIDC 連線

OIDC 連線是由所需狀態設定 (DSC) 管理。雖然可以手動建立,但建議使用 DSC。

  1. 以使用者 Marvin 身分登入 CONFIG1 VM。

  2. 使用 VSCode 或您選擇的編輯器開啟 c:\config\config.ps1

  3. 搜尋 -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  = @{
            
    }
    
  4. NameRedirectURI 參數更新為與新 OIDC 連線相關聯的值。儲存 config.ps1 檔案。

  5. 以管理員身分開啟 PowerShell 視窗,然後更新 ADFS1 伺服器設定。將 [Site] 替換為您的網站代碼。

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. 登入 ADFS1 VM,開啟 AD FS 管理 MMC,然後點選「應用程式群組」,即可驗證 OIDC 設定。

  7. 登入 ADFS1 VM 後,開啟 C:\config 並尋找名為 <Your Connector Name> Srv App.txt 的檔案。儲存這個檔案中的 IdentifierClientSecret 值,以便稍後與應用程式搭配使用。記錄 ID 和密鑰值後,請刪除這個檔案。

GDC 基礎架構控制台的 OIDC 設定

  1. 收集 GDC 部署作業的 OIDC 連接器資訊。

    1. 重新導向 URI: https://ais-core.<GDC_name>.<DNS_domain>/finish-login, 例如 https://ais-core.example.domain.local/finish-login
    2. GDC 服務控制台網址: https://infra-console.<GDC_name>.<DNS_domain>, 例如 https://infra-console.example.domain.local
  2. 按照上述步驟建立 OIDC 連線。

  3. 設定 GDC 儲存格上的 Anthos Identity Service (AIS) 後,請使用 GDC 控制台的網址測試 OIDC 設定。

    1. 登入 OIC 工作站。
    2. 開啟 Chrome,然後前往基礎架構控制台網址,例如 https://infra-console.example.domain.local
    3. 系統提示時,請輸入使用者名稱和密碼。如果憑證有效,系統會將您重新導向至基礎架構控制台 GUI。

    針對這個 ADFS 伺服器管理的每個 GDC 儲存格,視需要重複執行這個步驟。

ADFS 的 GDC DNS 設定

  1. 登入系統控制器或 Bootstrapper。

  2. 匯出根管理員叢集的 kubeconfig

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. 使用正向區域設定 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
    
  4. 如果變更未套用,請重新啟動部署作業:

    kubectl rollout restart deployment -n dns-system gpc-coredns-forwarder
    

    這項 DNS 變更會傳播至 GDC 中的所有叢集。

  5. 使用根管理員 kubeconfig,驗證 OCIT 網域解析是否正常運作:

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. 為機構管理員叢集匯出 kubeconfig

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. 套用機構管理員 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 設定

  1. 登入 ADFS1,然後開啟 AD FS 管理 MMC

  2. 按一下「服務」>「憑證」

  3. 按兩下「服務通訊」的憑證

  4. 按一下「認證路徑」分頁標籤

  5. 選取標示為「根」的最上層憑證

  6. 按一下「查看認證」

  7. 選取「詳細資料」分頁,然後按一下「複製到檔案...」。

    1. 另存為 Base-64 (.CER) 格式
  8. 將 ADFS 根 CA 複製到系統控制器或 Bootstrapper,並命名為 adfs.cer

  9. 登入系統控制器或啟動程序,然後將 ADFS 根 CA 匯出至殼層變數,並採用 Base64 編碼。下列指令會將憑證 (包含標頭) 編碼為單行 Base64 格式 (不含換行字元):

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. 匯出 Root 管理員叢集 kubeconfig

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. 前往 iac 存放區,然後新增全域機構的目錄結構:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. 為機構新增 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_ID ADFS 中機構用戶端的 OpenID Connect ID。
    ADFS_CLIENT_SECRET 在 ADFS 中註冊的機構用戶端 OpenID Connect 密鑰。
    OCIT_DOMAIN OCIT 網域名稱。詳情請參閱「ADFS 的 GDC DNS 設定」。
  13. 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
    
  14. 暫存並提交機構組織 YAML 檔案和 kustomize 檔案:

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. 將更新推送至 GitLab:

    git -c http.sslVerify=false push
    
  16. 等待程式碼審查和合併。

  17. 確認新增的 IdP 是否位於 ClientConfig 中:

      kubectl get ClientConfig default -n kube-public -o yaml
    

設定 ADFS 多重驗證

需求條件

  1. 已根據「5.16 強化和政策應用」一節,為使用者佈建 YubiKey。
  2. 已確認 AD FS 的所有先前步驟都正常運作,也就是說,使用者可以透過 AD FS 的使用者名稱和密碼驗證,存取 GDC 端點。

操作說明

請按照下列步驟設定 ADFS 多重驗證。

全域啟用 ADFS 憑證驗證

在 ADFS1 主機上執行下列步驟。

  1. 使用 -sa 帳戶 (例如 username-sa),透過遠端桌面協定連線至 ADFS1 主機。
  2. Administrator 身分執行 PowerShell 視窗。
  3. 檢查環境中是否已啟用 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}
    
  4. 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 工作站上完成下列步驟。

  1. 以非具備權限的帳戶登入 OC IT 工作站。
  2. 開啟 Chrome 瀏覽器,然後如常存取 infra-console.CELL_NAME.DOMAIN,例如 https://infra-console.example.domain.local
  3. 按一下「登入」按鈕下方的「使用憑證登入」選項。

    OC-IT
image

  4. 在對話方塊視窗中選取非具備權限的使用者憑證,然後按一下「確定」

    OC-IT
image

  5. 系統提示時,請輸入 YubiKey PIN 碼,然後按一下「確定」

    OC-IT
image

  6. 如果 ADFS 驗證正常運作,您應該會看到基礎架構控制台 GUI,就像您輸入了使用者名稱和密碼一樣。

  7. 使用「登出」按鈕登出基礎架構控制台,然後關閉所有 Chrome 視窗。這項操作會移除快取憑證,並讓您測試各個 GDC 端點。

    OC-IT
image

  8. 針對每個 GDC 端點重複執行本節中的步驟,並記得每次都要登出及關閉 Chrome,確保系統會提示您進行 AD FS 驗證:

    • Console.gdchservices (gdchservices 組織)
    • GitLab
    • ServiceNow
    • 其他組織

在全球範圍內嚴格強制執行 ADFS MFA 驗證

在 ADFS1 主機上執行下列步驟。

  1. 以 -sa 帳戶 (例如 alexb-sa) 遠端桌面連線至 ADFS1 主機。
  2. 以管理員身分執行 PowerShell 視窗。
  3. 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 工作站執行下列步驟。

  1. 以非具備權限的帳戶登入 OC IT 工作站。
  2. 開啟 Chrome 瀏覽器,然後如常存取 infra-console.CELL_NAME.DOMAIN,例如 https://infra-console.example.domain.local
  3. AD FS 入口網站會立即要求提供憑證或 YubiKey。系統不應再顯示使用者名稱或密碼欄位。

    OC-IT
image

  4. 選取憑證後,請輸入 YubiKey PIN 碼,與先前的測試相同。

    OC-IT
image

設定完成。