onboarding em massa do Agent 365 com PowerShell

Use o onboarding em massa do Agent 365 para reduzir tarefas de configuração repetitivas ao integrar vários agentes. Defina identidades de agentes, patrocinadores, proprietários e cadastros em um CSV revisável, valide seus relacionamentos antes de provisionar e revise os resultados em um relatório consolidado. Os scripts validam o arquivo completo, calculam a ordem das dependências e então criam cada objeto usando o Microsoft Graph.

Use este fluxo de trabalho depois de entender como integrar um único agente com a CLI do Agent 365. Quando precisar integrar vários agentes ao mesmo tempo ou repetir o onboarding de locatários, defina os objetos e seus relacionamentos em um único arquivo CSV, em vez de executar o fluxo de onboarding da CLI separadamente para cada agente.

Este artigo fornece as instruções de integração em massa de ponta a ponta, desde a configuração de automação da aplicação e requisitos de CSV até validação, execução e solução de problemas.

Important

Os scripts de onboarding em massa são automação PowerShell no repositório DevTools do Agent 365. Eles são separados da a365 interface de linha de comando. O aplicativo de automação descrito neste artigo também é separado do aplicativo cliente interativo descrito no Registro personalizado de aplicativo cliente para Agent 365 CLI.

O que o fluxo de trabalho cria

Cada linha CSV representa um objeto. Os relacionamentos compatíveis são:

Blueprint
  |
  +-- AgentIdentity
        |-- AgentUser
        +-- AgentRegistration
Object Purpose
Esquema de identidade de agente Modelo de identidade e permissão reutilizável para um ou mais agentes.
Identidade do agente Identidade Microsoft Entra usada por um agente individual.
Usuário do agente Conta de usuário opcional da Microsoft Entra para um agente que precisa de recursos licenciados do Microsoft 365, como uma caixa de correio.
Registro do agente Registro de inventário que torna o agente detectável nas experiências administrativas do Agente 365.

Um usuário de agente e um registro de agente são filhos independentes de uma identidade de agente. Uma falha em um não impede que se tente o outro.

Important

Criar uma identidade de agente sozinho não gera um registro de inventário do Agente 365. Inclua uma AgentRegistration linha para cada identidade que precise aparecer nas experiências administrativas do Agent 365. Um AgentUser é opcional e não é pré-requisito para o registro.

Para mais informações sobre esses objetos, veja identidade do Agent 365.

Prerequisites

Antes de começar, verifique se você tem:

  • Um tenant onde o Microsoft Agent 365 está disponível.
  • PowerShell 7 ou posterior.
  • Use o Git para clonar o repositório DevTools.
  • O Microsoft.Graph.Authentication módulo PowerShell versão 2.x.
  • É necessário ser um Administrador de Funções com Privilégios ou superior para ter o consentimento único de permissão do aplicativo de automação.
  • Um patrocinador para cada novo blueprint e identidade de agente.
  • Proprietários, gerentes e proprietários de registro que já existem no Microsoft Entra ID.
  • Um domínio de locatário verificado para o nome UPN do novo agente.
  • Uma licença apropriada e um local de uso de duas letras se o CSV atribuir uma licença a um usuário agente.

Os usuários do Agente estão disponíveis apenas para locatários que participam do programa de pré-visualização da Frontier.

Instale o módulo Microsoft Graph obrigatório:

Install-Module Microsoft.Graph.Authentication -Scope CurrentUser

Obtenha os scripts

Clone o repositório DevTools do Agent 365 e depois mude para o diretório de registro em massa:

git clone https://github.com/microsoft/Agent365-devTools.git
Set-Location .\Agent365-devTools\scripts\bulk-agent-registration

Mantenha os scripts nesse diretório juntos. A365-BulkOnboarding.ps1 invoca A365-AutomationOrchestrator.ps1, que invoca os scripts de provisão específicos de objetos.

Configurar autenticação

O onboarding em massa pode ser executado sem vigilância usando um aplicativo de automação de propriedade do locatário ou uma identidade gerenciada atribuída ao sistema. Também pode rodar interativamente com autenticação delegada.

