20. OI Active Directory Federation Services

Tempo estimado até à conclusão: 18 horas

Proprietário do componente operável: OIC

Como configurar uma ligação OIDC

As ligações OIDC são geridas pela configuração do estado desejado (DSC). Embora possam ser criadas manualmente, as campanhas de DSC são o método preferencial.

  1. Inicie sessão na VM CONFIG1 como utilizador Marvin.

  2. Abra c:\config\config.ps1 com o VSCode ou o editor da sua escolha.

  3. Pesquise -ADFS1 para encontrar o nó de configuração do servidor ADFS.

    # Example ADFS server noe in config.ps1
    NodeName           = "$Site1Code-ADFS1"
    HyperVHost         = 'AA-OC-BM01'
    Role               = 'adfs'
    IPv4Addr           = '172.21.0.23'
    

    Uma matriz denominada AdfsAppGrp contém tabelas hash de associações OIDC. Copie toda a tabela hash de Example-OIDC e cole-a após a tabela hash Example-OIDC existente. Exemplo:

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Atualize os parâmetros Name e RedirectURI para os valores associados à sua nova ligação OIDC. Guarde o ficheiro config.ps1.

  5. Abra uma janela do PowerShell como administrador e atualize a configuração do servidor ADFS1. Substitua [Site] pelo código do seu site.

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. Valide a configuração do OIDC iniciando sessão na VM ADFS1, abrindo o MMC AD FS Management e, de seguida, clicando em Application Groups.

  7. Enquanto tem sessão iniciada na VM ADFS1, abra C:\config e procure um ficheiro com o nome <Your Connector Name> Srv App.txt. Guarde os valores Identifier e ClientSecret encontrados neste ficheiro para utilização posterior com a sua aplicação. Elimine este ficheiro assim que os valores do identificador e do segredo forem registados.

Configuração do OIDC para a infraestrutura da GDC

  1. Recolha informações do conetor OIDC para a implementação do GDC.

    1. URIs de redirecionamento: https://ais-core.<GDC_name>.<DNS_domain>/finish-login, por exemplo, https://ais-core.example.domain.local/finish-login.
    2. URL da GDC Service Console: https://infra-console.<GDC_name>.<DNS_domain>, por exemplo, https://infra-console.example.domain.local.
  2. Siga os passos anteriores para criar a ligação OIDC.

  3. Depois de configurar o Anthos Identity Service (AIS) na célula do GDC, teste a configuração do OIDC com o URL da consola do GDC.

    1. Inicie sessão numa estação de trabalho da OIC.
    2. Abra o Chrome e navegue para o URL da infraestrutura de consola, por exemplo: https://infra-console.example.domain.local.
    3. Quando lhe for pedido, introduza o nome de utilizador e a palavra-passe. Se as credenciais forem válidas, é feito o redirecionamento para a GUI da infraestrutura da consola.

    Repita este passo conforme necessário para cada célula do GDC gerida por este servidor ADFS.

Configuração de DNS do GDC para o ADFS

  1. Inicie sessão no controlador do sistema ou no programa de arranque.

  2. Exporte o kubeconfig para o cluster de administrador raiz:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. Configure o OCIT_DOMAIN através de uma zona de encaminhamento. Substitua OCIT_DOMAIN pelo nome do domínio do OCIT e os pontos finais pelos endereços IP do DNS do OC:

    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
    

    O resultado tem o seguinte aspeto:

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. Se as alterações não forem aplicadas, reinicie a implementação:

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

    Esta alteração de DNS propaga-se a todos os clusters no GDC.

  5. Com o kubeconfig do administrador raiz, valide se a resolução do domínio OCIT está a funcionar conforme esperado:

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. Exportar kubeconfig para o cluster de administrador da organização:

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. Aplique o kubeconfig do administrador da organização e valide se a resolução do domínio OCIT está a funcionar conforme previsto:

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-infra-forwarder | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    

