Planejar sua identidade para operações desconectadas no Azure Local

Este artigo explica como planejar e integrar sua identidade para operações desconectadas no Azure Local. Saiba como configurar sua solução de identidade e entender as ações e funções disponíveis para os operadores.

Entender e planejar a identidade

Para operações desconectadas, você precisa se integrar a uma solução de gerenciamento de acesso e identidade existente. Antes de implantar operações desconectadas, certifique-se de entender as etapas necessárias para integrar e aplicar a solução de identidade.

As operações desconectadas dão suporte a essas soluções:

  • Active Directory: Grupos e associações
  • Serviços de Federação do Active Directory (AD FS): Autenticação

Observação

Há suporte apenas para grupos universais no Active Directory. Defina o escopo do grupo como Universal ao configurar associações de grupo.

Entender como funciona a integração de identidade

Durante a implantação, configure operações desconectadas para integrar com seu IDP (provedor de identidade) e gerenciamento de identidade e acesso. Especifique um operador Raiz. Esse usuário possui uma assinatura de operador especial e adiciona outros operadores após a implantação. A assinatura do Operador define o escopo das ações do operador e as ações individuais dependem da função Operador.

Em um alto nível, o ponto de extremidade do OpenID Connect (OIDC) autentica os usuários para operações desconectadas e o ponto de extremidade LDAP (Lightweight Directory Access Protocol) integra grupos e associações de sua organização. Após a integração, o controle de acesso baseado em função padrão do Azure é atribuído aos escopos desejados.

Captura de tela de como o dispositivo e os usuários ou cargas de trabalho se comunicam com o serviço.

Observação

As atribuições de função e as políticas não são herdadas da assinatura do operador para assinaturas individuais. Cada assinatura tem seu próprio escopo. Somente funções específicas atribuídas a assinaturas individuais podem executar ações dentro dessa assinatura específica.

Entender a função e as ações do operador