Complete a configuração da aplicação, o consentimento de permissão e a configuração da autenticação antes do primeiro lote. Para cada lote subsequente, prepare o CSV, valide o plano, execute o onboarding e revise os resultados.

As execuções somente por aplicativo utilizam funções de aplicativo concedidas à entidade de serviço do aplicativo de automação ou da identidade gerenciada — e não a função de administrador do operador.

As concessões de permissão para a identidade do runner são separadas da configuração do GrantAdminConsent CSV, que solicita consentimento para permissões declaradas por um blueprint ou identidade do agente. Revise quaisquer ações de consentimento pendentes no relatório de execução.

Important

Não use o aplicativo CLI Agent 365 gerenciado pela Microsoft (f54280f4-395e-4ea8-9e48-bf2d4952aa14) para esse fluxo de trabalho. Esse aplicativo é para autenticação interativa por CLI e não deve ser modificado.

O onboarding em massa suporta estes métodos de autenticação de runner:

Método Parameters Uso recomendado
Segredo do cliente -TenantId -ClientId -ClientSecret Teste ou automação de curta duração
Certificate -TenantId, -ClientId, e exatamente um de -CertificateThumbprint, -Certificate, ou -CertificatePath Automação de produção desatendida
Identidade gerenciada atribuída pelo sistema -TenantId -UseManagedIdentity Automação hospedada em um recurso do Azure
Entrada delegada interativa -TenantId -Interactive; também incluir -ClientId , para um lote que contém linhas AgentUser Integração orientada pelo operador

Credenciais de identidade federadas e seleção gerenciada de identidade atribuída pelo usuário não são suportadas como métodos de autenticação do runner.

Crie a aplicação de automação

Faça login interativamente como Administrador Global ou Administrador de Papéis Privilegiados e crie uma aplicação de automação para todos os tipos de objetos suportados. Crie o aplicativo sem um segredo do cliente ou certificado para que você possa adicionar e gerenciar suas credenciais separadamente no centro de administração do Microsoft Entra:

