UiPath Documentation
orchestrator
latest
false
Importante :
La localización de contenidos recién publicados puede tardar entre una y dos semanas en estar disponible.
UiPath logo, featuring letters U and I in white

Guía del usuario de Orchestrator

Última actualización 20 de abr. de 2026

El proxy de credenciales de Orchestrator

Puede añadir sus propios almacenes de credenciales a Orchestrator para controlar de forma independiente la seguridad de los datos de conexión.

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 conocido

Esto solo se aplica en escenarios en los que el puerto del proxy de credenciales de Orchestrator se establece en un valor diferente al predeterminado 443.

Al actualizar desde cualquier versión entre 1.0.0 y 2.0.1 y si has utilizado un puerto personalizado, el puerto local en la regla de entrada UiPathOrchestratorCredentialsProxy se cambia automáticamente a 443, que es el predeterminado. Esto evita que se establezca la conexión al proxy.

Para evitar esto, debes cambiar manualmente el puerto local en la regla de entrada al actualizar.

Instalación

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

A través del archivo .msi instalador

Requisitos previos
Requisitos de hardware

Estos son los requisitos mínimos para ejecutar el proxy en un servidor Windows con IIS. Las necesidades de recursos reales variarán dependiendo del uso individual.

Núcleos de la CPURAM
24 GB
Requisitos de software

Se requieren las siguientes versiones de Windows Server para instalar el proxy:

  • 2012 R2
  • 2016
  • 2019
  • 2022
  • 2025

Se requiere lo siguiente para poder utilizar el proxy:

  • ASP.NET Core versions 3.1 or later
  • IIS versión 8.0 o superior
  • Los siguientes roles de servidor deben estar instalados en tu máquina:
    • Documento predeterminado de IIS
    • Errores de IIS-Http
    • Contenido estático de IIS
    • Filtro de solicitudes IIS
    • Autorización de IIS
    • Autenticación de IIS-Windows
    • IIS-ASPNET45
    • Extensiones de IIS-ISAPI
    • FiltroDeIIS
    • IIS-WebSockets
    • InicioDeAplicación IIS
    • Consola de administración de IIS
Nota:
  • Para máquinas de Windows Server, instala los roles mediante Server Manager.
  • For Windows 10 or Windows 11 machines, install the roles using the Turn Windows features on or off utility under Control Panel > Programs.
Pasos de la instalación

Siga estos pasos para realizar la instalación:

  1. Download the UiPath Orchestrator Credential Proxy installer from the Customer Portal.
  2. Instala el 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.

Esto se puede cambiar manualmente y también es adecuado para la rotación de teclas.

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.

Esto se puede cambiar manualmente y también es adecuado para la rotación de teclas.

Al instalar, el parámetro AppSettings.CredentialsProxyType del archivo appsettings.Production.json se establece en Desconectado. Así es como el proxy detecta el tipo al inicio.

Nota:

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

Cifrar el 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.

Nota:

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

A través de la imagen de Docker

Informacion preliminar

Todos los ajustes del proxy de credenciales de Orchestrator que se pueden editar están disponibles en su archivo appsettings.json. Los siguientes parámetros son importantes en la configuración inicial:

  • Jwt:Keys : (inicialmente vacía) esta matriz de cadenas se usa para configurar la autenticación del proxy. Esta constituye la clave secreta que utilizará durante el proceso de creación del proxy y que permite a Orchestrator recuperar datos del proxy. Se ignoran los valores no válidos. Si no se encuentran valores válidos, el proxy no se iniciará.

Las claves secretas deben estar en base64 y se pueden generar usando uno de los scripts de PowerShell a continuación.

$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

