预计完成时间:18 小时
可操作组件所有者:OIC
如何配置 OIDC 连接
OIDC 连接由所需状态配置 (DSC) 管理。虽然可以手动创建,但 DSC 是首选方法。
以用户
Marvin的身份登录 CONFIG1 虚拟机。使用 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 -NoThirdParty通过以下方式验证 OIDC 配置:登录 ADFS1 虚拟机,打开 AD FS 管理 MMC,然后点击应用组。
登录 ADFS1 虚拟机后,打开
C:\config并查找名为<Your Connector Name> Srv App.txt的文件。保存此文件中找到的Identifier和ClientSecret值,以便稍后在应用中使用。记录标识符和 Secret 值后,请删除此文件。
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。 - 系统提示时,输入您的用户名和密码。如果凭据有效,您将被重定向到 infra-console 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 编码的 shell 变量。以下命令会将证书(包括标头)编码为单行(不含换行符)的 base64 字符串:
export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")导出根管理员集群
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 需要此由 ADFS 用于自签名的 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)通过 RDP 连接到 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)的身份通过 RDP 连接到 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 码。
设置已完成。