- Introdução
- Melhores práticas
- Tenant
- Sobre o contexto do tenant
- Pesquisa de recursos em um tenant
- Gerenciamento de robôs
- Conectar Robôs ao Orchestrator
- Armazenamento de credenciais do robô no CyberArk
- Armazenamento de senhas do Unattended Robot no Azure Key Vault (somente leitura)
- Armazenamento de credenciais do Unattended Robot no HashiCorp Vault (somente leitura)
- Armazenando credenciais de Unattended Robots no AWS Secrets Manager (somente leitura)
- Exclusão de sessões não assistidas desconectadas e não responsivas
- Autenticação do robô
- Autenticação de robôs com credenciais de cliente
- Configuração de recursos de automação
- Soluções
- Auditar
- Configurações
- Registro
- Cloud Robots
- Visão geral dos robôs do Cloud
- Execução de automações Unattended usando Cloud Robots - VM
- Carregamento de sua própria imagem
- Reutilização de imagens de máquinas personalizadas (para pools manuais)
- Redefinição de credenciais para uma máquina (para pools manuais)
- Monitoramento
- Atualizações de segurança
- Como solicitar uma avaliação
- Perguntas frequentes
- Configurando VPN para Robôs de nuvem
- Configurar uma conexão ExpressRoute
- Transmissão ao vivo e controle remoto
- Automation Suite Robots
- Contexto de Pastas
- Processos
- Trabalhos
- Apps
- Gatilhos
- Logs
- Monitoramento
- Índices
- Filas
- Ativos
- Sobre ativos
- Gerenciamento de ativos no Orchestrator
- Gerenciamento de ativos no Studio
- Armazenamento de ativos no Azure Key Vault (somente leitura)
- Armazenamento de ativos no HashiCorp Vault (somente leitura)
- Armazenando ativos no AWS Secrets Manager (somente leitura)
- Armazenamento de ativos no Google Secret Manager (somente leitura)
- Conexões
- Regras de Negócios
- Armazenar Buckets
- Servidores MCP
- Teste do Orquestrador
- Serviço Catálogo de recursos
- Integrações
- Solução de problemas
Guia do usuário do Orchestrator
Você pode criar e gerenciar proxies para seus próprios armazenamentos de credenciais personalizados, permitindo controlar individualmente a segurança de suas credenciais.
Tipos de proxy
Você pode escolher entre esses dois tipos:
- Proxy conectado (gerenciado pelo Orchestrator)
- quando um robô solicita credenciais, o Orchestrator as recupera do proxy e as passa para o robô.
Figura 1. Arquitetura de proxy conectada
- Proxy desconectado (gerenciado pelo serviço de proxy) - quando um robô solicita credenciais, elas são recuperadas diretamente do proxy, sem precisar passar pelo Orchestrator. Esse tipo é compatível apenas com a versão 23.10+.
Figura 2. Arquitetura de proxy desconectada
- O proxy de credenciais desconectadas só está disponível se você estiver no plano de licenciamento Enterprise - Avançado .
- Se quiser recuperar credenciais de proxy desconectadas, você precisa usar as seguintes versões mínimas: 2.0.1 para o proxy e 24.3 para o pacote de atividades do sistema.
Configuração desconectada
O Credentials Proxy do Orchestrator na versão desconectada funciona de maneira semelhante à configuração conectada, com algumas diferenças importantes.
Especifique no arquivo appsettings.json que o proxy deve iniciar em seu modo desconectado. Para fazer isso em AppSettings defina o parâmetro CredentialsProxyType com o valor Disconnected.
Isso instruirá o proxy a operar de forma um pouco diferente na inicialização e a ler sua configuração de armazenamento seguro no appsettings.json arquivo. Se o parâmetro estiver ausente ou se o valor for diferente, o proxy iniciará em seu modo conectado.
Especifique no arquivo appsettings.json que o proxy deve começar em seu modo desconectado. Para fazer isso, em AppSettings, defina o parâmetro CredentialsProxyType com o valor Disconnected.
{
...
"AppSettings": {
...
"CredentialsProxyType": "Disconnected",
...
}
}
{
...
"AppSettings": {
...
"CredentialsProxyType": "Disconnected",
...
}
}
Isso instruirá o proxy a operar de maneira um pouco diferente na inicialização e a ler sua configuração de armazenamento seguro no arquivo appsettings.json. Se o parâmetro estiver ausente ou se o valor for diferente, o proxy começará em seu modo conectado.
Configurações de armazenamento seguro
Cada entrada de configuração deve conter:
- Chave: identificador exclusivo usado no Orchestrator ao vincular armazenamentos. Deve ser único na lista de configurações
- Tipo: o tipo de armazenamento seguro (como Azure Key Vault, BeyondTrust, CyberArk, HashiCorp Vault, InMemory e outros).
- Contexto: os dados necessários pela implementação do armazenamento seguro, que varia dependendo do tipo de armazenamento.
Confira o seguinte exemplo de configuração de armazenamento seguro:
{
...
"AppSettings": {
...
"SecureStoreConfigurations": [
{
"Key": "SecureStoreKey1",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "{someUri}",
"DirectoryId": "{someDirectoryId}",
"ClientId": "{someClientId}",
"ClientSecret": "{someClientSecret}"
}
},
{
"Key": "SecureStoreKey2",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "{someHost}",
"APIRegistrationKey": "{someApiKey}",
"APIRunAsUsername": "{someApiUsername}",
"DefaultManagedSystemName": "",
"SystemAccountDelimiter": "/",
"ManagedAccountType": "system"
}
},
{
"Key": "InMemoryKey1",
"Type": "InMemorySecureStore",
"Context": {
}
}
]
...
}
}
{
...
"AppSettings": {
...
"SecureStoreConfigurations": [
{
"Key": "SecureStoreKey1",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "{someUri}",
"DirectoryId": "{someDirectoryId}",
"ClientId": "{someClientId}",
"ClientSecret": "{someClientSecret}"
}
},
{
"Key": "SecureStoreKey2",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "{someHost}",
"APIRegistrationKey": "{someApiKey}",
"APIRunAsUsername": "{someApiUsername}",
"DefaultManagedSystemName": "",
"SystemAccountDelimiter": "/",
"ManagedAccountType": "system"
}
},
{
"Key": "InMemoryKey1",
"Type": "InMemorySecureStore",
"Context": {
}
}
]
...
}
}
O parâmetro SecureStoreConfigurations é um array de configurações para que você possa ter quantas configurações quiser. Várias configurações do mesmo tipo são compatíveis, desde que os valores Key sejam exclusivos.
Validação de inicialização
Ao executar no modo desconectado, o proxy executa a validação na inicialização:
- Valida que as configurações necessárias existem em
appsettings.json. - Verifica se nenhuma chave duplicada é localizada em
SecureStoreConfigurations. - Confirma que todos os valores
Typesão válidos. - Valida a conectividade do cofre (chamadas
ValidateContextAsyncpara cada armazenamento).
Configurações do nível do proxy
Alguns armazenamentos de credenciais seguros exigem configuração no nível do host que precisa ser especificada em appsettings.Production.json:
- CyberArk: configurações como
CLIPasswordSDKExePath,UsePowerShellCLIeAdditionalAllowedCharactersdevem ser definidas emAppSettings.{ // ... "AppSettings": { "Plugins.SecureStores.CyberArk.CLIPasswordSDKExePath": "D:\\SomePath\\CLIPasswordSDK.exe", // ... } // ... }{ // ... "AppSettings": { "Plugins.SecureStores.CyberArk.CLIPasswordSDKExePath": "D:\\SomePath\\CLIPasswordSDK.exe", // ... } // ... } - CyberArkCCP: pode exigir
Plugins.SecureStores.CyberArkCCP.KeyStorageFlags = "MachineKeySet".{ // ... "AppSettings": { "Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet", // ... } // ... }{ // ... "AppSettings": { "Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet", // ... } // ... }
Exemplos de teste de configuração
Confira os seguintes exemplos appsettings.Production.json práticos.
Antes de fazer alterações no arquivo appsettings.Production.json certifique-se de criar um backup do arquivo original. Isso permite que você restaure facilmente a configuração inicial ou compare alterações se surgirem problemas durante a configuração.
Exemplo 1: básico
Configuração com o BeyondTrust e o Azure Key Vault:
{
"Jwt": {
"Keys": [
"<YourKey>"
]
},
"AppSettings": {
"CredentialsProxyType": "Disconnected",
"SecureStoreConfigurations": [
{
"Key": "SecureStoreKey3",
"Type": "BeyondTrust Password Safe - Team Passwords",
"Context": {
"Hostname": "<Hostname",
"APIRegistrationKey": "<APIRegistrationKey",
"APIRunAsUsername": "<Username>",
"FolderPathPrefix": "/", // default is "/", but it can be changed to anything
"FolderPasswordDelimiter": "/" // default is "/", but it can be changed to anything
}
}
]
}
}
{
"Jwt": {
"Keys": [
"<YourKey>"
]
},
"AppSettings": {
"CredentialsProxyType": "Disconnected",
"SecureStoreConfigurations": [
{
"Key": "SecureStoreKey3",
"Type": "BeyondTrust Password Safe - Team Passwords",
"Context": {
"Hostname": "<Hostname",
"APIRegistrationKey": "<APIRegistrationKey",
"APIRunAsUsername": "<Username>",
"FolderPathPrefix": "/", // default is "/", but it can be changed to anything
"FolderPasswordDelimiter": "/" // default is "/", but it can be changed to anything
}
}
]
}
}
Exemplo 2: logs extras e várias configurações
Inclui vários cofres e registro avançado.
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
}
},
"Jwt": {
"Keys": [ "<YourKey>" ]
},
"AppSettings": {
"Plugins.SecureStores": "UiPath.Orchestrator.CyberArk.dll;UiPath.Orchestrator.AzureKeyVault.SecureStore.dll;UiPath.Orchestrator.SecureStore.CyberArkCCP.dll;UiPath.Orchestrator.SecureStore.HashiCorpVault.dll;UiPath.Orchestrator.SecureStore.ThycoticSecretServer.dll;UiPath.Orchestrator.SecureStore.BeyondTrust.dll;UiPath.Orchestrator.SecureStore.AWSSecretsManager.dll",
"UseInMemorySecureStore": "true",
"CredentialsProxyType": "Disconnected",
"SecureStoreConfigurations": [
// AzureKeyVault owned by <username>; contact for more info
// Robot externalName: "<name>"
// The expected value of this secret is "<name>"
{
"Key": "SecureStoreKey1",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "<VaultURL>",
"DirectoryId": "<DirectoryID>",
"ClientId": "<ClientID>",
"ClientSecret": "<ClientSecret>"
}
},
// In case this fails, check our internal documentation on checking if BeyondTrust is down
// <InternalDocsURL>
// Robot externalName: "<ExternalName>"
{
"Key": "SecureStoreKey2",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "<Hostname>",
"APIRegistrationKey": "<APIRegistrationKey>",
"APIRunAsUsername": "<Username>",
"DefaultManagedSystemName": "",
"SystemAccountDelimiter": "/",
"ManagedAccountType": "system"
}
},
// In case this fails, check our internal documentation on checking if BeyondTrust is down
// <InternalDocsURL>
// Robot externalName: "<ExternalName>"
{
"Key": "SecureStoreKey3",
"Type": "BeyondTrust Password Safe - Team Passwords",
"Context": {
"Hostname": "<Hostname>",
"APIRegistrationKey": "<APIRegistrationKey>",
"APIRunAsUsername": "<Username>",
"FolderPathPrefix": "/", // default is "/", but it can be changed to anything
"FolderPasswordDelimiter": "/" // default is "/", but it can be changed to anything
}
},
{
// asset external name: Operating System-WinDomain
// password: <password>
"Key": "SecureStoreKey1",
"Type": "CyberArk Conjur Cloud (read only)",
"Context": {
"ServiceUrl": "<ServiceURL>",
"LoginName": "<LoginName>",
"ApiKey": "<APIKey>",
"VariableIdPrefix": "data/vault/Safe"
}
},
// Must have an empty context
// No values on startup; should add values using the endpoints before trying trying to get anything
{
"Key": "InMemoryKey1",
"Type": "InMemorySecureStore",
"Context": {
}
}
]
}
}
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
}
},
"Jwt": {
"Keys": [ "<YourKey>" ]
},
"AppSettings": {
"Plugins.SecureStores": "UiPath.Orchestrator.CyberArk.dll;UiPath.Orchestrator.AzureKeyVault.SecureStore.dll;UiPath.Orchestrator.SecureStore.CyberArkCCP.dll;UiPath.Orchestrator.SecureStore.HashiCorpVault.dll;UiPath.Orchestrator.SecureStore.ThycoticSecretServer.dll;UiPath.Orchestrator.SecureStore.BeyondTrust.dll;UiPath.Orchestrator.SecureStore.AWSSecretsManager.dll",
"UseInMemorySecureStore": "true",
"CredentialsProxyType": "Disconnected",
"SecureStoreConfigurations": [
// AzureKeyVault owned by <username>; contact for more info
// Robot externalName: "<name>"
// The expected value of this secret is "<name>"
{
"Key": "SecureStoreKey1",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "<VaultURL>",
"DirectoryId": "<DirectoryID>",
"ClientId": "<ClientID>",
"ClientSecret": "<ClientSecret>"
}
},
// In case this fails, check our internal documentation on checking if BeyondTrust is down
// <InternalDocsURL>
// Robot externalName: "<ExternalName>"
{
"Key": "SecureStoreKey2",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "<Hostname>",
"APIRegistrationKey": "<APIRegistrationKey>",
"APIRunAsUsername": "<Username>",
"DefaultManagedSystemName": "",
"SystemAccountDelimiter": "/",
"ManagedAccountType": "system"
}
},
// In case this fails, check our internal documentation on checking if BeyondTrust is down
// <InternalDocsURL>
// Robot externalName: "<ExternalName>"
{
"Key": "SecureStoreKey3",
"Type": "BeyondTrust Password Safe - Team Passwords",
"Context": {
"Hostname": "<Hostname>",
"APIRegistrationKey": "<APIRegistrationKey>",
"APIRunAsUsername": "<Username>",
"FolderPathPrefix": "/", // default is "/", but it can be changed to anything
"FolderPasswordDelimiter": "/" // default is "/", but it can be changed to anything
}
},
{
// asset external name: Operating System-WinDomain
// password: <password>
"Key": "SecureStoreKey1",
"Type": "CyberArk Conjur Cloud (read only)",
"Context": {
"ServiceUrl": "<ServiceURL>",
"LoginName": "<LoginName>",
"ApiKey": "<APIKey>",
"VariableIdPrefix": "data/vault/Safe"
}
},
// Must have an empty context
// No values on startup; should add values using the endpoints before trying trying to get anything
{
"Key": "InMemoryKey1",
"Type": "InMemorySecureStore",
"Context": {
}
}
]
}
}
Exemplo 3: caminho de log personalizado e InMemoryStore
{
"NLog": {
"throwConfigExceptions": true,
"targets": {
"logfile": {
"type": "File",
"maxArchiveFiles": 180,
"fileName": "<FileName>",
"layout": "${longdate} ${logger} ${message}${onexception:${newline}${exception:maxInnerExceptionLevel=10:format=shortType,message,stacktrace:separator=*:innerExceptionSeparator=
	}}"
}
},
"rules": [
{
"logger": "*",
"minLevel": "Information",
"writeTo": "logconsole,logfile,eventLog"
}
]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Jwt": {
"Keys": [
"<YourKey>"
]
},
"AppSettings": {
"Plugins.SecureStores": "UiPath.Orchestrator.CyberArk.dll;UiPath.Orchestrator.AzureKeyVault.SecureStore.dll;UiPath.Orchestrator.SecureStore.CyberArkCCP.dll;UiPath.Orchestrator.SecureStore.CyberArkConjur.dll;UiPath.Orchestrator.SecureStore.HashiCorpVault.dll;UiPath.Orchestrator.SecureStore.ThycoticSecretServer.dll;UiPath.Orchestrator.SecureStore.BeyondTrust.dll;UiPath.Orchestrator.SecureStore.AWSSecretsManager.dll",
"UseInMemorySecureStore": "true",
"CredentialsProxyType": "Disconnected",
"SecureStoreConfigurations": [
{
"Key": "InMemoryKey1",
"Type": "InMemorySecureStore",
"Context": {}
}
]
}
}
{
"NLog": {
"throwConfigExceptions": true,
"targets": {
"logfile": {
"type": "File",
"maxArchiveFiles": 180,
"fileName": "<FileName>",
"layout": "${longdate} ${logger} ${message}${onexception:${newline}${exception:maxInnerExceptionLevel=10:format=shortType,message,stacktrace:separator=*:innerExceptionSeparator=
	}}"
}
},
"rules": [
{
"logger": "*",
"minLevel": "Information",
"writeTo": "logconsole,logfile,eventLog"
}
]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Jwt": {
"Keys": [
"<YourKey>"
]
},
"AppSettings": {
"Plugins.SecureStores": "UiPath.Orchestrator.CyberArk.dll;UiPath.Orchestrator.AzureKeyVault.SecureStore.dll;UiPath.Orchestrator.SecureStore.CyberArkCCP.dll;UiPath.Orchestrator.SecureStore.CyberArkConjur.dll;UiPath.Orchestrator.SecureStore.HashiCorpVault.dll;UiPath.Orchestrator.SecureStore.ThycoticSecretServer.dll;UiPath.Orchestrator.SecureStore.BeyondTrust.dll;UiPath.Orchestrator.SecureStore.AWSSecretsManager.dll",
"UseInMemorySecureStore": "true",
"CredentialsProxyType": "Disconnected",
"SecureStoreConfigurations": [
{
"Key": "InMemoryKey1",
"Type": "InMemorySecureStore",
"Context": {}
}
]
}
}
Criação de um Credentials Proxy
Depois de instalar o Orchestrator Credentials Proxy, você pode criar um proxy personalizado, que mantém seus armazenamentos de credenciais personalizados.
Figura 3. página Adicionar Credentials Proxy
Para fazer isso, siga as etapas abaixo:
- No nível do tenant, selecionar Credenciais > Proxies > Adicionar Credentials Proxy. A janela Adicionar Credentials Proxy é exibida.
- Escolha proxy conectado (Gerenciado pelo Orchestrator) ou proxy desconectado (Gerenciado pelo serviço de proxy).
- Adicione um nome para seu proxy.
- Adicione o URL pertencente à máquina virtual incluída na configuração do Orchestrator Credentials Proxy.
- Adicione a chave.
Para o proxy conectado, dependendo do método de instalação, esta é a chave secreta gerada pelo instalador .msi, instalador ou aquele mantido pelo parâmetro Jwt:Keys.
Para o proxy desconectado, esta deve ser uma chave que já exista em um dos arquivos de configuração local do proxy desconectado.
As informações fornecidas nas etapas 4 e 5 criam o link entre o Orchestrator e a instalação que contém seus plugins de armazenamento de credenciais personalizados.
- Selecione Criar.
Você pode adicionar a loja desejada da seguinte maneira:
- No nível do tenant, selecionar Credenciais > Armazenamentos > Adicionar armazenamento de credenciais para adicionar um armazenamento de credenciais..
- Na lista Proxy , selecione o proxy que você acabou de criar.
- Na lista Tipo , selecione o armazenamento de credenciais de terceiros definido pelo seu plug-in.
- Forneça a chave de configuração correspondente à do arquivo de configuração local do proxy.
Observação:
Para configurações desconectadas, certifique-se de que as chaves usadas no Orchestrator correspondam às definidas no arquivo de configuração do proxy. Para configurações conectadas, o Orchestrator gerencia as configurações automaticamente.
Editing a credentials proxy
To edit a proxy, click More Actions > Edit. The Edit Credentials Proxy page is displayed, allowing you to change the name, URL, or key as needed.
Como excluir um Credentials Proxy
Para excluir um proxy, selecione Mais ações > Remover. Se o proxy selecionado estiver em uso, será exibida uma caixa de diálogo de aviso, listando o número de robôs e ativos que serão afetados. Selecione Sim para confirmar a remoção ou Não para abortar.
Figura 4. Aba Proxies
- Tipos de proxy
- Configuração desconectada
- Configurações de armazenamento seguro
- Validação de inicialização
- Configurações do nível do proxy
- Exemplos de teste de configuração
- Exemplo 1: básico
- Exemplo 2: logs extras e várias configurações
- Exemplo 3: caminho de log personalizado e InMemoryStore
- Criação de um Credentials Proxy
- Editing a credentials proxy
- Como excluir um Credentials Proxy