UiPath Documentation
automation-suite
2.2510
true
OpenShift 上的 Automation Suite 安装指南
重要 :
请注意,此内容已使用机器翻译进行了部分本地化。 新发布内容的本地化可能需要 1-2 周的时间才能完成。

外部密码故障排除

对 OpenShift 上的 Automation Suite 中的 External Secrets Operator 进行故障排除。

概述​

本节提供故障排除步骤,用于解决与 Automation Suite 中的外部 Secrets Orchestrator 和密码存储配置相关的问题。

要识别并解决集群和外部密码提供程序之间的同步或身份验证问题,请按照本节中描述的步骤操作。

验证“外部密码”Pod 状态和日志​

首先检查外部密码运算符 Pod 是否正常运行。

如果 Pod 未处于“正在运行”状态或显示重复重新启动,请查看其日志是否存在任何与身份验证、权限或错误配置相关的错误。

要检查 “外部密码”Pod 的状态并查看其日志,请运行:

kubectl get pods -A | grep external-secrets
kubectl logs -f <pod-name> -n <namespace>
kubectl get pods -A | grep external-secrets
kubectl logs -f <pod-name> -n <namespace>

例如,要查看来自特定 Pod 的日志,请运行:

kubectl logs -f external-secrets-7d8c9b5f9f-abc12 -n external-secrets
kubectl logs -f external-secrets-7d8c9b5f9f-abc12 -n external-secrets

检查密码存储库和外部密码对象​

如果 Pod 运行正确,请验证 SecretStore 和 ExternalSecret 资源是否已正确配置和同步。

这些资源定义了如何检索和存储外部密码,因此任何错误配置都可能阻止成功同步。

  • 检查“外部密码”资源首先查看集群中的“外部密码”对象。这有助于确认资源已正确链接到其密码存储,并且同步状态为有效。

    • 要显示并检查“外部密码”资源,请运行以下命令:
      kubectl get externalsecrets -A
      kubectl describe externalsecret <externalsecret-name> -n <namespace>
      kubectl get externalsecrets -A
      kubectl describe externalsecret <externalsecret-name> -n <namespace>
      
    • 例如,要查看uipath命名空间中的特定“外部密码”,请执行以下操作:
      kubectl describe externalsecret azure-secret-store -n uipath
      kubectl describe externalsecret azure-secret-store -n uipath
      
  • 检查密码存储资源检查关联的密码存储配置。此资源定义密码提供程序(例如 Azure 密钥保险库)的连接详细信息,此处的错误可能会阻止密码同步。

    • 要查看密码存储库定义,请使用以下命令:
      kubectl get secretstores -A
      kubectl describe secretstore <secretstore-name> -n <namespace>
      kubectl get secretstores -A
      kubectl describe secretstore <secretstore-name> -n <namespace>
      
    • 例如,要检查uipath命名空间中的密码存储配置,请执行以下操作:
      kubectl describe secretstore azure-secretstore -n uipath
      kubectl describe secretstore azure-secretstore -n uipath
      
  • 检查与外部密码相关的事件审核与外部密码运算符相关的 Kubernetes 事件。这些事件可以揭示同步失败、权限问题或提供程序配置错误。

    • 要查看相关事件,请运行以下命令:
      kubectl get events -A | grep external-secrets
      kubectl get events -A | grep external-secrets
      

    在查看事件输出时,请查找:

    • “状态”部分中的错误消息
    • 指明是否为Ready: True条件
    • “事件”部分中显示警告或同步失败

验证密码存储库凭据​

如果您使用 Azure 密钥保险库作为密码提供程序,请确保凭据和配置有效且最新。

凭据不正确或权限缺失是同步失败的常见原因。

  • 身份验证凭据

    • 确认clientId 、 clientSecret和tenantId值正确无误。
    • 确保服务主体具有密钥保险库所需的权限。
  • 密钥保险库访问策略

    • 验证密码的Get和List权限。
    • 确保密钥保险库防火墙设置允许从集群进行访问。
  • 工作负载身份配置(如果适用)

    • 检查联合凭据是否配置正确。
    • 确保关联的服务帐户具有必要的注释。
  • 密钥保管库 Uri

    • 验证密码存储库配置中的vaultUrl是否正确。

    示例格式:

    https://<key-vault-name>.vault.azure.net/
    https://<key-vault-name>.vault.azure.net/
    

验证 Azure 密钥保险库服务主体权限​

如果您的部署使用服务主体,请确认其有权从 Azure 密钥保险库(只读)检索密码。

要列出服务主体可访问的密码,请运行:

az keyvault secret list --vault-name <key-vault-name>
az keyvault secret list --vault-name <key-vault-name>

验证 HashiCorp 保险库连接和身份验证​

如果您使用 HashiCorp 保险库作为密码提供程序,请验证以下内容:

  • 测试保险库服务器的可访问性确认可以从对集群具有网络访问权限的节点或 Jumphost 访问密码存储配置中的保险库服务器 URL:

    curl -sk https://<vault-server>:8200/v1/sys/health
    curl -sk https://<vault-server>:8200/v1/sys/health
    

    运行状况良好的保险库会返回包含"initialized": true和"sealed": false JSON 响应。如果命令超时或返回connection refused ,请检查集群和保险库服务器之间的网络策略和防火墙规则。

  • 验证保险库封条状态

    curl -sk https://<vault-server>:8200/v1/sys/seal-status
    curl -sk https://<vault-server>:8200/v1/sys/seal-status
    

    如果"sealed": true ,则必须先解封保险库服务器,然后 ESO 才能检索密码。

  • 测试 Kubernetes Auth 登录如果使用auth_type: kubernetes ,请验证服务帐户令牌是否可以对保险库进行身份验证。首先,从 ESO Pod 中提取令牌:

    ESO_POD=$(kubectl get pods -n uipath -l app.kubernetes.io/name=external-secrets -o jsonpath='{.items[0].metadata.name}')
    JWT=$(kubectl exec -n uipath $ESO_POD -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)
    ESO_POD=$(kubectl get pods -n uipath -l app.kubernetes.io/name=external-secrets -o jsonpath='{.items[0].metadata.name}')
    JWT=$(kubectl exec -n uipath $ESO_POD -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)
    

    然后测试登录:

    curl -sk --request POST \
      --data "{\"jwt\": \"$JWT\", \"role\": \"<vault-role>\"}" \
      https://<vault-server>:8200/v1/auth/<mount-path>/login
    curl -sk --request POST \
      --data "{\"jwt\": \"$JWT\", \"role\": \"<vault-role>\"}" \
      https://<vault-server>:8200/v1/auth/<mount-path>/login
    

    成功的响应包含client_token 。permission denied错误表示保险库角色不允许使用该服务帐户,或者 Kubernetes 身份验证方法配置错误。

  • 测试 AppRole Auth 登录如果使用auth_type: approle ,请验证 AppRole 凭据:

    curl -sk --request POST \
      --data '{"role_id": "<role-id>", "secret_id": "<secret-id>"}' \
      https://<vault-server>:8200/v1/auth/<mount-path>/login
    curl -sk --request POST \
      --data '{"role_id": "<role-id>", "secret_id": "<secret-id>"}' \
      https://<vault-server>:8200/v1/auth/<mount-path>/login
    

    如果失败,请检查 AppRole secret-id是否未过期 ( secret_id_ttl )。

  • 验证 AppRole 凭据密码是否存在

    kubectl get secret <credentials-secret-name> -n uipath -o json | jq '.data | keys'
    kubectl get secret <credentials-secret-name> -n uipath -o json | jq '.data | keys'
    

    密码必须同时包含role-id和secret-id键。

  • 使用从上述身份验证步骤获得的保险库令牌测试读取保险库 KV v2 中的密码:

    curl -sk -H "X-Vault-Token: <vault-token>" \
      https://<vault-server>:8200/v1/<kv-path>/data/<secret-path>
    curl -sk -H "X-Vault-Token: <vault-token>" \
      https://<vault-server>:8200/v1/<kv-path>/data/<secret-path>
    

    对于 KV v1,请从路径中删除/data/ 。如果响应为no value found at path ,请验证hashicorp_kv.version是否与实际引擎版本匹配。

  • 验证 KV 引擎版本确保配置中的hashicorp_kv.version与保险库中启用的实际 KV 引擎版本( v1或v2 )匹配。不匹配会产生no value found at path错误,因为 v1 和 v2 使用不同的 API 路径。

  • 验证 Kubernetes Auth 配置确保已启用保险库 Kubernetes Auth 方法,并使用正确的kubernetes_host配置。验证 Vault 角色是否允许 ESO 服务帐户(或自定义service_account_name )。

验证 AWS Secrets Manager 连接和权限​

如果您使用 AWS Secrets Manager 作为密码提供程序,请验证以下内容:

  • 验证访问密钥凭据密码是否存在

    kubectl get secret <credentials-secret-name> -n uipath -o json | jq '.data | keys'
    kubectl get secret <credentials-secret-name> -n uipath -o json | jq '.data | keys'
    

    密码必须同时包含access-key-id和secret-access-key键。

  • 测试 AWS Secrets Manager 访问权限使用访问密钥凭据,验证是否可以检索密码:

    aws secretsmanager get-secret-value \
      --secret-id <secret-name> --region <region>
    aws secretsmanager get-secret-value \
      --secret-id <secret-name> --region <region>
    
    • AccessDeniedException - IAM 用户没有secretsmanager:GetSecretValue权限。
    • ResourceNotFoundException - 密码在指定的区域中不存在。验证aws_kv.region值。
  • 检查区域配置验证aws_kv.region值与存储密码的区域匹配。区域不匹配会产生ResourceNotFoundException错误。

TLS 和 CA 证书问题​

当保险库或 AWS 端点将 HTTPS 与私有 CA 证书一起使用时,请验证以下内容:

  • 检查是否存在其他 CA 证书密码

    kubectl get secret additional-ca-certificates -n uipath
    kubectl get secret additional-ca-certificates -n uipath
    
  • 验证 CA 证书内容

    kubectl get secret additional-ca-certificates -n uipath -o jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -text -noout
    kubectl get secret additional-ca-certificates -n uipath -o jsonpath='{.data.ca\.crt}' | base64 -d | openssl x509 -text -noout
    

    检查证书未过期,以及颁发者是否与您的保险库或 AWS 端点使用的 CA 匹配。

  • 测试 TLS 握手

    curl -v https://<vault-server>:8200/v1/sys/health
    curl -v https://<vault-server>:8200/v1/sys/health
    

    如果看到SSL certificate problem: unable to get local issuer certificate ,则表示该 CA 证书不受信任。验证在input.json中是否配置了additional_ca_certs 。要使用特定 CA 证书文件进行测试,请执行以下操作:

    curl -v --cacert /path/to/ca.crt https://<vault-server>:8200/v1/sys/health
    curl -v --cacert /path/to/ca.crt https://<vault-server>:8200/v1/sys/health
    

常见配置问题​

查看以下常见问题和相应的错误消息,以帮助诊断问题。

问题可能的原因示例/错误输出
在集群中找不到密码缺少 Kubernetes 密码Warning InvalidProviderConfig 3s (x4 over 8s) secret-store cannot get Kubernetes secret "azure-service-principal-secret" from namespace "uipath": secrets "azure-service-principal-secret" not found
凭据无效客户端 ID、客户端密码或租户 ID 不正确error processing spec.data[0] (key: external-object-storage-account-key-10176524), err: azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request ... StatusCode=400
缺少密钥保险库对象Azure 密钥保险库中没有密钥external-secrets error processing spec.data[0] (key: external-object-storage-account-key), err: Secret does not exist
无法访问 HashiCorp 保险库(只读)错误的服务器 URL 或阻止访问的网络策略connection refused 或者 context deadline exceeded
保险库身份验证失败Kubernetes 服务帐户未绑定到保险库角色,或 AppRole 已过期 secret-idpermission denied
KV 版本不匹配hashicorp_kv.version 设置为v2 ,但引擎为v1 (反之亦然)no value found at path
AWS 凭据无效访问密钥 ID 或秘密访问密钥不正确InvalidClientTokenId 或者 SignatureDoesNotMatch
未找到 AWS 密码密码在配置的区域中不存在,或者区域不匹配ResourceNotFoundException

要进一步调查这些问题,请查看控制器日志或描述相关资源:

kubectl describe externalsecret <name> -n <namespace>
kubectl describe secretstore <name> -n <namespace>
kubectl describe externalsecret <name> -n <namespace>
kubectl describe secretstore <name> -n <namespace>

此页面有帮助吗?

连接

需要帮助? 支持

想要了解详细内容? UiPath Academy

有问题? UiPath 论坛

保持更新