UiPath Documentation
orchestrator
latest
false
Importante :
A localização de um conteúdo recém-publicado pode levar de 1 a 2 semanas para ficar disponível.
UiPath logo, featuring letters U and I in white

Guia do usuário do Orchestrator

Última atualização 17 de abr de 2026

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.

To do that, you can load your desired credential store plugins, in the form of.dll files, to the Orchestrator Credentials Proxy web service. The installation kit contains all plugins supported by UiPath, but you can also develop your own plugin.dll files to load. This service then makes your plugins available to Orchestrator via a proxy, which is created in Orchestrator based on the the public URL and the secret key generated by the proxy.

Problema conhecido

Isso só se aplica a cenários em que a porta do Orchestrator Credentials Proxy é definida com um valor diferente do padrão 443.

Quando você atualiza a partir de qualquer versão entre a 1.0.0 e a 2.0.1 e você usa uma porta personalizada, a porta local na regra de entrada UiPathOrchestratorCredentialsProxy é alterada automaticamente para 443, que é o padrão. Isso impede que a conexão com o proxy seja estabelecida.

Para contornar isso, você precisa alterar manualmente a porta local na regra de entrada após a atualização.

Instalação

The Orchestrator Credentials Proxy can be installed either through an.msi installer or through a Docker image provided by UiPath.

Por meio do instalador .msi instalador

Pré-requisitos
Requisitos de Hardware

Esses são os requisitos mínimos para executar o proxy em um Windows Server com IIS. As necessidades reais de recursos variam dependendo do uso individual.

Núcleos da CPUBATER
24GB
Requisitos de software

As seguintes versões do Windows Server são necessárias para instalar o proxy:

  • 2012 R2
  • 2016
  • 2019
  • 2022
  • 2025

O seguinte é necessário para poder usar o proxy:

  • ASP.NET Core versions 3.1 or later
  • IIS versão 8.0 ou superior
  • As seguintes funções de servidor devem estar instaladas na sua máquina:
    • IIS-DefaultDocument
    • IIS-HttpErrors
    • IIS-StaticContent
    • IIS-RequestFiltering
    • IIS-URLAuthorization
    • IIS-WindowsAuthentication
    • IIS-ASPNET45
    • IIS-ISAPIExtensions
    • IIS-ISAPIFilter
    • IIS-WebSockets
    • IIS-ApplicationInit
    • IIS-ManagementConsole
Observação:
  • Para máquinas do Windows Server, instale as funções usando o Gerenciador de servidor.
  • For Windows 10 or Windows 11 machines, install the roles using the Turn Windows features on or off utility under Control Panel > Programs.
Passos de instalação

Siga estas etapas para realizar a instalação:

  1. Download the UiPath Orchestrator Credential Proxy installer from the Customer Portal.
  2. Instale o proxy.

Proxy conectado

  • Public URL - the Orchestrator Credentials Proxy's URL that is publicly exposed
  • SSL Certificate - the Subject or Thumbprint of the SSL certificate used to secure connections with the Orchestrator Credentials Proxy. This is the SSL certificate installed on the computer or web server hosting the proxy.

Note that it must be issued by a public certificate provider, and it needs to be valid for the Public URL.

  • Port - the port corresponding to the Public URL
  • Secret Key - (automatically generated) the key needed for configuring a custom proxy in the Orchestrator interface; make sure to copy it to your clipboard for future use.

Isso pode ser alterado manualmente e também é adequado para rotação de chave.

Proxy desconectado

This feature is only available if you are on the Enterprise - Advanced licensing plan for Flex Pricing Plan, or Enterprise or Application Test Enterprise for Unified Pricing Plan.

  • SSL Certificate - the Subject or Thumbprint of the SSL certificate used to secure connections with the Orchestrator Credentials Proxy. This is the SSL certificate installed on the computer or web server hosting the proxy.
  • Port - the port corresponding to the URL
  • Secret Key - (automatically generated) the key needed for configuring a custom proxy in the Orchestrator interface; make sure to copy it to your clipboard for future use.

Isso pode ser alterado manualmente e também é adequado para rotação de chave.

Após a instalação, o parâmetro AppSettings.CredentialsProxyType" id="1"/> no arquivo appsettings.Production.json" id="2"/> é definido como Desconectado. É assim que o proxy detecta o tipo na inicialização.

Observação:

The Anonymous Authentication option must be set to Enabled in IIS for the proxy to work.

