20. Serviços de federação do Active Directory do OI

Tempo estimado para a conclusão: 18 horas

Proprietário do componente operacional: OIC

Como configurar uma conexão OIDC

As conexões OIDC são gerenciadas pela configuração de estado desejado (DSC, na sigla em inglês). Embora possam ser criados manualmente, o DSC é o método preferido.

  1. Faça login na VM CONFIG1 como usuário Marvin.

  2. Abra c:\config\config.ps1 usando o VSCode ou o editor de 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 chamada AdfsAppGrp contém tabelas de hash de conexões OIDC. Copie toda a tabela de hash de Example-OIDC e cole-a depois da tabela de hash Example-OIDC atual. Exemplo:

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Atualize os parâmetros Name e RedirectURI com os valores associados à nova conexão OIDC. Salve o arquivo 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 fazendo login na VM ADFS1, abrindo o MMC Gerenciamento do AD FS e clicando em Grupos de aplicativos.

  7. Com a VM ADFS1 aberta, abra C:\config e procure um arquivo chamado <Your Connector Name> Srv App.txt. Salve os valores Identifier e ClientSecret encontrados nesse arquivo para uso posterior com seu aplicativo. Exclua esse arquivo depois que os valores de identificador e secreto forem registrados.

Configuração do OIDC para o console de infraestrutura do GDC

  1. Coletar informações do conector OIDC para a implantaçã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 do console de serviços do GDC: https://infra-console.<GDC_name>.<DNS_domain>, por exemplo, https://infra-console.example.domain.local.
  2. Siga as etapas anteriores para criar a conexão OIDC.

  3. Depois que o Anthos Identity Service (AIS) na célula do GDC for configurado, teste a configuração do OIDC com o URL do console do GDC.

    1. Faça login em uma estação de trabalho da OIC.
    2. Abra o Chrome e navegue até o URL do console de infraestrutura, por exemplo, https://infra-console.example.domain.local.
    3. Quando solicitado, digite seu nome de usuário e senha. Se as credenciais forem válidas, você será redirecionado para a GUI do console de infraestrutura.

    Repita essa etapa conforme necessário para cada célula do GDC gerenciada por esse servidor do ADFS.

Configuração de DNS do GDC para o ADFS

  1. Faça login no controlador do sistema ou no bootstrap.

  2. Exporte kubeconfig para o cluster de administrador raiz:

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

    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
    

    A saída será semelhante a este exemplo:

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

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

    Essa mudança de DNS é propagada para todos os clusters no GDC.

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

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. Exporte 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 de domínio do OCIT está funcionando conforme o esperado:

    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 AIS do GDC para o console

  1. Faça login no ADFS1 e abra o MMC de gerenciamento do AD FS.

  2. Clique em "Serviço > Certificados".

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

  4. Clique na guia "Caminho da certificação".

  5. Selecione o certificado mais acima, rotulado como "Raiz".

  6. Clique em "Ver certificado".

  7. Selecione a guia "Detalhes" e clique em "Copiar para arquivo...".

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

  9. Faça login no controlador do sistema ou no bootstrap e exporte a CA raiz do ADFS para uma variável de shell com codificação base64. O comando a seguir codifica o certificado, incluindo cabeçalhos, em base64 como uma única linha (sem caracteres 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 até o repositório iac e adicione a estrutura de diretórios da organização global:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Adicione o arquivo 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 você criou em uma etapa anterior.

    Esse certificado codificado em PEM e em base64 que o ADFS usa para autossinatura é exigido pelo GKE Identity Service para estabelecer uma conexão segura com uma instância interna do ADFS.

    ADFS_CLIENT_ID O ID do OpenID Connect para o cliente da organização no ADFS.
    ADFS_CLIENT_SECRET A chave secreta do OpenID Connect para o cliente da organização registrada no ADFS.
    OCIT_DOMAIN O nome de domínio do OCIT. Para mais informações, consulte Configuração de DNS do GDC para o ADFS.
  13. Adicione o arquivo 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. Adicione e faça commit do arquivo YAML da organização e dos arquivos 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 e a fusão do código.

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

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

Configurar a autenticação multifator do ADFS

Requisitos

  1. As YubiKeys foram provisionadas para usuários por seção 5.16 Aplicações de política e proteção.
  2. Todas as etapas anteriores do AD FS foram confirmadas como funcionando conforme o esperado. Isso significa que os usuários podem acessar os endpoints do GDC usando a autenticação de nome de usuário e senha com o AD FS.

Instruções

Siga as etapas abaixo para configurar a autenticação multifator do ADFS.

Ativar a autenticação de certificado do ADFS globalmente

Siga as etapas abaixo no host do ADFS1.

  1. Use o RDP para se conectar ao host ADFS1 usando sua conta -sa, por exemplo, username-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 usado no 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}
    
Testar a autenticação de certificado do ADFS

Conclua as etapas a seguir em uma estação de trabalho de TI da OC.

  1. Faça login em uma estação de trabalho de TI da OC com sua conta sem privilégios.
  2. Abra o navegador Chrome e acesse infra-console.CELL_NAME.DOMAIN como faria normalmente, por exemplo, https://infra-console.example.domain.local.
  3. Clique na opção Fazer login usando um certificado que aparece abaixo do botão Fazer login.

    OC-IT
image

  4. Selecione o certificado de usuário sem privilégios na janela de diálogo e clique em OK.

    OC-IT
image

  5. Quando solicitado, digite o PIN da YubiKey e clique em OK.

    OC-IT
image

  6. Se a autenticação do ADFS estiver funcionando corretamente, a GUI do infra-console vai aparecer como se você tivesse inserido seu nome de usuário e senha.

  7. Saia do console de infraestrutura usando o botão Sair e feche todas as janelas do Chrome. Essa ação remove as credenciais armazenadas em cache e permite testar cada endpoint do GDC.

    OC-IT
image

  8. Repita as etapas desta seção para cada endpoint do GDC. Não se esqueça de fazer logout e fechar o Chrome a cada vez para garantir que os prompts de autenticação do AD FS sejam apresentados:

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

Aplicar rigorosamente a autenticação MFA do ADFS globalmente

Siga as etapas abaixo no host do ADFS1.

  1. Faça RDP no host ADFS1 como sua conta -sa, por exemplo, alexb-sa.
  2. Execute uma janela do PowerShell como administrador.
  3. Defina o PrimaryIntranetAuthenticationProvider para incluir SOMENTE 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 endpoint do GDC

Execute as etapas a seguir em uma estação de trabalho de TI da OC.

  1. Faça login em uma estação de trabalho de TI da OC com sua conta sem privilégios.
  2. Abra o navegador Chrome e acesse 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. Os campos de nome de usuário ou senha não vão mais aparecer.

    OC-IT
image

  4. Depois de selecionar o certificado, insira o PIN da YubiKey, idêntico ao teste anterior.

    OC-IT
image

A configuração está concluída.