.\New-A365AutomationApp.ps1 `
    -TenantId <tenant-id> `
    -Interactive `
    -DisplayName 'A365 Provisioning Automation' `
    -Scenario All `
    -SkipGrant

O script cria ou reutiliza o aplicativo e a entidade de serviço e declara as permissões de aplicativo necessárias do Microsoft Graph e os escopos delegados. O aviso de que nenhuma credencial foi adicionada é esperado; o aplicativo não pode autenticar até que você adicione um segredo do cliente ou um certificado. Como o comando usa -SkipGrant, ele não concede consentimento do administrador.

Após o término do comando, peça a um administrador para abrir a URL do Portal impressa pelo script. No centro de administração do Microsoft Entra, selecione Conceder consentimento de administrador para as permissões declaradas. Não comece a integração em massa até que o consentimento administrativo esteja completo. Você pode executar o script novamente para conciliar a aplicação com as declarações de permissão que faltam.

Registre o ID do aplicativo (cliente) da aplicação de automação. Não use o ID do objeto principal de serviço quando um comando pedir -ClientId.

Analise as permissões do aplicativo

-Scenario Alldeclara a união destas permissões de aplicação Microsoft Graph:

Capability Permissões do aplicativo
Projeto AgentIdentityBlueprint.Create
AgentIdentityBlueprint.Read.All
AgentIdentityBlueprint.ReadWrite.All
AgentIdentityBlueprint.AddRemoveCreds.All
AgentIdentityBlueprintPrincipal.Create
AgentIdentityBlueprintPrincipal.Read.All
AgentIdentityBlueprintPrincipal.ReadWrite.All
Identidade do agente AgentIdentity.Create.All
AgentIdentity.Read.All
AgentIdentity.ReadWrite.All
CustomSecAttributeAssignment.ReadWrite.All
CustomSecAttributeDefinition.Read.All
Registration AgentRegistration.ReadWrite.All
AgentInstance.ReadWrite.All
Usuário do agente AgentIdUser.ReadWrite.All
User.ReadWrite.All
Organization.Read.All
Pesquisa e propriedade de diretórios compartilhados Application.Read.All
Application.ReadWrite.All
Directory.Read.All
User.Read.All
Group.Read.All

Os AgentUser, AgentIdentity, Registration e All cenários também declaram escopos delegados para suas operações interativas selecionadas. Os escopos de registro são declarados por padrão e podem ser suprimidos. Uma execução não assistida que usa Auth=Same depende das permissões da aplicação na tabela anterior.

Configurar campos de autenticação

Defina uma tabela hash de autenticação e reutilize-a para validação e execução.

Segredo do cliente

No centro de administração do Microsoft Entra, vá em Identity>Applications>Registros de aplicativo e selecione o aplicativo de automação. Selecione Certificados & segredos>Segredos do cliente>Novo segredo do cliente, insira uma descrição e expiração, e então selecione Adicionar. Copie o valor secreto imediatamente e armazene-o de forma segura; ele não aparece novamente depois que você sai da página. Para mais informações, veja Adicionar credenciais ao seu aplicativo.

Leia o segredo do cliente como um SecureString em vez de colocá-lo diretamente na linha de comando:

$clientSecret = Read-Host -Prompt 'Automation application client secret' -AsSecureString
$authParameters = @{
    TenantId = '<tenant-id>'
    ClientId = '<automation-app-client-id>'
    ClientSecret = $clientSecret
}

Segredos de clientes são menos seguros que certificados e devem ser limitados a testes ou automação de curta duração. Para automação de produção não assistida, use um certificado ou identidade gerenciada atribuída pelo sistema.

Certificate

Para automação de produção, obtenha um certificado da autoridade certificadora da sua organização. Para ambientes de teste, veja Criar um certificado público autoassinado para autenticar sua aplicação. Na página Certificados & segredos do aplicativo de automação, selecione Certificados>, faça upload do arquivo público .cer, .pem ou .crt e então selecione Adicionar. O runner precisa de acesso à chave privada; o aplicativo de automação armazena apenas o certificado público. Para mais informações sobre autenticação por certificado somente para aplicativo, consulte Usar autenticação somente para aplicativo com o SDK do Microsoft Graph PowerShell.

Use o thumbprint do certificado que contém a chave privada:

$authParameters = @{
    TenantId = '<tenant-id>'
    ClientId = '<automation-app-client-id>'
    CertificateThumbprint = '<certificate-thumbprint>'
}

Para um lote que pode conter linhas AgentUser, instale o certificado em Cert:\CurrentUser\My. Para usar um certificado de Cert:\LocalMachine\My em todos os tipos de objeto, passe-o como um objeto de certificado em vez de usar sua impressão digital.

Alternativamente, forneça o certificado como um X509Certificate2 objeto:

$authParameters = @{
    TenantId = '<tenant-id>'
    ClientId = '<automation-app-client-id>'
    Certificate = Get-Item 'Cert:\CurrentUser\My\<certificate-thumbprint>'
}

Ou carregar a chave privada de um PFX protegido por senha:

$pfxPassword = Read-Host -Prompt 'PFX password' -AsSecureString
$authParameters = @{
    TenantId = '<tenant-id>'
    ClientId = '<automation-app-client-id>'
    CertificatePath = 'C:\secure\a365-automation.pfx'
    CertificatePassword = $pfxPassword
}

Forneça apenas uma fonte de certificado. -CertificatePassword é válido apenas com -CertificatePath.

Identidade gerenciada atribuída pelo sistema

Ative uma identidade gerenciada atribuída pelo sistema no recurso do Azure que executa os scripts. Conceda as permissões de aplicativo necessárias do Microsoft Graph da tabela anterior diretamente ao principal de serviço da identidade gerenciada. Para instruções, veja Conceder e revogar permissões de API para identidades gerenciadas.

$authParameters = @{
    TenantId = '<tenant-id>'
    UseManagedIdentity = $true
}

Não inclua ClientId com UseManagedIdentity. Os scripts usam a identidade do host atribuída pelo sistema e não suportam a seleção de uma identidade atribuída pelo usuário.

Entrada delegada interativa

Use um ID de cliente de aplicação controlado pelo chamador para que o mesmo exemplo também suporte arquivos CSV que contenham linhas AgentUser:

$authParameters = @{
    TenantId = '<tenant-id>'
    ClientId = '<automation-app-client-id>'
    Interactive = $true
}

Quando você fornece ClientId, a autorização interativa depende dos escopos delegados consentidos daquela aplicação e dos papéis de diretório do usuário logado. New-A365AutomationApp.ps1 -Scenario All declara os escopos delegados e possibilita fluxos de cliente público. Siga a URL de consentimento do administrador impressa pelo script de configuração antes da primeira execução interativa. Se um lote não contiver linhas AgentUser, você pode omitir ClientId; os scripts então usam o cliente PowerShell Microsoft Graph e seus escopos consentidos. As operações do AgentUser exigem um papel adequado, como Administrador do ID do Agente. Para informações de contexto, consulte Usar comandos de autenticação do Microsoft Graph PowerShell.

Note

O aplicativo de automação de propriedade do tenant pode oferecer suporte tanto à autenticação por certificado somente do aplicativo ou por segredo quanto ao login interativo delegado. A autorização somente de aplicativo utiliza funções de aplicativo. A autorização interativa utiliza escopos delegados e os papéis de diretório do usuário logado. Uma identidade gerenciada, em vez disso, usa o próprio principal de serviço do recurso Azure.

Preparar o arquivo CSV

Inicie com o sample-bulk-onboarding.csv. Mantenha todos os cabeçalhos na amostra, mesmo quando uma coluna não se aplica a uma linha. Deixe os valores não aplicáveis em branco.

A amostra contém linhas representativas para cada tipo de objeto suportado. Substitua seus domínios de exemplo, identidades, proprietários, patrocinadores, gerentes e valores de licença por valores do seu locatário.

Definir relações

As quatro primeiras colunas definem o grafo-objeto:

Coluna Description
ObjectType Blueprint, AgentIdentity, AgentUser ou AgentRegistration.
Key Um nome insensível a maiúsculas e minúsculas que identifica de forma única a linha dentro do CSV. Não se torna o ID de objeto Microsoft Entra.
ParentKey O Key da linha pai. Identidades de agentes fazem referência a um blueprint. Usuários e registros de agentes fazem referência à identidade de um agente. Deixe em branco para um blueprint.
ExistingId Faz referência a um ID de aplicação blueprint existente ou ID de objeto de identidade de agente. Uma linha com esse valor é uma âncora inalterada para linhas filho. Isso é suportado apenas para Blueprint e AgentIdentity; ParentKey e toda coluna de definição de objeto deve estar em branco nessa linha.

Para criar identidades de agentes sob um blueprint existente, adicione uma Blueprint linha âncora cujo ExistingId é o ID do aplicativo do blueprint. Dê a cada nova linha de AgentIdentity uma ParentKey que corresponda à Key da linha da âncora.

Defina valores para cada tipo de objeto

Columns Aplica-se a Requisitos
DisplayName Todos os tipos de objetos Necessário para novos blueprints, identidades de agentes e registros.
Description Blueprint, AgentRegistration Descrição opcional.
Sponsor Blueprint, AgentIdentity Necessário para a criação. Use um UPN, endereço de email, nome de exibição ou ID de objeto. Separe os valores múltiplos com ponto e vírgula.
Owner Blueprint, AgentIdentity, AgentRegistration Use um UPN, endereço de email, nome de exibição ou ID de objeto. Separe os valores múltiplos com ponto e vírgula. Os proprietários de Blueprint e identidade podem ser usuários ou entidades de serviço. Os proprietários do registro devem ser usuários e são obrigatórios para registro somente de aplicativo.
RequireOwnerAssignment Blueprint, AgentIdentity Defina como true para fazer a linha falhar se um proprietário não puder ser atribuído.
RequiredPermissionJson, GrantAdminConsent Blueprint, AgentIdentity Declare as permissões da API e, opcionalmente, conceda consentimento.
SkipInheritablePermissions, NewClientSecret, KeyVaultName, KeyVaultSecretName, ManagedIdentityPrincipalId Blueprint Configure permissões e credenciais de blueprint.
Tag, CustomSecurityAttributeJson, SkipCustomSecurityAttributeValidation AgentIdentity Separe as tags com ponto e vírgula. Atributos de segurança personalizados exigem as permissões apropriadas do Graph e a função de diretório.
PrincipalName, MailNickname AgentUser PrincipalName é obrigatório e deve usar um domínio de tenant verificado.
ManagerUserId, ManagerUpn AgentUser Use apenas um campo de gerente, não ambos.
AssignLicense, UsageLocation, LicenseSkuId, LicenseSkuPartNumber AgentUser Quando AssignLicense for true, forneça-se um local de uso com duas letras e um campo SKU de licença.
OwnerId, Auth AgentRegistration OwnerId aceita um ID de objeto de usuário. Auth aceita Same ou Interactive; usa Same para onboarding exclusivo de aplicativos sem supervisão.
ParameterJson Todos os tipos de objetos Objeto JSON opcional para os parâmetros avançados permitidos do script. Nomes completos dos parâmetros são necessários. Os parâmetros de autenticação, locatário, ação, pai, saída e log são rejeitados.

Important

Um valor em uma coluna que não se aplica à ObjectType da linha é um erro. O validador não ignora silenciosamente valores mal colocados.

Valide o plano de onboarding

Antes de criar qualquer objeto de locatário, passe o CSV completo por -WhatIf:

.\A365-BulkOnboarding.ps1 `
    -CsvPath .\sample-bulk-onboarding.csv `
    @authParameters `
    -WhatIf