Criptografando o parâmetro Jwt:Keys

To add an extra layer of security, you can encrypt the Jwt:Keys and SecureStoreConfigurations:Context parameters in your appsettings.json file.

Observação:

This requires UiPath.ConfigProtector.exe version 1.0.9 or higher.

Por meio da imagem do Docker

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

O script acima gera 64 bytes aleatórios (usando 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 (de path/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 e appSettings:SigningCredentialSettings:FileLocation:SigningCredential:Password - (inicialmente oculto) para serem usados para criptografar os parâmetros Jwt:Keys e SecureStoreConfigurations: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âmetros Jwt:Keys e SecureStoreConfigurations:Context.

Configurando e executando a imagem do Docker

Para executar o Orchestrator Credentials Proxy usando o Docker, siga as etapas abaixo.

  1. Baixe a imagem do Docker

You can download the image from http://registry.uipath.com/.

Observação:

Make sure to include the required version of the Orchestrator Credentials Proxy in the URL. For example, to download the image for version 2.1.4, use:

http://registry.uipath.com/orchestrator-credentialsproxy:2.1.4
http://registry.uipath.com/orchestrator-credentialsproxy:2.1.4

Este URL aponta para uma imagem do Docker e deve ser acessado por meio da CLI do Docker, não por meio de um navegador da web.

Observe que a versão 1.0.0 Apenas oferece suporte ao proxy conectado, enquanto as versões 2.0.0+ também oferecem suporte ao proxy desconectado.

Use este comando para obter a imagem:

$bytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(64);
$jwtSigningKey = [Convert]::ToBase64String($bytes);
docker run -e LICENSE_AGREEMENT=accept -e Jwt__Keys__0=$jwtSigningKey -p 8000:8080 registry.uipath.com/orchestrator-credentialsproxy:1.0.0
$bytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(64);
$jwtSigningKey = [Convert]::ToBase64String($bytes);
docker run -e LICENSE_AGREEMENT=accept -e Jwt__Keys__0=$jwtSigningKey -p 8000:8080 registry.uipath.com/orchestrator-credentialsproxy:1.0.0

Essa é a imagem UiPath padrão, que contém os armazenamentos de credenciais que já estão disponíveis em sua conta de nuvem. Você pode implantar a imagem no ambiente de nuvem da sua escolha.

O comando acima também gera a chave secreta.

  1. Crie sua própria imagem personalizada do Docker

Você pode criar sua própria imagem do Docker, com assemblies adicionais, com base na imagem fornecida pelo UiPath e baixada na etapa 1. Fazer isso:

  1. Crie um novo Dockerfile (para fins de ilustração, vamos chamá-lo de CustomDockerfile) e adicione o seguinte a ele:
    FROM {docker-image-path}
    RUN rm -rf ./plugins 
    COPY --chown=1001:0 {path of your custom assemblies} ./plugins 
    ENTRYPOINT ["dotnet", "UiPath.OrchestratorCredentialsProxy.dll"]
    FROM {docker-image-path}
    RUN rm -rf ./plugins 
    COPY --chown=1001:0 {path of your custom assemblies} ./plugins 
    ENTRYPOINT ["dotnet", "UiPath.OrchestratorCredentialsProxy.dll"]
    
    • Substitua {docker-image-path} pelo caminho para a imagem inicial do Docker, fornecido por UiPath.
    • Replace {path of your custom assemblies} with the path to your own credential store .dll files.Find out how Visual Studio uses this Dockerfile to build your images for faster debugging.
  2. Gere a imagem do Docker usando este comando, que inclui o nome do Dockerfile recém-criado:
    docker build -f CustomDockerfile . -t customproxy
    docker build -f CustomDockerfile . -t customproxy
    
  3. Execute a imagem do Docker:
    docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0=$jwtSigningKey -e appSettings__Plugins.SecureStores="{your-list-of-assemblies}" customproxy
    docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0=$jwtSigningKey -e appSettings__Plugins.SecureStores="{your-list-of-assemblies}" customproxy
    
    • Substitua {your-list-of-assemblies} pelo .dll arquivos dos armazenamentos de credenciais personalizados que você deseja adicionar ao Orchestrator.

Para executar a imagem com um parâmetro Jwt:Keys :

  ```
  docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0=$jwtSigningKey {docker-image-name}
  ```
  ```
  docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0=$jwtSigningKey {docker-image-name}
  ```

Para executar a imagem com vários parâmetros Jwt:Keys:

  ```
  docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0==$jwtSigningKey" -e Jwt__Keys__1==$jwtSigningKey" -e Jwt__Keys__2==$jwtSigningKey ... {docker-image-name}
  ```
  * Replace `{docker-image-name}` with the name you set for your custom Docker image.
  ```
  docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0==$jwtSigningKey" -e Jwt__Keys__1==$jwtSigningKey" -e Jwt__Keys__2==$jwtSigningKey ... {docker-image-name}
  ```
  * Replace `{docker-image-name}` with the name you set for your custom Docker image.

Para executar a imagem com um valor personalizado para o parâmetro appSettings:Plugins.SecureStores (ou seja, com o armazenamento de credenciais desejado), substitua o conteúdo desse parâmetro por seu próprio armazenamento de credenciais .dll arquivos:

  ```
  docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0=$jwtSigningKey -e appSettings__Plugins.SecureStores="UiPath.Orchestrator.CyberArk.dll;UiPath.Orchestrator.AzureKeyVault.SecureStore.dll" {docker-image-name}
  ```
  ```
  docker run --publish 8000:8080 -e LICENSE_AGREEMENT="accept" -e Jwt__Keys__0=$jwtSigningKey -e appSettings__Plugins.SecureStores="UiPath.Orchestrator.CyberArk.dll;UiPath.Orchestrator.AzureKeyVault.SecureStore.dll" {docker-image-name}
  ```

4. (Optional) Test the new Docker image

Para testar sua imagem, acesse sua interface Swagger em http://localhost:8000/swagger/index.html e verifique se o ponto de extremidade dedicado não autenticado /Health está funcionando. Uma solicitação bem-sucedida retorna uma resposta em branco com um código de status HTTP 200 OK.

Configuração

Proxy conectado e desconectado

A primeira etapa na configuração de seu proxy é adicionar quaisquer plugins .dll personalizados que você deseja usar na pasta C:\Program Files\UiPath\CredentialsProxy\plugins" id="1"/>.

Alguns armazenamentos de credenciais podem exigir que você defina configurações no nível do aplicativo, host ou proxy.As configurações são equivalentes a suas equivalentes no Orchestrator.Você deve especificar essas configurações no arquivo appsettings.Production.json do proxy.

CyberArk

Você deve adicionar quaisquer configurações no nível do host, como CLIPasswordSDKExePath, UsePowerShellCLI e AdditionalAllowedCharacters no parâmetro Appsettings no arquivo appsettings.Production.json:

{
// ...
  "AppSettings": {
    "Plugins.SecureStores.CyberArk.CLIPasswordSDKExePath": "D:\\PathName\\CLIPasswordSDK.exe",
    // ...
  }
  // ...
}
{
// ...
  "AppSettings": {
    "Plugins.SecureStores.CyberArk.CLIPasswordSDKExePath": "D:\\PathName\\CLIPasswordSDK.exe",
    // ...
  }
  // ...
}

CyberArk CCP

Se você não puder recuperar o CyberArk Central Credential Provider (CyberArkCCP) por proxy, adicione o seguinte parâmetro ao arquivo appsettings.Production.json:

{
// ...
  "AppSettings": {
    "Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet",
    // ...
  }
  // ...
}
{
// ...
  "AppSettings": {
    "Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet",
    // ...
  }
  // ...
}

HashiCorp Vault

Para habilitar o protocolo de autenticação Kerberos e ativar o encaminhamento de nós para o HashiCorp Vault, adicione os seguintes parâmetros ao arquivo appsettings.Production.json:

// ...
  "AppSettings": {
    "Plugins.SecureStores.HashiCorp Vault.KerberosEnabled": "true", // Optional, for Kerberos enablement
    "Plugins.SecureStores.HashiCorp Vault.ForwardToActiveNode": "true", // Optional, for forwarding to active node
    // ...
  }
  // ...
}
// ...
  "AppSettings": {
    "Plugins.SecureStores.HashiCorp Vault.KerberosEnabled": "true", // Optional, for Kerberos enablement
    "Plugins.SecureStores.HashiCorp Vault.ForwardToActiveNode": "true", // Optional, for forwarding to active node
    // ...
  }
  // ...
}

