20. OI Active Directory Federation Services

预计完成时间:18 小时

可操作组件所有者:OIC

如何配置 OIDC 连接

OIDC 连接由所需状态配置 (DSC) 管理。虽然可以手动创建,但 DSC 是首选方法。

  1. 以用户 Marvin 的身份登录 CONFIG1 虚拟机。

  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 服务器配置。将 [网站] 替换为您的网站代码。

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. 通过以下方式验证 OIDC 配置:登录 ADFS1 虚拟机,打开 AD FS 管理 MMC,然后点击应用组

  7. 登录 ADFS1 虚拟机后,打开 C:\config 并查找名为 <Your Connector Name> Srv App.txt 的文件。保存此文件中找到的 IdentifierClientSecret 值,以便稍后在应用中使用。记录标识符和 Secret 值后,请删除此文件。

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. 系统提示时,输入您的用户名和密码。如果凭据有效,您将被重定向到 infra-console GUI。

    对于此 ADFS 服务器管理的每个 GDC 单元,根据需要重复此步骤。

针对 ADFS 的 GDC DNS 配置

  1. 登录系统控制器或引导加载程序。

  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 复制到系统控制器或引导加载程序,并将其命名为 adfs.cer

  9. 登录系统控制器或引导加载程序,然后将 ADFS 根 CA 导出到具有 base64 编码的 shell 变量。以下命令会将证书(包括标头)编码为单行(不含换行符)的 base64 字符串:

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. 导出根管理员集群 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 需要此由 ADFS 用于自签名的 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)通过 RDP 连接到 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 图片

  4. 在对话框窗口中选择您的非特权用户证书,然后点击确定

    OC-IT 图片

  5. 当系统提示时,输入您的 YubiKey PIN 码,然后点击确定

    OC-IT 图片

  6. 如果 ADFS 身份验证正常运行,您应该会看到基础架构控制台 GUI,就像您输入了用户名和密码一样。

  7. 使用退出按钮退出基础设施控制台,然后关闭所有 Chrome 窗口。此操作会移除缓存的凭据,并允许您测试每个其他 GDC 端点。

    OC-IT 图片

  8. 针对每个 GDC 端点重复本部分中的步骤,请务必每次都退出并关闭 Chrome,以确保系统会提示您进行 AD FS 身份验证:

    • Console.gdchservices (gdchservices 组织)
    • GitLab
    • ServiceNow
    • 其他组织

在全球范围内严格强制执行 ADFS MFA 身份验证

在 ADFS1 主机上运行以下步骤。

  1. 以 -sa 账号(例如 alexb-sa)的身份通过 RDP 连接到 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 图片

  4. 选择证书后,输入与之前测试时相同的 YubiKey PIN 码。

    OC-IT 图片

设置已完成。