- 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
- Armazenando senhas de Unattended Robots no Azure Key Vault (somente leitura)
- Armazenamento de credenciais de robôs não assistidos 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
- Atribuição de funções
- Gerenciamento de funções
- Funções padrão
- Configuring access for accounts
- Habilitando usuários para executar automações pessoais
- Habilitando usuários para executar automações em infraestrutura Unattended por meio de Unattended Robots
- Configurando contas de Robôs para executar automações Unattended
- Auditar
- Gerenciar armazenamentos de credenciais
- Integração de repositórios de credenciais
- O proxy de credenciais do orquestrador
- Managing credential proxies
- Configurações
- Cloud Robots
- Contexto de Pastas
- Automações
- Processos
- Trabalhos
- Apps
- Gatilhos
- Logs
- Monitoramento
- Filas
- Ativos
- Armazenar Buckets
- Test Suite - Orchestrator
- Serviço Catálogo de recursos
- Autenticação
- Integrações
- Solução de problemas
O proxy de credenciais do orquestrador
Você pode adicionar seus próprios armazenamentos de credenciais ao Orchestrator, para controlar independentemente a segurança de seus dados de conexão.
Para fazê-lo, você pode carregar seus plug-ins de armazenamento de credenciais desejados, na forma de arquivos .dll, para o serviço da Web Orchestrator Credentials Proxy. O kit de instalação contém todos os plug-ins compatíveis com o UiPath, mas você também pode desenvolver seus próprios arquivos .dll de plug-in para carregar. Esse serviço torna seus plugins disponíveis para o Orchestrator por meio de um proxy, que é criado no Orchestrator com base no URL público e na chave secreta gerada pelo proxy.
O Orchestrator Credentials Proxy pode ser instalado por meio de um arquivo .msi instalador ou por meio de uma imagem do Docker fornecida pela UiPath.
Pré-requisitos
O seguinte é necessário para poder usar o proxy:
- ASP.NET Core versões 3.1 ou 6.0.x
- IIS versão 8.0 ou superior
-
Os seguintes recursos do Windows devem ser instalados:
- IIS-DefaultDocument
- IIS-HttpErrors
- IIS-StaticContent
- IIS-RequestFiltering
- IIS-URLAuthorization
- IIS-WindowsAuthentication
- IIS-ASPNET45
- IIS-ISAPIExtensions
- IIS-ISAPIFilter
- IIS-WebSockets
- IIS-ApplicationInit
- IIS-ManagementConsole
Requisitos de hardware e software
Requisitos de Hardware
Estes são os requisitos mínimos para executar o proxy em um Windows Server com IIS:
Núcleos da CPU |
BATER |
---|---|
2 |
4GB |
Requisitos de software
As seguintes versões do Windows Server são necessárias para instalar o proxy:
- 2012 R2
- 2016
- 2019
- 2022
Passos de instalação
Siga estas etapas para realizar a instalação:
Informação preliminar
Todas as configurações do Credentials Proxy do Orchestrator que podem ser editadas estão disponíveis em seu arquivo appsettings.json. Os seguintes parâmetros são importantes na configuração inicial:
-
Jwt:Keys
- (inicialmente vazio) este array de strings é usado para configurar a autenticação do proxy. Isso constitui a chave secreta que você usará durante o processo de criação do proxy e que permite ao Orchestrator recuperar dados do proxy com êxito. Quaisquer valores inválidos são ignorados. Se nenhum valor válido for encontrado, o proxy não será iniciado.As chaves secretas devem estar em base64 e podem ser geradas usando um dos scripts do PowerShell abaixo.
$bytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(64) $jwtSigningKey = [Convert]::ToBase64String($bytes); Write-Host $jwtSigningKey
$bytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(64) $jwtSigningKey = [Convert]::ToBase64String($bytes); Write-Host $jwtSigningKey
SeccureRandom
) e os converte em uma string base64.
[Byte[]] $bytes = 1..64
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$rng.GetBytes($bytes)
$jwtSigningKey = [Convert]::ToBase64String($bytes);
Write-Host $jwtSigningKey
[Byte[]] $bytes = 1..64
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$rng.GetBytes($bytes)
$jwtSigningKey = [Convert]::ToBase64String($bytes);
Write-Host $jwtSigningKey
appSettings:Plugins.SecureStores
- (inicialmente definido para os armazenamentos de credenciais padrão disponíveis no Orchestrator) esta é uma string CSV usada para especificar o que .dll os assemblies devem ser carregados do disco (depath/plugins
) para permitir que armazenamentos seguros sejam usados pelo proxy. Adicionar assemblies inválidos à lista não interromperá a inicialização, mas você receberá erros de log ao tentar implantá-lo.appSettings:SigningCredentialSettings:FileLocation:SigningCredential:FilePath
eappSettings:SigningCredentialSettings:FileLocation:SigningCredential:Password
- (inicialmente oculto) para serem usados para criptografar os parâmetrosJwt:Keys
eSecureStoreConfigurations:Context
. Isso representa o caminho do arquivo para seu certificado de assinatura.appSettings:SigningCredentialSettings:StoreLocation:Name
,appSettings:SigningCredentialSettings:StoreLocation:Location
,appSettings:SigningCredentialSettings:StoreLocation:NameType
- (inicialmente oculto) para ser usado para criptografar os parâmetrosJwt:Keys
eSecureStoreConfigurations:Context
.
Criptografando o parâmetro Jwt:Keys
Jwt:Keys
e SecureStoreConfigurations:Context
em seu arquivo appsettings.json
.
UiPath.ConfigProtector.exe
versão 1.0.9 ou superior.
Configurando e executando a imagem do Docker
Para executar o Orchestrator Credentials Proxy usando o Docker, siga as etapas abaixo.
As próximas etapas se aplicam apenas ao proxy desconectado, pois o proxy conectado não requer configuração dedicada.
-
Key" id="1"/> - a chave de identificador para a configuração -
Type" id="1"/> - o tipo de cofre de credenciais, conforme identificado no .dll arquivos configurados por meio do parâmetro Plugins.SecureStores" id="2"/> encontrado em appsettings.json" id="3"/> (consulte os exemplos abaixo) -
Context" id="1"/> - as informações de conectividade relacionadas à implementação de armazenamento seguro
Depois de editar o arquivo de configuração, você precisa reiniciar o serviço a partir do IIS.
Escolha o exemplo apropriado com base em seu tipo de armazenamento de credenciais ou adicione vários armazenamentos de credenciais usando o último exemplo nesta página.
AWS Secrets Manager/AWS Secrets Manager (somente leitura)
"SecureStoreConfigurations": [
{
"Key": "<MyAwsStore>",
"Type": "AWS Secrets Manager" / "AWS Secrets Manager (read only)",
"Context": {
"UseDefaultCredentials": "true",
"AccessKey": "<AccessKey>",
"SecretKey": "<SecretKey>",
"Region": "<SelectedRegion>"
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyAwsStore>",
"Type": "AWS Secrets Manager" / "AWS Secrets Manager (read only)",
"Context": {
"UseDefaultCredentials": "true",
"AccessKey": "<AccessKey>",
"SecretKey": "<SecretKey>",
"Region": "<SelectedRegion>"
}
},
]
Azure Key Vault (somente leitura)
"SecureStoreConfigurations": [
{
"Key": "<MyAzureStore>",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "<KeyVaultUri>",
"DirectoryId": "<DirectoryId>",
"ClientId": "<ClientId>",
"ClientSecret": "<ClientSecret>"
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyAzureStore>",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "<KeyVaultUri>",
"DirectoryId": "<DirectoryId>",
"ClientId": "<ClientId>",
"ClientSecret": "<ClientSecret>"
}
},
]
Azure Key Vault (leitura/gravação) não é compatível.
BeyondTrust Password Safe - Managed Accounts
"SecureStoreConfigurations": [
{
"Key": "<MyBeyondTrustManagedAccountsSafe>",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "<HostName>",
"APIRegistrationKey": "<ApiRegistrationKey>",
"APIRunAsUsername": "<Username>",
"DefaultManagedSystemName": "", // can be empty or a string
"SystemAccountDelimiter": "/", // default account delimiter is "/", but it can be changed
"ManagedAccountType": "<ManagedAccountType>" // expected value is one of "system", "domainlinked", "database", "cloud", "application"
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyBeyondTrustManagedAccountsSafe>",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "<HostName>",
"APIRegistrationKey": "<ApiRegistrationKey>",
"APIRunAsUsername": "<Username>",
"DefaultManagedSystemName": "", // can be empty or a string
"SystemAccountDelimiter": "/", // default account delimiter is "/", but it can be changed
"ManagedAccountType": "<ManagedAccountType>" // expected value is one of "system", "domainlinked", "database", "cloud", "application"
}
},
]
BeyondTrust Password Safe - Team Passwords
"SecureStoreConfigurations": [
{
"Key": "<MyBeyondTrustTeamPasswordSafe>",
"Type": "BeyondTrust Password Safe - Team Passwords",
"Context": {
"Hostname": "<HostName>",
"APIRegistrationKey": "<ApiRegistrationKey>",
"APIRunAsUsername": "<Username>",
"FolderPathPrefix" : "/", // default delimiter is "/", but it can be changed
"FolderPasswordDelimiter" : "/" // default delimiter is "/", but it can be changed
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyBeyondTrustTeamPasswordSafe>",
"Type": "BeyondTrust Password Safe - Team Passwords",
"Context": {
"Hostname": "<HostName>",
"APIRegistrationKey": "<ApiRegistrationKey>",
"APIRunAsUsername": "<Username>",
"FolderPathPrefix" : "/", // default delimiter is "/", but it can be changed
"FolderPasswordDelimiter" : "/" // default delimiter is "/", but it can be changed
}
},
]
CyberArk - AIM
"SecureStoreConfigurations": [
{
"Key": "<MyCyberArk>",
"Type": "CyberArk",
"Context": {
"ApplicationId": "<App_MyCyberArk>",
"Safe": "<Passwords>",
"Folder": "<MyFolder>"
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyCyberArk>",
"Type": "CyberArk",
"Context": {
"ApplicationId": "<App_MyCyberArk>",
"Safe": "<Passwords>",
"Folder": "<MyFolder>"
}
},
]
CyberArk - CCP
"SecureStoreConfigurations": [
{
"Key": "<MyCyberArkCCPStore>",
"Type": "CyberArkCCP",
"Context": {
"ApplicationId": "<ApplicationId>",
"Safe": "<CyberArkSafe>",
"Folder": "<CyberArkFolder>",
"WebServiceUrl": "<CentralCredentialProviderUrl>",
"WebServiceName": "<WebServiceName>",
"SerializedClientCertificate": "<ClientCertificate>", // must be ".pfx" as base64
"ClientCertificatePassword": "<ClientCertificatePassword>",
"SerializedRootCA": "<someServerRootCA>" // must be ".crt" or ".cer" as base64
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyCyberArkCCPStore>",
"Type": "CyberArkCCP",
"Context": {
"ApplicationId": "<ApplicationId>",
"Safe": "<CyberArkSafe>",
"Folder": "<CyberArkFolder>",
"WebServiceUrl": "<CentralCredentialProviderUrl>",
"WebServiceName": "<WebServiceName>",
"SerializedClientCertificate": "<ClientCertificate>", // must be ".pfx" as base64
"ClientCertificatePassword": "<ClientCertificatePassword>",
"SerializedRootCA": "<someServerRootCA>" // must be ".crt" or ".cer" as base64
}
},
]
"AppSettings": {
...
"Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet",
...
}
"AppSettings": {
...
"Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet",
...
}
HashiCorp Vault / HashiCorp Vault (somente leitura)
"SecureStoreConfigurations": [
{
"Key": "<MyHashiCorp>",
"Type": "HashiCorp Vault" / "HashiCorp Vault (read only)",
"Context": {
"VaultUri": "<VaultUri>",
"AuthenticationType": "<AppRole>",
"RoleId": "<RoleId>",
"SecretId": "<SecretId>",
"Username": "<Username>",
"Password": "<Password>",
"Token": "<Token>",
"SecretsEngine": "<KeyValueV2>",
"SecretsEngineMountPath": "<Secret>",
"DataPath": "<applications/orchestrator>",
"Namespace": "<orchestrator>"
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyHashiCorp>",
"Type": "HashiCorp Vault" / "HashiCorp Vault (read only)",
"Context": {
"VaultUri": "<VaultUri>",
"AuthenticationType": "<AppRole>",
"RoleId": "<RoleId>",
"SecretId": "<SecretId>",
"Username": "<Username>",
"Password": "<Password>",
"Token": "<Token>",
"SecretsEngine": "<KeyValueV2>",
"SecretsEngineMountPath": "<Secret>",
"DataPath": "<applications/orchestrator>",
"Namespace": "<orchestrator>"
}
},
]
Thycotic Secret Server
"SecureStoreConfigurations": [
{
"Key": "<MyThicoticServer>",
"Type": "Thycotic Secret Server",
"Context": {
"SecretServerUrl": "<ServerUrl>",
"RuleName": "<Rule>",
"RuleKey": "<Key>",
"UsernameField": "<Username>",
"PasswordField": "<Password>"
}
},
]
"SecureStoreConfigurations": [
{
"Key": "<MyThicoticServer>",
"Type": "Thycotic Secret Server",
"Context": {
"SecretServerUrl": "<ServerUrl>",
"RuleName": "<Rule>",
"RuleKey": "<Key>",
"UsernameField": "<Username>",
"PasswordField": "<Password>"
}
},
]
Vários armazenamentos de credenciais
Se você usar vários armazenamentos de credenciais, você pode adicioná-los um sob o outro, da seguinte forma:
{
...
"AppSettings": {
...
"SecureStoreConfigurations": [
{
"Key": "<SecureStoreKey1>",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "<Uri>",
"DirectoryId": "<DirectoryId>",
"ClientId": "<ClientId>",
"ClientSecret": "<ClientSecret>"
}
},
{
"Key": "<SecureStoreKey2>",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "<Host>",
"APIRegistrationKey": "<ApiKey>",
"APIRunAsUsername": "<ApiUsername>",
"DefaultManagedSystemName": "",
"SystemAccountDelimiter": "/",
"ManagedAccountType": "system"
}
}
]
...
}
}
{
...
"AppSettings": {
...
"SecureStoreConfigurations": [
{
"Key": "<SecureStoreKey1>",
"Type": "AzureKeyVault (read only)",
"Context": {
"KeyVaultUri": "<Uri>",
"DirectoryId": "<DirectoryId>",
"ClientId": "<ClientId>",
"ClientSecret": "<ClientSecret>"
}
},
{
"Key": "<SecureStoreKey2>",
"Type": "BeyondTrust Password Safe - Managed Accounts",
"Context": {
"Hostname": "<Host>",
"APIRegistrationKey": "<ApiKey>",
"APIRunAsUsername": "<ApiUsername>",
"DefaultManagedSystemName": "",
"SystemAccountDelimiter": "/",
"ManagedAccountType": "system"
}
}
]
...
}
}
Isso se aplica apenas ao Credentials Proxy desconectado.
Essas são algumas das etapas de validação que são executadas:
-
Isso garante que
appsettings.Production.json" id="1"/> conhenha as configurações esperadas, como detalhado na seção Configuração acima. -
Isso garante que
SecureStoreConfigurations" id="1"/> não contenha parâmetros duplicados Key" id="2"/>, ou seja, que os armazenamentos de credenciais configurados no arquivo appsettings.Production.json" id="3"/> sejam exclusivos.
- O parâmetro
SecureStoreConfigurations" id="1"/> é uma matriz de configurações, o que significa que você pode adicionar quantos armazenamentos de credenciais quiser, inclusive do mesmo tipo. Por exemplo, você pode ter várias instâncias do Azure Key Vault (somente leitura) configuradas, desde que campo Key" id="2"/> seja exclusivo.
-
Isso verifica se todos os valores
Type" id="1"/> são válidos. -
Com base na implementação de cada armazenamento seguro, isso verifica se o cofre pode ser alcançado com sucesso.
C:\Program Files\UiPath\OrchestratorCredentialsProxy
, se o pool de aplicativos do proxy tiver permissões de gravação para esse caminho. Estes são configurados no IIS.
NLog.targets.logfile.fileName
em appsettings.Production.json
.
Em máquinas Windows, o proxy também armazena logs no Visualizador de eventos do Windows.
- O Orchestrator permite apenas URLs seguras (HTTPS) para o proxy. O certificado HTTPS deve ser válido e assinado por uma autoridade de certificação amplamente reconhecida. Certificados autoassinados ou assinados por uma autoridade interna não são suportados.
- O Orchestrator é validado por meio de um segredo do cliente gerado pelo Credentials Proxy do Orchestrator. O segredo do cliente é armazenado em um arquivo de configuração na máquina em que o Credentials Proxy do Orchestrator está instalado e é criptografado e armazenado no banco de dados pelo Orchestrator.
- Ao editar um proxy de armazenamento de credenciais no Orchestrator e alterar seu URL, você também precisa inserir o segredo do cliente.
-
Orchestrator Credentials Proxy 2.0.0+ as ações são registradas em log no Visualizador de Eventos do Windows.
- Os binários devem ser assinados na máquina Windows.
- A imagem do Docker deve ser assinada.
Você pode usar o proxy em combinação com um balanceador de carga, desde que você se certifique de manter a mesma configuração em todos os nós.
- A versão do instalador de proxy. Por exemplo, se você usar a versão 1.0.0, todos os nós do balanceador de carga também precisarão usar a 1.0.0.
- As configurações nos arquivos de configuração do aplicativo. Na maioria dos casos, eles são
appsettings.json
eappsettings.Production.json
. Observe queappsettings.Production.json
é exclusivo para cada instalação, então você deve adicioná-lo manualmente a cada nó para garantir a consistência. - Os plug-ins de armazenamento de credenciais adicionados a
path/plugins
. Todos os plug-ins suportados por nós já estão nesta pasta, então você precisa principalmente estar atento a quaisquer plug-ins personalizados que você adicionar.
- Se você quiser fazer quaisquer alterações na configuração da imagem do Docker que fornecemos para a instalação do proxy, é altamente recomendável que você crie uma imagem personalizada do Docker. Você deve usar essa imagem personalizada para implantar o proxy em todos os nós.
- Algumas variáveis de ambiente, como aquelas que substituem valores de configuração
appsettings.json
ou aquelas que afetam o ambiente .NET, podem ter um impacto no runtime. - Você pode usar o ponto de extremidade não autenticado dedicado
https://cloud.uipath.com/{organizationName}/{tenantName}/orchestrator_/api/v1/Health
para verificar se o Proxy Credentials do Orchestrator ainda está sendo executado.
- Instalação
- Por meio do instalador .msi instalador
- Por meio da imagem do Docker
- Configuração
- Proxy desconectado
- Exemplos de configuração
- Validação
- Geração de logs
- Considerações de segurança
- Uso do Credentials Proxy do Orchestrator com um balanceador de carga
- Elementos que devem permanecer idênticos entre os nós
- Fatores importantes a considerar