HashiCorp Vault (somente leitura)

Para habilitar o protocolo de autenticação Kerberos e ativar o encaminhamento de nós para o HashiCorp Vault (somente leitura), adicione os seguintes parâmetros ao arquivo appsettings.Production.json:

// ...
  "AppSettings": {
    "Plugins.SecureStores.HashiCorp Vault (read only).KerberosEnabled": "true", // Optional, for Kerberos enablement
    "Plugins.SecureStores.HashiCorp Vault (read only).ForwardToActiveNode": "true", // Optional, for forwarding to active node
    // ...
  }
  // ...
}
// ...
  "AppSettings": {
    "Plugins.SecureStores.HashiCorp Vault (read only).KerberosEnabled": "true", // Optional, for Kerberos enablement
    "Plugins.SecureStores.HashiCorp Vault (read only).ForwardToActiveNode": "true", // Optional, for forwarding to active node
    // ...
  }
  // ...
}

Somente proxy desconectado

Esse tipo de proxy é completamente separado do Orchestrator, então você deve fornecer as informações relacionadas aos cofres de credenciais localmente, no arquivo de configuração appsettings.Production.json. Você pode encontrar os arquivos no seguinte local: C:\Program Files\UiPath\OrchestratorCredentialsProxy\appsettings.Production.json.