Você pode atribuir mais operadores à assinatura do operador para que eles possam executar ações diárias. O papel Proprietário integrado na assinatura de operador permite que os operadores executem essas ações no escopo: /Subscriptions/\<GUID>/Microsoft.AzureLocalOperator/*.

Para ajudá-lo a entender a função de operador e as ações que podem ser executadas, as tabelas a seguir fornecem um detalhamento das ações disponíveis em diferentes categorias. Essas categorias incluem gerenciamento de identidade e acesso, gerenciamento de assinatura e observabilidade e diagnóstico.

Use essas tabelas para identificar as tarefas específicas que os operadores podem executar no escopo da assinatura do operador.

Gerenciamento de identidade e acesso

Ação Operador
Atribuir mais operadores Yes
Criar SPN Yes
Excluir SPN Yes
Listar SPNs (Nomes Principais de Serviço) Yes
Atualizar O SPN Yes
Exibir associações de grupo (sincronizado) Yes
Exibir configuração de identidade Yes
Exibir o status de sincronização de identidade Yes

Gerenciamento de assinaturas

Ação Operador
Criar Alias Yes
Criar assinaturas Yes
Excluir alias Yes
Excluir assinatura Yes
Apelido de lista Yes
Listar todas as assinaturas Yes
Reatribuir a propriedade da assinatura Yes
Renomear assinatura Yes
Retomar assinatura Yes

Observabilidade e diagnóstico

Ação Operador
Coletar logs Yes
Configurar diagnóstico e configurações de log geradas pelo sistema Yes
Configurar o encaminhamento do syslog Yes
Baixar logs Yes

Há algumas exceções às ações disponíveis para os operadores:

  • Os operadores não podem excluir uma assinatura de operador.

  • Os proprietários atribuídos a um SPN (nome da entidade de serviço) também podem excluir esse SPN.

Observação

Somente as ações fornecidas estão disponíveis no portal do Azure.

Outras funções internas, como operador de segurança, gerenciador de assinaturas e operador de suporte , podem ser consideradas e avaliadas, se necessário. Para obter funções de operador mais detalhadas, você pode criar definições de função personalizadas com base na função de operador e atribuir acesso à assinatura do operador.

Entender a sincronização

Depois de concluir a configuração inicial, o sistema sincroniza grupos com associações de grupo, tornando-os acessíveis para operações desconectadas. Para ver quais grupos e associações são sincronizados, use uma API (interface de programação de aplicativo) de operador, como Get-ApplianceExternalIdentityObservability listada no Apêndice. A sincronização é executada periodicamente, a cada seis horas.

Lista de verificação de identidade

Use essa lista de verificação para planejar sua integração de identidade com operações desconectadas.

  • Identifique endereços IP ou um FQDN (nome de domínio totalmente qualificado) para:

    • Ponto de extremidade LDAP (Active Directory)
    • Ponto de extremidade de logon (AD FS/OIDC)
  • Se você usar um FQDN para o endpoint LDAP:

    • Verifique se o aparelho de operações desconectadas está configurado e utiliza um sistema de nomes de domínio (DNS) que resolve o ponto de extremidade fornecido.
  • Crie uma conta com acesso somente leitura no servidor LDAP v3 (Active Directory).

  • Identifique o grupo raiz para sincronização de membros.

  • Identifique UPN. Esse usuário deve receber a função de operador Inicial.

Colete e disponibilize os seguintes parâmetros antes da implantação:

Nome do parâmetro Descrição Exemplo
Autoridade Um URI de autoridade acessível que fornece informações sobre endpoints OIDC, metadados e muito mais. https://adfs.contoso-AzureLocal.com/adfs
ClientID AppID criado ao configurar o aplicativo adfsclient. 00001111-aaaa-2222-bbbb-3333cccc4444
LdapCredential (nome de usuário e senha) Credenciais (somente leitura) para integração LDAP. Nome de usuário: ldap

Senha:******
LdapsCertChainInfo Informações da cadeia de certificação para o ponto de extremidade LDAP. Você pode omitir as informações da cadeia de certificados para fins de demonstração. Como obter a cadeia de certificados
OidcCertChainInfo Informações de cadeia de certificados para o ponto de extremidade OIDC. Você pode omitir as informações da cadeia de certificados para fins de demonstração. Como obter a cadeia de certificados
LdapServer Endpoint LDAP que pode ser acessado por operações desconectadas. Este endpoint sincroniza grupos e membros de grupo. Ldap.local.contoso.com
LdapPort Porta LDAP usada para se conectar ao catálogo global. O padrão 3268 é um canal não seguro e 3269 é um canal ssl/seguro para o catálogo global 3269
RootOperatorUserPrincipalName UPN da persona do operador inicial à qual foi concedido acesso à assinatura do Operador Cloud-admin@local.contoso.com
SyncGroupIdentifier GUID para o grupo do Active Directory do qual iniciar a sincronização.

$group = Get-ADGroup -Identity “mygroup” \| Select-Object Name, ObjectGUID
81d71e5c5-abc4-11af-8132-afdf6bbe2ec1
Certificado de Automação (Opcional) Certificado a ser usado para a conta de automação

Crie o certificado do cliente usando sua própria PKI ou use o certificado autoassinado e proteja este certificado
$cert=New-SelfSignedCertificate -Subject 'Conta de Automação'

Parâmetro de configuração de exemplo:

$ldapPass = 'retracted'|Convertto-securestring -asplaintext -force
$idpConfig = @{ 
     authority = 'https://adfs.contoso-AzureLocal.com/adfs'    
           clientId  = '9e7655c5-1bc4-45af-8345-cdf6bbf4ec1'    
           rootOperatorUserPrincipalName = 'operator@local.contoso.com'    
           ldapServer                    = 'ldap.local.contoso.com'    
           LdapCredential = New-Object PSCredential -ArgumentList @("ldap", $ldapPass)
      syncGroupIdentifier           = '81d71e5c5-abc4-11af-8132-afdf6bbe2ec1'
}

Implantações totalmente automatizadas

Para implantações totalmente automatizadas, use o AutomationCertificate como parte da IdentityConfiguration. Isso permite automatizar o fluxo de implantação completo, pois essa conta pode ser usada para fazer logon como um operador, para criar assinaturas, registrar provedores de recursos e executar com automação completa.

Aqui está um exemplo de como fazer logon com esse certificado após a implantação:

$username = '2cb981cc-147e-47cd-a32c-4bb0dfa60573'
$certPath = 'C:\Aldo\operatorcert.pem'
$tenantId = 'aaaabbbb-0000-cccc-1111-dddd2222eeee'
# Example using az login
az login --service-principal --username $username --certificate $certPath --tenant $tenantId

# Example using Powershell
# Make sure the cert is installed in the CurrentUser cert store
$CertThumbprint = (Get-ChildItem Cert:\CurrentUser\My | Where-Object { $_.Subject -like "*Azure Local disconnected operations automation credential*" }).Thumbprint
Connect-AzAccount -ServicePrincipal `
                  -ApplicationId $username`
                  -TenantId $tenantId `
                  -CertificateThumbprint $certThumbprint

Anote o seguinte:

  • O nome de usuário é estático. Essa é a ID do aplicativo agindo como o operador
  • Você precisa garantir que converteu/exportou o certificado para um arquivo .pem

Limitações

Considere essas limitações ao planejar sua integração de identidade com operações desconectadas:

  • Usuários e remoção de grupo após a sincronização: se você remover usuários e grupos com associações após a última sincronização, as operações desconectadas não os limparão. Essa limitação pode causar erros ao consultar associações de grupo.

  • Nenhuma funcionalidade de sincronização forçada: a sincronização inicial pode levar até seis horas. Depois disso, a sincronização é executada a cada 15 minutos.

  • Nenhum grupo de gerenciamento ou nível raiz agregado: esse recurso não está disponível para várias assinaturas.

  • Validações com suporte: somente o Active Directory/AD FS é validado para suporte.

Mitigar problemas de integração de identidade

Como administrador de host, use o cmdlet do PowerShell de operações desconectadas para atualizar as configurações e corrigir problemas. Aqui estão alguns cenários em que talvez seja necessário reconfigurar as configurações de identidade:

  • Falha na sincronização ou não foi iniciada:

    • Verifique se as credenciais LDAP são válidas.
    • Verifique se as credenciais LDAP têm permissão de leitura.
    • Verifique se as operações desconectadas podem alcançar o servidor LDAP, resolver o FQDN (se não estiver usando um endereço IP) e que nenhum firewall bloqueia o tráfego.
  • Conjunto incorreto de grupos sincronizados:

    • Verifique se a SyncGroupIdentifier está configurada para a raiz correta. A que você está sincronizando.
  • Perda de acesso à assinatura do operador

    • Para restaurar o acesso ao operador, altere o rootOperatorUserPrincipalName.

Cmdlets para integração de identidades

Como administrador de host, use o módulo de operações desconectadas e os certificados de instalação para executar cmdlets que auxiliam na alteração das configurações e solucionar problemas de integração de identidades. Execute Get-Command ApplianceExternalIdentity para listar os cmdlets disponíveis para a integração de identidades.

Testar a configuração de identidade

Use esse cmdlet para validar rapidamente a configuração de identidade no lado do cliente.

$idpConfig = new-applianceIdentityConfiguration @identityParams

Test-ApplianceExternalIdentityConfiguration -config $idpConfig

Testar a configuração de identidade (validação profunda)

Use esse cmdlet para validar os parâmetros e a configuração antes de aplicar a configuração.

$idpConfig = new-applianceIdentityConfiguration @identityParams

Test-ApplianceExternalIdentityConfigurationDeep -config $idpConfig

Definir ou redefinir identidade

Use este cmdlet para redefinir a assinatura do operador. Use esse cmdlet somente se você tiver problemas com a integração de identidade.

Set-ApplianceExternalIdentityConfiguration

Gerenciamento de identidades

Use este cmdlet para listar todos os cmdlets que ajudam você a configurar e solucionar problemas de configurações de identidade.

Get-Command *Appliance*ExternalIdentity*

Apêndice

Use o PowerShell no Windows Server 2022 ou mais recente para esses comandos.

Configurar o Active Directory ou o Active Directory Domain Services (ADDS) para fins de demonstração

# Modify to fit your domain/installation
$GSMAAccount = 'Local\gmsa_adfs$'

Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools

# Import the ADDSDeployement module
Import-Module ADDSDeployment

# Install the AD FS role
Install-WindowsFeature ADFS-Federation -IncludeManagementTools

# Promote the server to a domain controller
Install-ADDSForest `
    -DomainName "local.contoso.com" `
    -DomainNetbiosName "local" ` #NETBIOS 15 char limit
    -SafeModeAdministratorPassword (ConvertTo-SecureString "" -AsPlainText -Force) `
    -InstallDns

# Test only
Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
$cert = New-SelfSignedCertificate -DnsName "adfs.local.contoso.com" 

# Import the AD FS module and configure AD FS
Import-Module ADFS

# Install AD FS
Install-AdfsFarm `
    -CertificateThumbprint "$($cert.Thumbprint)" `
    -FederationServiceName "adfs.local.contoso.com" `
    -FederationServiceDisplayName "Local Contoso ADFS" `
    -GroupServiceAccountIdentifier $GSMAAccount

Criar um aplicativo cliente do AD FS, usuários de exemplo e grupos

# ClientID can be any unique id in your organization - hardcoded GUID here just as example
Add-AdfsClient `
    -Name "Azure Local Disconnected operations Sign In Service" `
    -ClientId "11112222-bbbb-3333-cccc-4444dddd5555" `
    -RedirectUri "https://login.autonomous.cloud.private/signin-oidc"

# Import the Active Directory module
Import-Module ActiveDirectory

# Create new Active Directory users
$users = @('operator', 'ldap', 'user1', 'user2', 'user3')
$users | % {Remove-ADUser $_ -Confirm:$false -ErrorAction SilentlyContinue }

$users | % {New-ADUser `
    -Name "AzureLocal User $_" `
    -GivenName "AzureLocal" `
    -Surname "User $_" `
    -SamAccountName $_ `
    -UserPrincipalName "$_@Local.contoso.com" `
    -Path "CN=Users,DC=local,DC=contoso,DC=com" `
    -AccountPassword (ConvertTo-SecureString "" -AsPlainText -Force) `
    -Enabled $true
 }

# Create a new Active Directory group
New-ADGroup `
    -Name "AzureLocal Users" `
    -GroupScope Universal `
    -Path "CN=Users,DC=local,DC=contoso,DC=com"

# Add the user to the group
Add-ADGroupMember `
    -Identity "AzureLocal Users" `
    -Members $users

# Create AD FS sync group and add the operator to it
# Variables
$groupName = "ADFS_Sync_Group"
$ouPath = "CN=Users,DC=local,DC=contoso,DC=com"
$users = @("operator")

# Create the group
New-ADGroup -Name $groupName `
            -SamAccountName $groupName `
            -GroupScope Universal `
            -GroupCategory Security `
            -Path $ouPath `
            -Description "Sync group for ADFS purposes"

# Add members to the group
foreach ($user in $users) {
    Add-ADGroupMember -Identity $groupName -Members $user
}

# Retrieve the group's ObjectGUID
$group = Get-ADGroup -Identity $groupName | Select-Object Name, ObjectGUID

# Display the syncGroupIdentifier (ObjectGUID), which is required by the IDP script run from the host
$group

Conceder permissão de leitura ao usuário LDAP sobre os usuários, com a opção de herança

O exemplo a seguir concede acesso de leitura ao usuário LDAP no contêiner de Usuários, utilizando a configuração ActiveDirectorySecurityInheritance "All". Atribuir uma regra de acesso com "Todos" faz com que a regra se aplique a toda a subárvore do objeto de destino.

$domain = Get-ADDomain
$identity = [System.Security.Principal.NTAccount]"$($domain.Name)\ldap"
$accessRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($identity,  [System.DirectoryServices.ActiveDirectoryRights] "GenericRead",    [System.Security.AccessControl.AccessControlType] "Allow",    [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All")
$acl = Get-Acl -Path "AD:\CN=Users,$($domain.DistinguishedName)"
$acl.AddAccessRule($accessRule)
Set-ACL -Path "AD:\CN=Users,$($domain.DistinguishedName)" -AclObject $acl
Write-Verbose "Granted 'GenericRead' permissions to LDAP account."

Conceder a permissão da conta GSMA para ler as propriedades do usuário

O exemplo a seguir mostra como permitir que a conta GSMA leia as propriedades do usuário no Active Directory do grupo de sincronização.

# GroupName and GSMAccount defined earlier

# Get group details
$Group = Get-ADGroup -Identity $GroupName
$GroupDN = $Group.DistinguishedName

# Build the access rule
$Identity = New-Object System.Security.Principal.NTAccount($GSMAAccount)
$ActiveDirectoryRights = [System.DirectoryServices.ActiveDirectoryRights]::ReadProperty
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All

# Create the access rule and apply it to the group
# bf9679c0-0de6-11d0-a285-00aa003049e2 (Member attribute): https://learn.microsoft.com/en-us/windows/win32/adschema/a-member?redirectedfrom=MSDN 
$Rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $Identity, $ActiveDirectoryRights, $AccessControlType, "bf9679c0-0de6-11d0-a285-00aa003049e2", $InheritanceType
$GroupEntry = [ADSI]"LDAP://$GroupDN"
$Security = $GroupEntry.ObjectSecurity
$Security.AddAccessRule($Rule)
$GroupEntry.CommitChanges()

Observação

Se a conta GSMA da fazenda do ADFS não puder ler as propriedades do usuário, o login falhará mesmo se as credenciais inseridas na página de login do ADFS estiverem corretas.

Verificar e testar a funcionalidade do ADFS

Para habilitar a página de teste do IDPInitiated Signon, siga estas etapas:

  1. Habilite a página de teste de login. Execute este comando:

     Set-AdfsProperties -EnableIdpInitiatedSignonPage $true
    
  2. Vá para IdpInitiatedSignon (https://adfs.FDQN/adfs/ls/IdpInitiatedSignon.aspx) e substitua FQDN pelo nome de domínio real.

    Aqui está um exemplo usando o nome de domínio:

    https://adfs.MYFQDN/adfs/ls/IdpInitiatedSignon.aspx

  3. Entre usando sua conta de operador para confirmar essa funcionalidade do ADFS.

Esse recurso só está disponível no Azure Local 2602 ou posterior.