O script valida todo o CSV antes de fazer uma solicitação ao Microsoft Graph. Ele relata todos os erros estruturais detectados juntos, incluindo:

  • Cabeçalhos ausentes ou desconhecidos.
  • Faltam os valores obrigatórios.
  • Chaves duplicadas.
  • Tipos de objetos não suportados.
  • Valores GUID, UPN, Booleano ou JSON inválidos.
  • Combinações inválidas de ParentKey ou ExistingId.
  • Um pai com o tipo de objeto errado.
  • Ciclos de dependência.
  • Valores em colunas que não se aplicam ao tipo de objeto da linha.

Se a validação for bem-sucedida, o comando imprime o plano de dependência. Em -WhatIf, o script não envia nenhuma linha de onboarding para o Microsoft Graph.

A validação bem-sucedida confirma que o CSV passa nas verificações estruturais. Não confirma se objetos de tenant podem ser resolvidos ou se o aplicativo tem as permissões necessárias para criá-los.

Note

Para autenticação interativa, um CSV que contém uma AgentUser linha requer a aplicação ClientId controlada pelo chamador mostrada no exemplo anterior. O usuário logado também deve ter o consentimento delegado exigido e o papel no diretório.

Executar integração em massa

Depois que o plano -WhatIf parecer correto, execute o onboarding e salve os logs e o relatório agregado:

.\A365-BulkOnboarding.ps1 `
    -CsvPath .\sample-bulk-onboarding.csv `
    @authParameters `
    -LogPath .\logs `
    -OutputJsonPath .\bulk-onboarding-result.json

O script processa os pais antes de seus filhos, mantendo a ordem do CSV entre linhas não relacionadas. Se uma linha falhar:

  • O script marca seus descendentes como SkippedDependency e não os envia para o Microsoft Graph.
  • Árvores de dependência independentes continuam.
  • O comando escreve o resumo do console e o relatório agregado antes de sair.
  • O comando retorna um código de saída não nulo se alguma linha tiver o valor Failed ou SkippedDependency.

Revise os resultados

Os status da linha final são:

Status Meaning
Existing A linha faz referência a um blueprint existente ou identidade de agente e não foi alterada.
Succeeded O objeto foi criado com sucesso.
Failed O script tentou a linha, mas não conseguiu completá-la com sucesso.
SkippedDependency O script não tentou o registro porque seu pai não produziu uma ID utilizável.

O -OutputJsonPath parâmetro cria um A365BulkProvisioningRunReport para toda a execução. Revise o relatório para:

  • O status e o ID resolvido para cada linha.
  • Etapas com falha e detalhes do erro.
  • Ações de consentimento do administrador pendentes.
  • Identificadores de blueprint, identidade, usuário e registro criados.