Você deve editar os seguintes campos no referido arquivo, na AppSettings - seção SecureStoreConfigurations:

  • 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
    Importante:

    Depois de editar o arquivo de configuração, você precisa reiniciar o serviço a partir do IIS.

Exemplos de configuração

Você precisa adicionar os seguintes exemplos ao arquivo de configuração appsettings.Production.json para iniciar o proxy desconectado. Caso contrário, o serviço não será iniciado.

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.

Você deve editar os seguintes campos no referido arquivo, na AppSettings - seção SecureStoreConfigurations:

  • 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
    Importante:

    Depois de editar o arquivo de configuração, você precisa reiniciar o serviço a partir do IIS.

Observação:

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.

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>"
        }
      },
    ]
...
Importante:

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>"
        }
      },
    ]
...

Quaisquer configurações no nível do Host, como CLIPasswordSDKExePath, UsePowerShellCLI, ou AdditionalAllowedCharacters precisam ser colocadas sob o parâmetro Appsettings, semelhante à forma como é feito para o Orchestrator.

{
// ...
  "AppSettings": {
    "Plugins.SecureStores.CyberArk.CLIPasswordSDKExePath": "D:\\<MyPath>\\CLIPasswordSDK.exe",
    "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",
    "CredentialsProxyType": "Disconnected"
    // ...
  }
  // ...
{
// ...
  "AppSettings": {
    "Plugins.SecureStores.CyberArk.CLIPasswordSDKExePath": "D:\\<MyPath>\\CLIPasswordSDK.exe",
    "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",
    "CredentialsProxyType": "Disconnected"
    // ...
  }
  // ...
CyberArk - CCP
...
"SecureStoreConfigurations": [
      {
        "Key": "<MyCyberArkCCPStore>",
        "Type": "CyberArkCCP",
        "Context": {
          "ApplicationId": "<ApplicationId>",
          "Safe": "<CyberArkSafe>",
          "Folder": "<CyberArkFolder>",
          "WebServiceUrl": "<CentralCredentialProviderUrl>",
          "WebServiceName": "<WebServiceName>",
          "SerializedClientCertificate": "<ClientCertificate>", // must be the ".pfx" file's content as base64 string
          "ClientCertificatePassword": "<ClientCertificatePassword>",
          "SerializedRootCA": "<someServerRootCA>" // must be the ".crt" or ".cer" file's content as base64 string
        }
      },
    ]
...
...
"SecureStoreConfigurations": [
      {
        "Key": "<MyCyberArkCCPStore>",
        "Type": "CyberArkCCP",
        "Context": {
          "ApplicationId": "<ApplicationId>",
          "Safe": "<CyberArkSafe>",
          "Folder": "<CyberArkFolder>",
          "WebServiceUrl": "<CentralCredentialProviderUrl>",
          "WebServiceName": "<WebServiceName>",
          "SerializedClientCertificate": "<ClientCertificate>", // must be the ".pfx" file's content as base64 string
          "ClientCertificatePassword": "<ClientCertificatePassword>",
          "SerializedRootCA": "<someServerRootCA>" // must be the ".crt" or ".cer" file's content as base64 string
        }
      },
    ]
...

Com base em sua configuração do IIS, você pode precisar configurar KeyStorageFlags adicional da seguinte forma:

"AppSettings": {
...
"Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet",
...
}
"AppSettings": {
...
"Plugins.SecureStores.CyberArkCCP.KeyStorageFlags": "MachineKeySet",
...
}

Você pode transferir um arquivo PFX, CRT ou CER para uma string base64 da seguinte forma:

$fileContentBytes = get-content 'C:\path\to\the.pfx' -Encoding Byte
[System.Convert]::ToBase64String($fileContentBytes) | Out-File 'C:\path\to\the.txt'
$fileContentBytes = get-content 'C:\path\to\the.pfx' -Encoding Byte
[System.Convert]::ToBase64String($fileContentBytes) | Out-File 'C:\path\to\the.txt'
CyberArk® Conjur Cloud (somente leitura)
...
"SecureStoreConfigurations": [
      {
        "Key": "MyCyberArkConjur",
        "Type": "CyberArk Conjur Cloud (read only)",
        "Context": {
          "ServiceUrl": "https://{myCyberArkConjurUrl}/",
          "LoginName": "{myLoginName}",
          "ApiKey": "{myApiKey}",
          "VariableIdPrefix": "{myPrefix}"
        }
      },
    ]
...
...
"SecureStoreConfigurations": [
      {
        "Key": "MyCyberArkConjur",
        "Type": "CyberArk Conjur Cloud (read only)",
        "Context": {
          "ServiceUrl": "https://{myCyberArkConjurUrl}/",
          "LoginName": "{myLoginName}",
          "ApiKey": "{myApiKey}",
          "VariableIdPrefix": "{myPrefix}"
        }
      },
    ]
...
CyberArk® Conjur (SomenteLeitura)
...
"SecureStoreConfigurations": [
  {
    "Key": "MyCyberArkConjur",
    "Type": "CyberArk Conjur (read only)",
    "Context": {
      "ApplianceUrl": "https://{company}.secretsmgr.cyberark.cloud/api",
      "Account": "{myAccount}",
      "AuthenticationType": "{Jwt|ApiKey}",
      "JWT":  {
          "JwtServiceId": "{myJwtServiceId}",
          "IdentityProviderUrl": "{myIdentityProviderUrl}",
          "ClientId": "{myClientId}",
          "ClientSecret": "{myClientSecret}",
          "Scope": "{myScope}"
      },
      "ApiKey": {
          "LoginName": "{myLoginName}",
          "Key": "{myApiKey}"
      },
      "HostId": "{myHostId}",
      "VariableIdPrefix": "{myPrefix}"
    }
  },
]
...
...
"SecureStoreConfigurations": [
  {
    "Key": "MyCyberArkConjur",
    "Type": "CyberArk Conjur (read only)",
    "Context": {
      "ApplianceUrl": "https://{company}.secretsmgr.cyberark.cloud/api",
      "Account": "{myAccount}",
      "AuthenticationType": "{Jwt|ApiKey}",
      "JWT":  {
          "JwtServiceId": "{myJwtServiceId}",
          "IdentityProviderUrl": "{myIdentityProviderUrl}",
          "ClientId": "{myClientId}",
          "ClientSecret": "{myClientSecret}",
          "Scope": "{myScope}"
      },
      "ApiKey": {
          "LoginName": "{myLoginName}",
          "Key": "{myApiKey}"
      },
      "HostId": "{myHostId}",
      "VariableIdPrefix": "{myPrefix}"
    }
  },
]
...
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>"
          "LdapUseDynamicCredentials" : "true"
          "KerberosSPN": "HTTP/vault-spn"
        }
      },
    ]
