- 概述
- 要求
- 安装
- 安装后
- 集群管理
- 监控和警示
- 迁移和升级
- 特定于产品的配置
- 使用 Orchestrator 配置程序工具
- 正在准备 Orchestrator
- 更新 Orchestrator 配置
- 清理 Orchestrator 数据库
- 最佳实践和维护
- 故障排除
- 无法获取沙盒映像
- Pod 未显示在 ArgoCD 用户界面中
- Redis 探测器失败
- RKE2 服务器无法启动
- 在 UiPath 命名空间中找不到密码
- ArgoCD 在首次安装后进入“进行中”状态
- 访问 ArgoCD 只读帐户时出现问题
- MongoDB Pod 处于 CrashLoopBackOff 状态或在删除后处于“等待 PVC 配置”状态
- 集群还原或回滚后服务运行状况不佳
- Pod 在 Init:0/X 中卡住
- Prometheus 处于 CrashLoopBackoff 状态,并出现内存不足 (OOM) 错误
- 监控仪表板中缺少 Ceph-rook 指标
- Pod 无法在代理环境中与 FQDN 通信
- Failure to configure email alerts post upgrade
- Task Mining 故障排除
- 使用 Automation Suite 诊断工具
- 使用 Automation Suite 支持捆绑包
- 探索日志

Linux 版 Automation Suite 安装指南
正在准备 Orchestrator
要将 Orchestrator 从独立安装迁移到 Automation Suite,您必须从独立安装中收集设置和各种文件,并将其应用于 Automation Suite 安装。
web.config
、 appSettings
、存储、NLog、凭据存储、加密密钥和加密密钥。
要将 Orchestrator 从独立安装迁移到 Automation Suite,您必须从独立安装中收集设置和各种文件,并将其应用于 Automation Suite 安装。
虽然在安装时只能配置部分设置,但所有设置都应可用于安装后配置。
- 如要在安装时配置设置,请将其添加到
cluster_config.json
文件中; - 在安装完成后更新设置取决于设置的作用域,以及某个功能是否可用于通过 app-of-apps 参数进行配置。
orchestrator/plugins/nlog
或 orchestrator/plugins/securestore
下的 uipath
存储桶中。
您可以按如下方式添加自定义配置:
- 通过编辑 ArgoCD 中的应用程序参数(参数覆盖);
- 通过编辑 Kubernetes 配置映射
orchestrator-customconfig
中命名空间uipath
中的文件。
web.config
设置没有等效项,或者在 Automation Suite 中使用其他机制实现。
您确实需要配置以下选项:
security.requestFiltering.requestLimits.maxAllowedContentLength
security.requestFiltering.requestLimits.maxAllowedContentLength
记下此设置的值以备后用。决定是否需要在 Automation Suite 中对其进行配置。其默认值为 300MiB。
UiPath.Orchestrator.dll.config
配置文件的 appSettings
或 secureAppSettings
部分中进行的自定义更改。您可以将自定义 appSettings
和 secureAppSettings
添加到 orchestrator-customconfig
配置映射。
UiPath.Orchestrator.dll.config
配置文件的 appSettings
部分中,标识所有已修改或添加的设置。将这些设置保存在 .json
文件中,以便在后续步骤中使用。
您可以使用 Orchestrator CLI 保护配置选项解密任何受保护的应用程序配置部分。您只需使用已更改或添加且在 Automation Suite 中仍然相关的设置。
appsettings.json
文件,如以下示例所示:
{
"ExampleSetting.Enabled": true,
"ExampleSetting.Type": "BasicExample",
"ExampleSetting.Count": 3
}
{
"ExampleSetting.Enabled": true,
"ExampleSetting.Type": "BasicExample",
"ExampleSetting.Count": 3
}
决定存储迁移所需的内容,以及当前的存储配置是否保持不变,或者是否让 Automation Suite 为您管理存储。Automation Suite 提供了将 Blob 存储在 Ceph 中的选项,该选项可用于所有 Orchestrator Pod。在迁移的情况下,必须将现有文件复制到当前 Blob 存储。
rclone
等实用程序将数据复制到 Orchestrator。 如果您使用 Ceph,则不需要其他配置,因为这是默认选项。
Storage.Location
键,从当前的 Orchestrator 配置中检索与 Windows 网络共享的连接数据。由于 Automation Suite 在 Linux 计算机上运行,因此您不能依赖集成身份验证来访问网络共享,而是需要可以访问它的帐户的凭据。
Storage.Location
和 Storage.Type
设置添加到 appsettings.json
中。
您可以对 NLog 进行以下自定义:
- 更改现有目标
- 添加新目标
- 添加 NLog 扩展程序
查看配置文件的 NLog 部分,并构建 NLog 自定义配置。要在 Elasticsearch 中启用机器人日志存储,您可以提供用户名、密码和 URI 作为 Automation Suite 参数,然后系统会自动配置目标。要为机器人日志启用自定义方案,您需要手动配置目标。
如果需要 NLog 扩展程序,请创建一个包含所有扩展程序及其依赖项的文件夹。
nlogextensions
。默认情况下,Orchestrator 加载以下扩展程序,因此您无需将它们包含在文件夹或 NLog 配置中:
NLog.Targets.ElasticSearch
UiPath.Orchestrator.Logs.Elasticsearch
Microsoft.ApplicationInsights.NLogTarget
NLog.Extensions.AzureEventHub
NLog.Targets.ElasticSearch
UiPath.Orchestrator.Logs.Elasticsearch
Microsoft.ApplicationInsights.NLogTarget
NLog.Extensions.AzureEventHub
nlog.custom.config
文件:扩展程序、目标和规则。
assemblyFile
指定扩展程序集的一系列项目,以及程序集相对于 nlogextensions
文件夹的路径。
/opt/app-root/app/nlog.config.json
位置。
nlog.custom.config
文件:
{
"NLog": {
"autoReload": false,
"throwConfigExceptions": false,
"internalLogLevel": "Warn",
"internalLogToConsole": true,
"default-wrapper": {
"type": "UiPrettyExceptionWrapper"
},
"targets": {
"robotElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "robotElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "${event-properties:item=indexName}-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${message}",
"excludedProperties": "agentSessionId,tenantId,indexName"
}
},
"serverElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "serverElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "serverdiagnostics-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${machinename} ${message}"
}
},
"database": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 50,
"timeToSleepBetweenBatches": 1,
"optimizeBufferReuse": true,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"isolationLevel": "ReadCommitted",
"commandText": "INSERT INTO dbo.Logs (OrganizationUnitId, TenantId, TimeStamp, Level, WindowsIdentity, ProcessName, JobKey, Message, RawMessage, RobotName, MachineId, UserKey, HostMachineName) VALUES (@organizationUnitId, @tenantId, @timeStamp, @level, @windowsIdentity, @processName, @jobId, @message, @rawMessage, @robotName, @machineId, @userKey, @hostMachineName)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@userKey",
"layout": "${event-properties:item=userKey}"
},
{
"name": "@hostMachineName",
"layout": "${event-properties:item=machineName}"
}
]
}
},
"monitoring": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"commandText": "insert into stats.ErrorLogs (OrganizationUnitId, TenantId, TimeStamp, CorrelationId, Source, Level, RobotId, ProcessName, JobKey, QueueDefinitionId, Message) values (@organizationUnitId, @tenantId, @timestamp, @correlationId, @logSource, @level, @robotId, @processName, @jobId, @queueId, @message)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timestamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@correlationId",
"layout": "${event-properties:item=Correlation}"
},
{
"name": "@logSource",
"layout": "${event-properties:item=logSource}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@robotId",
"layout": "${event-properties:item=robotId}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@queueId",
"layout": "${event-properties:item=queueId}"
},
{
"name": "@message",
"layout": "${message}"
}
]
}
},
"insightsRobotLogs": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Insights}",
"keepConnection": "true",
"commandText": "insert into dbo.RobotLogs (OrganizationUnitId, TenantId, TimeStamp, WindowsIdentity, ProcessName, JobKey, RawMessage, RobotName, MachineId, Message, LevelOrdinal, NumCustomFields) values (@organizationUnitId, @tenantId, @timeStamp, @windowsIdentity, @processName, @jobId, @rawMessage, @robotName, @machineId, @message, @levelOrdinal, @numCustomFields)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@levelOrdinal",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@numCustomFields",
"layout": "${ui-robot-logs-num-custom-fields}"
}
]
}
},
"stdout": {
"type": "Console",
"layout": {
"type": "JsonLayout",
"includeAllProperties": true,
"Attributes": [
{
"name": "ts",
"layout": "${longdate}"
},
{
"name": "traceId",
"layout": "${aspnet-TraceIdentifier}"
},
{
"name": "level",
"layout": "${level:upperCase=true}"
},
{
"name": "logger",
"layout": "${logger}"
},
{
"name": "message",
"layout": "${message}"
},
{
"name": "exception",
"layout": "${onexception:${ui-pretty-exception}}"
}
]
}
}
},
"rules": {
"10_Robot_Insights": {
"logger": "Robot.*",
"ruleName": "insightsRobotLogsRule",
"minLevel": "Info",
"writeTo": "insightsRobotLogs",
"enabled": false,
"final": false,
"filterDefaultAction": "Log"
},
"20_Robot_Primary": {
"logger": "Robot.*",
"ruleName": "primaryRobotLogsTarget",
"writeTo": "database",
"minLevel": "Trace",
"maxLevel": "Fatal",
"final": true
},
"30_Business_Exceptions": {
"logger": "BusinessException.*",
"minLevel": "Info",
"writeTo": "",
"enabled": true,
"final": true
},
"40_Monitoring": {
"logger": "Monitoring.*",
"minLevel": "Warn",
"maxLevel": "Fatal",
"writeTo": "monitoring",
"final": true
},
"50_Quartz": {
"logger": "Quartz.*",
"minLevel": "Warn",
"writeTo": "stdout",
"final": true
},
"60_Quartz_Blackhole": {
"logger": "Quartz.*",
"maxLevel": "Warn",
"writeTo": "",
"final": true
},
"70_Final": {
"logger": "*",
"minLevel": "Info",
"maxLevel": "Fatal",
"writeTo": "stdout",
"final": false
}
}
}
}
{
"NLog": {
"autoReload": false,
"throwConfigExceptions": false,
"internalLogLevel": "Warn",
"internalLogToConsole": true,
"default-wrapper": {
"type": "UiPrettyExceptionWrapper"
},
"targets": {
"robotElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "robotElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "${event-properties:item=indexName}-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${message}",
"excludedProperties": "agentSessionId,tenantId,indexName"
}
},
"serverElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "serverElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "serverdiagnostics-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${machinename} ${message}"
}
},
"database": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 50,
"timeToSleepBetweenBatches": 1,
"optimizeBufferReuse": true,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"isolationLevel": "ReadCommitted",
"commandText": "INSERT INTO dbo.Logs (OrganizationUnitId, TenantId, TimeStamp, Level, WindowsIdentity, ProcessName, JobKey, Message, RawMessage, RobotName, MachineId, UserKey, HostMachineName) VALUES (@organizationUnitId, @tenantId, @timeStamp, @level, @windowsIdentity, @processName, @jobId, @message, @rawMessage, @robotName, @machineId, @userKey, @hostMachineName)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@userKey",
"layout": "${event-properties:item=userKey}"
},
{
"name": "@hostMachineName",
"layout": "${event-properties:item=machineName}"
}
]
}
},
"monitoring": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"commandText": "insert into stats.ErrorLogs (OrganizationUnitId, TenantId, TimeStamp, CorrelationId, Source, Level, RobotId, ProcessName, JobKey, QueueDefinitionId, Message) values (@organizationUnitId, @tenantId, @timestamp, @correlationId, @logSource, @level, @robotId, @processName, @jobId, @queueId, @message)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timestamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@correlationId",
"layout": "${event-properties:item=Correlation}"
},
{
"name": "@logSource",
"layout": "${event-properties:item=logSource}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@robotId",
"layout": "${event-properties:item=robotId}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@queueId",
"layout": "${event-properties:item=queueId}"
},
{
"name": "@message",
"layout": "${message}"
}
]
}
},
"insightsRobotLogs": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Insights}",
"keepConnection": "true",
"commandText": "insert into dbo.RobotLogs (OrganizationUnitId, TenantId, TimeStamp, WindowsIdentity, ProcessName, JobKey, RawMessage, RobotName, MachineId, Message, LevelOrdinal, NumCustomFields) values (@organizationUnitId, @tenantId, @timeStamp, @windowsIdentity, @processName, @jobId, @rawMessage, @robotName, @machineId, @message, @levelOrdinal, @numCustomFields)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@levelOrdinal",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@numCustomFields",
"layout": "${ui-robot-logs-num-custom-fields}"
}
]
}
},
"stdout": {
"type": "Console",
"layout": {
"type": "JsonLayout",
"includeAllProperties": true,
"Attributes": [
{
"name": "ts",
"layout": "${longdate}"
},
{
"name": "traceId",
"layout": "${aspnet-TraceIdentifier}"
},
{
"name": "level",
"layout": "${level:upperCase=true}"
},
{
"name": "logger",
"layout": "${logger}"
},
{
"name": "message",
"layout": "${message}"
},
{
"name": "exception",
"layout": "${onexception:${ui-pretty-exception}}"
}
]
}
}
},
"rules": {
"10_Robot_Insights": {
"logger": "Robot.*",
"ruleName": "insightsRobotLogsRule",
"minLevel": "Info",
"writeTo": "insightsRobotLogs",
"enabled": false,
"final": false,
"filterDefaultAction": "Log"
},
"20_Robot_Primary": {
"logger": "Robot.*",
"ruleName": "primaryRobotLogsTarget",
"writeTo": "database",
"minLevel": "Trace",
"maxLevel": "Fatal",
"final": true
},
"30_Business_Exceptions": {
"logger": "BusinessException.*",
"minLevel": "Info",
"writeTo": "",
"enabled": true,
"final": true
},
"40_Monitoring": {
"logger": "Monitoring.*",
"minLevel": "Warn",
"maxLevel": "Fatal",
"writeTo": "monitoring",
"final": true
},
"50_Quartz": {
"logger": "Quartz.*",
"minLevel": "Warn",
"writeTo": "stdout",
"final": true
},
"60_Quartz_Blackhole": {
"logger": "Quartz.*",
"maxLevel": "Warn",
"writeTo": "",
"final": true
},
"70_Final": {
"logger": "*",
"minLevel": "Info",
"maxLevel": "Fatal",
"writeTo": "stdout",
"final": false
}
}
}
}
nlogextensions
将复制到对象存储库中众所周知的插件位置。Orchestrator 配置程序工具可以自动执行此操作,同时还可以更新 NLog 配置。脚本会自动更改 nlog.custom.config
,以便为扩展程序数组中的每个程序集文件添加 /var/orchestrator/plugins/nlog/
前缀(如果尚未添加前缀)。
您可以将凭据存储的自定义插件迁移到 Automation Suite。为此,请更新配置映射中的配置,并将插件程序集复制到相应的对象存储桶。
- 插件必须在 Linux 上运行。
- 除
/tmp
外,插件不得写入任何存储空间。
以下凭据存储插件会自动部署到 Automation Suite 中的 Orchestrator:
UiPath.Orchestrator.AzureKeyVault.SecureStore.dll
-
UiPath.Orchestrator.SecureStore.CyberArkCCP.dll
securestoreplugins
。
appsettings.json
文件中添加凭据存储设置,如下所示:
-
要禁用默认插件,请在
appsettings.json
中添加具有空字符串值的配置Plugins.SecureStores.Default
; -
将所有自定义插件添加到
Plugins.SecureStores
设置中,并在appsettings.json
中用;
分隔; -
添加任何自定义插件设置,如下所示:
Plugins.SecureStores.<<FriendlyName>>.<<SettingName>>
。
securestoreplugins
插件文件夹复制到对象存储库中众所周知的插件位置。
Plugins.SecureStores
中的程序集从此文件夹加载。
Plugins.SecureStore.Default
中的程序集从 Orchestrator 应用程序文件夹中的插件文件夹加载。
默认情况下,Orchestrator 在安装时会生成一个加密密钥,用于数据库中的敏感信息。如果要在新的 Orchestrator 部署中重用数据库,则必须迁移此密钥。
要检索加密密钥,请执行以下步骤:
- 按需加密
UiPath.Orchestrator.dll.config
文件的secureAppSettings
部分。有关详情,请参阅加密 UiPath.Orchestrator.dll.config 部分。 - 从
UiPath.Orchestrator.dll.config
中检索加密密钥。有关详细信息,请参阅加密密钥。
加密密钥证书安装在 Windows 证书存储中。您必须向 Automation Suite 环境提供证书,以便 Orchestrator Pod 可以使用该证书。
CertificatesStoreLocation
和 Azure.KeyVault.CertificateThumbprint
设置,但您可以根据需要使用 CertificatePassword
。
采取以下步骤:
- 查看 appSettings 并获取
AzureKeyVault.*
设置。 - 存储
Azure.KeyVault.VaultAddress
、Azure.KeyVault.ClientId
和Azure.KeyVault.DirectoryId
以备后用。 - 检索证书,必要时检索证书密码。