El script anterior genera 64 bytes aleatorios (usando SeccureRandom) y los convierte en una cadena 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 establecido en los almacenes de credenciales predeterminados disponibles en Orchestrator) esta es una cadena CSV que se usa para especificar qué archivos .dll los ensamblados deben cargarse desde el disco (desde path/plugins) para permitir que el proxy utilice los almacenes seguros. Agregar ensamblados no válidos a la lista no interrumpirá el inicio, pero recibirá errores de registro cuando intente implementarlo.
  • appSettings:SigningCredentialSettings:FileLocation:SigningCredential:FilePath y appSettings:SigningCredentialSettings:FileLocation:SigningCredential:Password: (inicialmente oculto) para cifrar los parámetros Jwt:Keys y SecureStoreConfigurations:Context. Esto representa la ruta de archivo a tu certificado de firma.
  • appSettings:SigningCredentialSettings:StoreLocation:Name, appSettings:SigningCredentialSettings:StoreLocation:Location, appSettings:SigningCredentialSettings:StoreLocation:NameType: (inicialmente oculto) para cifrar los parámetros Jwt:Keys y SecureStoreConfigurations:Context.

Configurar y ejecutar la imagen de Docker

Para ejecutar el proxy de credenciales de Orchestrator mediante Docker, sigue los pasos que se indican a continuación.

  1. Descargar la imagen de Docker

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

Nota:

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

Esta URL apunta a una imagen de Docker y se debe acceder a ella a través de la CLI de Docker, y no a través de un navegador web.

Ten en cuenta que la versión 1.0.0 solo admite el proxy conectado, mientras que las versiones 2.0.0+ también admiten el proxy desconectado.

Utilice este comando para obtener la imagen:

$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

Esta es la imagen predeterminada de UiPath, que contiene los almacenes de credenciales que ya están disponibles en tu cuenta de la nube. Puedes implementar la imagen en el entorno en la nube de tu elección.

El comando anterior también genera la clave secreta.

  1. Crear su propia imagen personalizada de Docker

Puedes crear tu propia imagen de Docker, con ensamblados adicionales, basada en la imagen proporcionada por UiPath y descargada en el paso 1. Para ello:

  1. Crea un nuevo Dockerfile (con fines ilustrativos, lo llamaremos CustomDockerfile) y agrégale lo siguiente:
    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"]
    
    • Reemplaza {docker-image-path} con la ruta de la imagen inicial de Docker, proporcionada 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. Genera la imagen de Docker con este comando, que incluye el nombre del Dockerfile recién creado:
    docker build -f CustomDockerfile . -t customproxy
    docker build -f CustomDockerfile . -t customproxy
    
  3. Ejecuta la imagen de 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
    
    • Reemplazar {your-list-of-assemblies} con el archivo .dll de los almacenes de credenciales personalizadas que desea añadir a Orchestrator.