...
...
"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>"
          "LdapUseDynamicCredentials" : "true"
          "KerberosSPN": "HTTP/vault-spn"
        }
      },
    ]
...

Quaisquer configurações no nível do host, como Plugins.SecureStores.HashiCorp Vault.KerberosEnabled, Plugins.SecureStores.HashiCorp Vault (read only).KerberosEnabled, Plugins.SecureStores.HashiCorp Vault (read only).ForwardToActiveNode ou Plugins.SecureStores.HashiCorp Vault.ForwardToActiveNode precisam ser colocadas no parâmetro Appsettings semelhante ao que é feito para o Orchestrator.

{
// ...
  "AppSettings": {
    // Optional, for Kerberos Enablement
    "Plugins.SecureStores.HashiCorp Vault.KerberosEnabled": "true",
    "Plugins.SecureStores.HashiCorp Vault (read only).KerberosEnabled": "true"
    // Optional, for Forwarding to Active node
    "Plugins.SecureStores.HashiCorp Vault.ForwardToActiveNode": "true",
    "Plugins.SecureStores.HashiCorp Vault (read only).ForwardToActiveNode": "true"
    // ...
  }
  // ...
}
{
// ...
  "AppSettings": {
    // Optional, for Kerberos Enablement
    "Plugins.SecureStores.HashiCorp Vault.KerberosEnabled": "true",
    "Plugins.SecureStores.HashiCorp Vault (read only).KerberosEnabled": "true"
    // Optional, for Forwarding to Active node
    "Plugins.SecureStores.HashiCorp Vault.ForwardToActiveNode": "true",
    "Plugins.SecureStores.HashiCorp Vault (read only).ForwardToActiveNode": "true"
    // ...
  }
  // ...
}
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>"
        }
      },
    ]
...
Google Secret Manager
...
"SecureStoreConfigurations": [
      {
        "Key": "<GoogleSecretManager>",
        "Type": "Google Secret Manager",
        "Context": {
          "ProjectId": "<ProjectId>",
          "ServiceAccountKeyJson": "<ServiceAccountKeyJson>",
        }
      },
    ]
...
...
"SecureStoreConfigurations": [
      {
        "Key": "<GoogleSecretManager>",
        "Type": "Google Secret Manager",
        "Context": {
          "ProjectId": "<ProjectId>",
          "ServiceAccountKeyJson": "<ServiceAccountKeyJson>",
        }
      },
    ]
...
Google Secret Manager (somente leitura)
...
"SecureStoreConfigurations": [
      {
        "Key": "<GoogleSecretManager>",
        "Type": "Google Secret Manager (read only)",
        "Context": {
          "ProjectId": "<ProjectId>",
          "ServiceAccountKeyJson": "<ServiceAccountKeyJson>",
        }
      },
    ]
...
...
"SecureStoreConfigurations": [
      {
        "Key": "<GoogleSecretManager>",
        "Type": "Google Secret Manager (read only)",
        "Context": {
          "ProjectId": "<ProjectId>",
          "ServiceAccountKeyJson": "<ServiceAccountKeyJson>",
        }
      },
    ]
...
Vários armazenamentos de credenciais

Se você usar vários armazenamentos de credenciais, você pode adicionar um abaixo do 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"
        }
      }
    ]
  ...
  }
}

Validação

Importante:

Isso se aplica apenas ao Credentials Proxy desconectado.

O proxy valida a configuração na inicialização, se o tipo que ele detecta for Disconnected.

Essas são algumas das etapas de validação que o proxy realiza:

  • The proxy ensures that that appsettings.Production.json contains the expected configurations, as detailed in the Configuration section above.
  • O proxy garante que SecureStoreConfigurations não contenha parâmetros Key duplicados, ou seja, que os armazenamentos de credenciais configurados no arquivo appsettings.Production.json sejam exclusivos.
  • O parâmetro SecureStoreConfigurations é um array de configurações. Você pode adicionar quantos armazenamentos de credenciais quiser, mesmo do mesmo tipo. Por exemplo, você pode ter várias instâncias do Azure Key Vault (somente leitura) configuradas, desde que campo Key seja exclusivo.
  • O proxy verifica se todos os valores Type são válidos.
  • Com base na implementação de cada armazenamento seguro, o proxy verifica se o cofre pode ser alcançado com sucesso.

Geração de logs

Os logs de Credentials Proxy do Orchestrator serão armazenados localmente, na pasta 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.

Se você não quiser dar permissões de gravação a essa pasta, forneça um caminho relativo ou absoluto de sua escolha por meio do parâmetro NLog.targets.logfile.fileName em appsettings.Production.json.

Em máquinas Windows, o proxy também armazena logs no Visualizador de eventos do Windows.

Considerações de segurança

  • 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 onde o Credentials Proxy do Orchestrator está instalado e é criptografado e armazenado no banco de dados pelo Orchestrator.
  • Quando você edita um proxy de armazenamento de credenciais no Orchestrator e altera sua URL, você deve 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.

Uso do Credentials Proxy do Orchestrator com um balanceador de carga

Se você usar o proxy em combinação com um balanceador de carga, certifique-se de manter a mesma configuração em todos os nós.

Elementos que devem permanecer idênticos entre 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.jsone appsettings.Production.json. Observe que appsettings.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 nessa pasta, então você só precisa estar atento a quaisquer plug-ins personalizados que você adicionar.

Fatores importantes a considerar

  • Se você quiser fazer quaisquer alterações na configuração da imagem do Docker que fornecemos para instalar o proxy, é altamente recomendável que você crie uma imagem do Docker personalizada. Você deve usar essa imagem personalizada para implantar o proxy em todos os nós.
  • Algumas variáveis de ambiente podem ter um impacto durante a execução.Por exemplo, variáveis de ambiente que substituem valores de configuração appsettings.json ou aquelas que afetam o ambiente do .NET.
  • Você pode usar o endpoint dedicado não autenticado https://{YourOrchestratorCredentialsProxyURL}/api/v1/Health para verificar se o Credentials Proxy do Orchestrator ainda está em execução.

Atualização do certificado Credentials Proxy do Orchestrator

Para instalações de nó único, atualize o certificado SSL da seguinte forma:

  1. Import the new certificate into the Personal folder, under Certificates, in the local machine's certificate console (certlm.msc).
  2. In the IIS Management Console, expand Sites, and select UiPath Orchestrator Credential Proxy.
  3. From the right-side panel, select Bindings....
  4. From the Bindings... view, select the default https record, then use the Select... button to choose a certificate.
  5. In the Select Certificate pop-up window, select the newly added certificate.
  6. Select OK until you complete the setup.
    Observação:

    Para instalações de vários nós, certifique-se de atualizar o certificado em todas as máquinas.

Para atualizar o certificado para instalações usando um balanceador de carga, use as mesmas etapas descritas acima. Como o Orchestrator Credentials Proxy é sem estado, remova o nó do balanceador de carga ao atualizar o certificado.

Rodízio de chaves

Rotação de chaves com tempo de inatividade

Observação:

This operation requires stopping and restarting the running Orchestrator Credentials Proxy. This can have an impact on any live requests done by Orchestrator.

  1. Gere uma nova chave secreta de acordo com os padrões do Credentials Proxy do Orchestrator.
  2. Pare seu Credentials Proxy do Orchestrator.
  3. Edite o arquivo appsettings.Production.json e substitua sua chave existente pela nova chave.
  4. Inicie seu Credentials Proxy do Orchestrator.
  5. No Orchestrator, acesse o Credentials Proxy do Orchestrator e edite o campo Secret com seu novo segredo.

Rotação de chaves sem tempo de inatividade

Observação:

This operation requires an Orchestrator Credentials Proxy with a load balancer and a minimum of two Orchestrator Credentials Proxy instances. For more information, check the Installation section.

  1. Gere uma nova chave secreta de acordo com os padrões do Credentials Proxy do Orchestrator.
  2. Adicione a chave recém-gerada a suas instâncias de Credentials Proxy. Siga este procedimento para cada instância:
    1. Retire uma instância do Credentials Proxy do Orchestrator do balanceador de carga.
    2. Pare essa instância do Credentials Proxy do Orchestrator.
    3. Abra o arquivo appsettings.Production.json. O arquivo deve conter um código semelhante ao seguinte:
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}"
              ],
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}"
              ],
      
    4. Adicione a chave recém-gerada, mantendo a existente. O parâmetro Keys é compatível com vários valores separados por vírgulas:
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      
    5. Inicie o Credentials Proxy do Orchestrator.
    6. Traga a instância Credentials Proxy do Orchestrator de volta ao balanceador de carga.
  3. No Orchestrator, acesse o Credentials Proxy do Orchestrator e edite o campo Secret com seu novo segredo.
  4. Após algum tempo, tire sua chave antiga das instâncias de Credentials Proxy.Siga este procedimento para cada instância:
    1. Retire uma instância do Credentials Proxy do Orchestrator do balanceador de carga.
    2. Pare essa instância do Credentials Proxy do Orchestrator.
    3. Abra o arquivo appsettings.Production.json. O arquivo deve conter duas chaves conforme mencionado nas etapas anteriores:
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      
    4. Remova a chave antiga do arquivo: { "Jwt": { "Keys": [ "{{NewKey}}" ],
    5. Inicie o Credentials Proxy do Orchestrator.
    6. Traga a instância Credentials Proxy do Orchestrator de volta ao balanceador de carga.

Esta página foi útil?

Conectar

Precisa de ajuda? Suporte

Quer aprender? Academia UiPath

Tem perguntas? Fórum do UiPath

Fique por dentro das novidades