Configuração do GDC AIS para a consola

  1. Inicie sessão no ADFS1 e, em seguida, abra o MMC de gestão do AD FS

  2. Clique em Serviço > Certificados

  3. Clique duas vezes no certificado para comunicações de serviço

  4. Clique no separador Caminho de certificação

  5. Selecione o certificado mais acima etiquetado como Raiz

  6. Clique em Ver certificado

  7. Selecione o separador Detalhes e, de seguida, clique em Copiar para ficheiro…

    1. Guardar no formato Base-64 (.CER)
  8. Copie a AC raiz do ADFS para o controlador do sistema ou o Bootstrapper como adfs.cer.

  9. Inicie sessão no controlador do sistema ou no programa de arranque e, em seguida, exporte a AC raiz do ADFS para uma variável de shell com codificação base64. O comando seguinte codifica o certificado, incluindo os cabeçalhos, em base64 como uma única linha (sem carateres de nova linha):

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. Exporte o cluster de administrador raiz kubeconfig:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. Navegue para o repositório iac e adicione a estrutura de diretórios para a organização global:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Adicione o ficheiro ioauthmethod.yaml para a organização:

    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
    

    Substitua as seguintes variáveis:

    VariávelDefinição
    ADFS_CERT_BASE64

    O valor de $BASE64_CERT que criou num passo anterior.

    Este certificado codificado em PEM codificado em base64 que o ADFS usa para autossinar é necessário para o serviço de identidade do GKE estabelecer uma ligação segura com uma instância do ADFS interna.

    ADFS_CLIENT_ID O ID do OpenID Connect para o cliente da organização no ADFS.
    ADFS_CLIENT_SECRET O segredo do OpenID Connect para o cliente da organização registado no ADFS.
    OCIT_DOMAIN O nome de domínio do OCIT. Para mais informações, consulte o artigo Configuração de DNS do GDC para o ADFS.
  13. Adicione o ficheiro kustomization.yaml à pasta global 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. Prepare e confirme o ficheiro YAML da organização e os ficheiros do Kustomize:

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. Envie a atualização para o GitLab:

    git -c http.sslVerify=false push
    
  16. Aguarde a revisão do código e a união.

  17. Verifique se o IdP recém-adicionado existe em ClientConfig:

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

Configure a autenticação multifator do ADFS

Requisitos

  1. As YubiKeys foram aprovisionadas aos utilizadores de acordo com a secção 5.16 Aplicações de políticas e reforço da segurança.
  2. Todos os passos anteriores para o AD FS foram confirmados como estando a funcionar conforme esperado, o que significa que os utilizadores conseguem aceder aos pontos finais do GDC através da autenticação de nome de utilizador e palavra-passe com o AD FS.

Instruções

Siga os passos seguintes para configurar a autenticação multifator do ADFS.

Ative a autenticação de certificados do ADFS globalmente

Execute os seguintes passos no anfitrião do ADFS1.

  1. Aceda ao RDP do anfitrião ADFS1 com a sua conta -sa, por exemplo, nome de utilizador-sa.
  2. Execute uma janela do PowerShell como Administrator.
  3. Verifique se CertificateAuthentication já está ativado no seu ambiente:

    # 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. Defina o PrimaryIntranetAuthenticationProvider para incluir CertificateAuthentication. Além disso, remova um método de autenticação não utilizado na TI do OC, 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}
    
Teste a autenticação de certificados do ADFS

Conclua os passos seguintes numa estação de trabalho de TI do OC.

  1. Inicie sessão numa estação de trabalho de TI do OC com a sua conta sem privilégios.
  2. Abra o navegador Chrome e aceda a infra-console.CELL_NAME.DOMAIN como faria normalmente, por exemplo, https://infra-console.example.domain.local.
  3. Clique na opção Iniciar sessão com um certificado apresentada abaixo do botão Iniciar sessão.

    OC-IT
image

  4. Selecione o certificado de utilizador não privilegiado na janela de diálogo e clique em OK.

    OC-IT
image

  5. Quando lhe for pedido, introduza o PIN do YubiKey e clique em OK.

    OC-IT
image

  6. Se a autenticação do ADFS estiver a funcionar corretamente, deve ver a GUI da consola de infraestrutura como se tivesse introduzido o seu nome de utilizador e palavra-passe.

  7. Termine sessão na infraestrutura de consola através do botão Terminar sessão e, em seguida, feche todas as janelas do Chrome. Esta ação remove as credenciais em cache e permite-lhe testar cada ponto final do GDC.

    OC-IT
image

  8. Repita os passos nesta secção para cada ponto final do GDC, lembrando-se de terminar sessão e fechar o Chrome sempre para garantir que lhe são apresentadas as instruções de autenticação do AD FS:

    • Console.gdchservices (gdchservices org)
    • GitLab
    • ServiceNow
    • Outras organizações

Aplique rigorosamente a autenticação MFA do ADFS a nível global

Execute os seguintes passos no anfitrião do ADFS1.

  1. Use o RDP para aceder ao anfitrião do ADFS1 como a sua conta -sa, por exemplo, alexb-sa.
  2. Execute uma janela do PowerShell como administrador.
  3. Defina o PrimaryIntranetAuthenticationProvider para incluir APENAS 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}
    

Teste novamente cada ponto final do GDC

Execute os passos seguintes a partir de uma estação de trabalho de TI do OC.

  1. Inicie sessão numa estação de trabalho de TI do OC com a sua conta sem privilégios.
  2. Abra o navegador Chrome e aceda a infra-console.CELL_NAME.DOMAIN como faria normalmente, por exemplo, https://infra-console.example.domain.local.
  3. O portal do AD FS pede imediatamente um certificado ou uma YubiKey. Já não deve ver campos para um nome de utilizador ou uma palavra-passe.

    OC-IT
image

  4. Depois de selecionar o certificado, introduza o PIN da YubiKey, idêntico ao dos testes anteriores.

    OC-IT
image

A configuração está concluída.