Para ejecutar la imagen con un 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 ejecutar la imagen con varios parámetros de 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 ejecutar la imagen con un valor personalizado para el parámetro appSettings:Plugins.SecureStores (es decir, con su almacén de credenciales deseado), reemplace el contenido de este parámetro con su propio almacén de credenciales .dll archivos:

  ```
  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 probar tu imagen, accede a su interfaz de Swagger en http://localhost:8000/swagger/index.html y comprueba si el punto final /Health dedicado sin autenticación está funcionando.Una solicitud con éxito devuelve una respuesta en blanco junto con un código de estado HTTP 200 OK.

Configuración

Proxy Conectado y Desconectado

El primer paso para configurar tu proxy es añadir cualquier complemento .dll personalizado que quieras utilizar en la carpeta C:\Program Files\UiPath\CredentialsProxy\plugins.

Algunos almacenes de credenciales pueden requerir que realices la configuración en el nivel de aplicación, host o proxy. Los ajustes son equivalentes a sus homólogos de Orchestrator. Debes especificar esta configuración en el archivo appsettings.Production.json del proxy.

CyberArk

Debes añadir cualquier configuración en el nivel de host como CLIPasswordSDKExePath, UsePowerShellCLI, y AdditionalAllowedCharacters bajo el parámetro Appsettings en el archivo appsettings.Production.json:

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

CCP de CyberArk

Si no puedes recuperar el CyberArkCCP (CyberArk Central Credential Provider) a través de proxy, añade el siguiente parámetro al archivo appsettings.Production.json:

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

HashiCorp Vault

Para habilitar el protocolo de autenticación Kerberos y activar el reenvío de nodos para HashiCorp Vault, añade los siguientes parámetros al archivo 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 (solo lectura)

Para habilitar el protocolo de autenticación Kerberos y activar el reenvío de nodos para HashiCorp Vault (solo lectura), añade los siguientes parámetros al archivo 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
    // ...
  }
  // ...
}

Solo proxy desconectado

Este tipo de proxy está completamente separado de Orchestrator, por lo que debes proporcionar la información relacionada con los almacenes de credenciales localmente, en el archivo de configuración appsettings.Production.json. Puedes encontrar los archivos en la siguiente ubicación: C:\Program Files\UiPath\OrchestratorCredentialsProxy\appsettings.Production.json.

Debes editar los siguientes campos en dicho archivo, en la sección AppSettings - SecureStoreConfigurations:

  • Key - la clave del identificador para la configuración
  • Type - el tipo de almacén de credenciales, como se identifica en los archivos .dll configurados mediante el parámetro Plugins.SecureStores encontrado en appsettings.json (consulta los ejemplos siguientes)
  • Context - la información de conectividad relacionada con la implementación del almacén seguro
    Importante:

    Una vez que edites el archivo de configuración, debes reiniciar el servicio desde IIS.

Ejemplos de configuración

Debes añadir los siguientes ejemplos al archivo de configuración appsettings.Production.json para iniciar el proxy desconectado. De lo contrario, el servicio no se iniciará.

Elige el ejemplo adecuado en función de tu tipo de almacén de credenciales o añade varios almacenes de credenciales utilizando el último ejemplo de esta página.

Debes editar los siguientes campos en dicho archivo, en la sección AppSettings - SecureStoreConfigurations:

  • Key - la clave del identificador para la configuración
  • Type - el tipo de almacén de credenciales, como se identifica en los archivos .dll configurados mediante el parámetro Plugins.SecureStores encontrado en appsettings.json (consulta los ejemplos siguientes)
  • Context - la información de conectividad relacionada con la implementación del almacén seguro
    Importante:

    Una vez que edites el archivo de configuración, debes reiniciar el servicio desde IIS.

Nota:

Antes de realizar cualquier cambio en el archivo appsettings.Production.json, asegúrate de crear una copia de seguridad del archivo original. Esto te permite restaurar fácilmente la configuración inicial o comparar los cambios si surgen incidencias durante la configuración.

AWS Secrets Manager/AWS Secrets Manager (solo lectura)
...
"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 (solo lectura)
...
"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 (lectura/escritura) no es compatible.

BeyondTrust Password Safe - cuentas administradas
...
"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 - contraseñas de equipos
...
"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>"
        }
      },
    ]
...

Cualquier configuración en el nivel de host, como CLIPasswordSDKExePath, UsePowerShellCLI o AdditionalAllowedCharacters debe ponerse bajo el parámetro Appsettings igual a como se hace para 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
        }
      },
    ]
...

En función de tu configuración de IIS, es posible que debas configurar KeyStorageFlags adicionales de la siguiente manera:

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

Puedes transferir un archivo PFX, CRT o CER en una cadena base64 de la siguiente manera:

$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 (solo lectura)
...
"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 (solo lectura)
...
"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 (solo lectura)
...
"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"
        }
      },
    ]
...

Cualquier configuración en el nivel de host, como Plugins.SecureStores.HashiCorp Vault.KerberosEnabled, Plugins.SecureStores.HashiCorp Vault (read only).KerberosEnabled, Plugins.SecureStores.HashiCorp Vault (read only).ForwardToActiveNode o Plugins.SecureStores.HashiCorp Vault.ForwardToActiveNode, debe ponerse bajo el parámetro Appsettings al igual que se hace para 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"
    // ...
  }
  // ...
}
Secret Server de Thycotic
...
"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>"
        }
      },
    ]
...
Gestor de secretos de Google
...
"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 Gestor (solo lectura)
...
"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>",
        }
      },
    ]
...
Varios almacenes de credenciales

Si utilizas varios almacenes de credenciales, puedes añadir uno debajo del otro, de la siguiente manera:

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

Validación

Importante:

Esto solo se aplica al credentials proxy desconectado.

El proxy valida la configuración al inicio, si el tipo que detecta es Disconnected.

Estos son algunos de los pasos de validación que realiza el proxy:

  • The proxy ensures that that appsettings.Production.json contains the expected configurations, as detailed in the Configuration section above.
  • El proxy garantiza que SecureStoreConfigurationsno contenga ningún parámetro Key duplicado, es decir, que los almacenes de credenciales configurados en el archivo appsettings.Production.json sean únicos.
  • El parámetro SecureStoreConfigurations es una matriz de configuraciones. Puedes añadir tantos almacenes de credenciales como desees, incluso del mismo tipo. Por ejemplo, puedes tener varias instancias de Azure Key Vault (solo lectura) configuradas, siempre que el campo Key sea único.
  • El proxy comprueba que todos los valores Type son válidos.
  • En función de la implementación de cada almacén seguro, el proxy comprueba que se pueda llegar al almacén correctamente.

Registro

Los registros de Credentials Proxy de Orchestrator se almacenan localmente, en la carpeta C:\Program Files\UiPath\OrchestratorCredentialsProxy, si el grupo de aplicaciones del proxy tiene permisos de escritura para esa ruta. Se configuran en IIS.

Si no deseas dar permisos de escritura a esa carpeta, proporciona una ruta relativa o absoluta de tu elección a través del parámetro NLog.targets.logfile.fileName en appsettings.Production.json.

En las máquinas de Windows, el proxy también almacena los registros en el Visor de eventos de Windows.

Consideraciones de seguridad

  • Orchestrator solo permite direcciones URL seguras (HTTPS) para el proxy. El certificado HTTPS debe ser válido y estar firmado por una autoridad de certificación ampliamente reconocida. No se admiten los certificados autofirmados o firmados por una autoridad interna.
  • Orchestrator se valida a través de un secreto de cliente generado por el Credentials Proxy de Orchestrator. El secreto de cliente se almacena en un archivo de configuración en la máquina donde se instala el Credentials Proxy de Orchestrator, y se cifra y almacena en la base de datos por Orchestrator.
  • Cuando editas un proxy de almacén de credenciales en Orchestrator y cambias su URL, debes introducir el secreto de cliente.
  • Las acciones de Orchestrator Credentials Proxy 2.0.0+ se registran en el Visor de sucesos de Windows.
  • Los binarios deben firmarse en la máquina con Windows.
  • La imagen de Docker debe estar firmada.

Utilizar el Credentials Proxy de Orchestrator con un equilibrador de carga

Si utilizas el proxy en combinación con un equilibrador de carga, asegúrate de mantener la misma configuración en todos los nodos.

Elementos que deben permanecer idénticos en todos los nodos

  • La versión del instalador proxy. Por ejemplo, si utilizas la versión 1.0.0, todos los nodos de equilibrador de carga deben utilizar también 1.0.0.
  • La configuración en los archivos de configuración de la aplicación. En la mayoría de los casos, estos son appsettings.json y appsettings.Production.json. Ten en cuenta que appsettings.Production.json es único para cada instalación, por lo que debes añadirlo manualmente a cada nodo para garantizar la coherencia.
  • Los complementos de almacén de credenciales añadidos a path/plugins. Todos los complementos que admitimos ya están en esta carpeta, por lo que solo debes ser consciente de cualquier complemento personalizado que añadas.

Cosas importantes a considerar

  • Si deseas realizar cualquier cambio en la configuración de la imagen de Docker que proporcionamos para instalar el proxy, te recomendamos encarecidamente que crees una imagen de Docker personalizada en su lugar.A continuación, debes utilizar esta imagen personalizada para implementar el proxy en todos los nodos.
  • Algunas variables de entorno pueden influir en el tiempo de ejecución. Por ejemplo, las variables de entorno que anulan los valores de configuración appsettings.json o las que afectan al entorno .NET.
  • Puedes utilizar el punto final https://{YourOrchestratorCredentialsProxyURL}/api/v1/Health no autenticado dedicado para comprobar si el Credentials Proxy de Orchestrator aún se está ejecutando.

Actualizar el certificado de Credentials Proxy de Orchestrator

Para las instalaciones de nodo único, actualiza el certificado SSL de la siguiente manera:

  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.
    Nota:

    Para las instalaciones multinodo, asegúrate de actualizar el certificado en todas las máquinas.

Para actualizar el certificado para las instalaciones utilizando un equilibrador de carga, utiliza los mismos pasos descritos anteriormente. Dado que Orchestrator Credentials Proxy es sin estado, elimina el nodo del equilibrador de carga al actualizar el certificado.

Rotación de claves

Rotación de claves con tiempo de inactividad

Nota:

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

  1. Genera una nueva clave secreta conforme a los estándares de Credentials Proxy de Orchestrator.
  2. Detén tu Credentials Proxy de Orchestrator.
  3. Edita el archivo appsettings.Production.json y sobrescribe la clave existente con la nueva.
  4. Inicia tu Credentials Proxy de Orchestrator.
  5. En Orchestrator, ve a tu Credentials Proxy de Orchestrator y escribe el nuevo secreto en el campo Secret.

Rotación de claves sin tiempo de inactividad

Nota:

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. Genera una nueva clave secreta conforme a los estándares de Credentials Proxy de Orchestrator.
  2. Añade la clave recién generada a tus instancias de Credentials Proxy. Sigue este procedimiento para cada instancia:
    1. Extrae del equilibrador de carga una instancia de Credentials Proxy de Orchestrator.
    2. Detén esa instancia de Credentials Proxy de Orchestrator.
    3. Abre el archivo appsettings.Production.json. El código del archivo debe ser similar al siguiente:
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}"
              ],
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}"
              ],
      
    4. Añade la clave recién generada mientras mantienes la existente. El parámetro Keys admite varios valores separados por comas:
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      
    5. Inicia el Credentials Proxy de Orchestrator.
    6. Vuelve a poner la instancia de Credentials Proxy de Orchestrator en el equilibrador de carga.
  3. En Orchestrator, ve a tu Credentials Proxy de Orchestrator y escribe el nuevo secreto en el campo Secret.
  4. Después de un tiempo, quita tu clave antigua de las instancias de Credentials Proxy. Sigue este procedimiento para cada instancia:
    1. Extrae del equilibrador de carga una instancia de Credentials Proxy de Orchestrator.
    2. Detén esa instancia de Credentials Proxy de Orchestrator.
    3. Abre el archivo appsettings.Production.json. El archivo debe contener dos claves, tal como se menciona en los pasos anteriores:
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      {
          "Jwt": {
              "Keys": [
                  "{{OldKey}}",
                  "{{NewKey}}"
              ],
      
    4. Elimina la clave antigua del archivo: { "Jwt": { "Keys": [ "{{NewKey}}"],
    5. Inicia el Credentials Proxy de Orchestrator.
    6. Vuelve a poner la instancia de Credentials Proxy de Orchestrator en el equilibrador de carga.

¿Te ha resultado útil esta página?

Conectar

¿Necesita ayuda? Soporte

¿Quiere aprender? UiPath Academy

¿Tiene alguna pregunta? Foro de UiPath

Manténgase actualizado