Logs do script em massa, orquestrador e scripts filhos compartilham um ID de correlação quando usam o mesmo -LogPath.

O relatório omite os segredos do cliente Blueprint, a menos que você use -IncludeBlueprintSecretsInOutputexplicitamente . O relatório nunca inclui entradas de autenticação, tokens de acesso ou senhas de certificados.

Warning

Não ative a saída de segredos ou o registro de segredos na automação rotineira. Se uma credencial aparecer em uma transcrição de console, registro, relatório, chamado, chat ou captura de tela, faça a rotação dela imediatamente.

Verificar integração

Após a execução:

  • Revise o status de cada linha e o ID do objeto resultante.
  • Verifique se os registros esperados aparecem na administração do Agent 365.
  • Verifique os patrocinadores e responsáveis designados.
  • Se você solicitou usuários-agente ou licenças, verifique essas atribuições.
  • Revise e conclua as ações pendentes de consentimento do administrador.

Recuperação de uma execução parcial

Warning

Antes de tentar novamente, inspecione o relatório e os objetos do locatário para determinar o que já existe. Não presuma que o trabalho concluído foi revertido ou que reexecutar todo o CSV evita duplicados.

Você pode consultar blueprints existentes e identidades de agentes através ExistingId de linhas de âncora. Essa opção não é suportada para linhas de agent-user ou de registro.

Corrija a falha e prepare um lote revisado de retentativas baseado no estado observado do locatário, em vez de reexecutar cegamente linhas bem-sucedidas.

Solução de problemas

Use a tabela a seguir para resolver problemas comuns de integração.

Sintoma Resolução
A configuração do aplicativo de automação retorna um erro de autorização. Faça login como Administrador Global ou Administrador de Função Privilegiada. Conceder permissões de aplicativo do Microsoft Graph requer consentimento do administrador.
Uma linha de provisionamento retorna HTTP 403. Confirme que você criou o aplicativo de automação com -Scenario All, concedeu suas funções do aplicativo e adquiriu um novo token após o consentimento.
Uma linha de usuário do agente é rejeitada antes da execução. Usar autenticação somente para aplicativo. Confirme que a UPN usa um domínio verificado. Se for para atribuir uma licença, forneça UsageLocation e LicenseSkuId ou LicenseSkuPartNumber.
Um proprietário, patrocinador ou gerente não pode ser identificado. Use um UPN, endereço de e-mail ou ID de objeto sem ambiguidade. Os proprietários do registro devem ser resolvidos para usuários.
Uma linha filha é SkippedDependency. Corrija a linha pai com falha ou não resolvida. O filho não foi enviado para o Microsoft Graph.
Existe uma identidade no Microsoft Entra, mas não é visível na administração do Agente 365. Adicione uma linha de AgentRegistration para a identidade. Criar uma identidade sozinho não cria o registro de inventário do Agente 365.
O validador CSV reporta um valor em uma coluna não suportada. Mova o valor para uma coluna suportada por essa ObjectType, ou deixe a célula em branco.
Atribuição personalizada de atributos de segurança retorna HTTP 403. A aplicação de automação precisa de CustomSecAttributeAssignment.ReadWrite.All e CustomSecAttributeDefinition.Read.All. A atribuição interativa também exige que o usuário logado mantenha a função de Administrador de Atribuição de Atributos.

Para questões gerais de produto e CLI, veja o guia de solução de problemas do Agent 365. Para relatar um problema com esses scripts, use Agent 365 DevTools issues.

Próximas Etapas 

Após a integração dos seus agentes: