- 概要
- 要件
- インストール前
- インストール
- インストール後
- 移行とアップグレード
- 監視とアラート機能
- クラスターの管理
- 製品固有の設定
- トラブルシューティング
- Azure Government への接続に失敗したため、バックアップのセットアップが機能しない
- カスタム ノード taint を有効化すると uipath 名前空間のポッドがスタックする
- プロキシ設定がある場合に Automation Hub と Apps を起動できない
- Velero のバックアップが FailedValidation エラーで失敗する
- 外部シークレットのトラブルシューティング
- Temporal as a Service のトラブルシューティング
- TLS 証明書の検証が有効化されていると、AI Center と Document Understanding ポッドの起動に失敗する
- TLS 証明書の検証エラー
- Fluentd では、IPv6 環境ではログはエクスポートされません
- デスクトップ版の Studio では Integration Service のコネクタとアクティビティを読み込めない
- 手動による ArgoCD ネットワーク ポリシーの軽減策 (GHSA-47m3-95c7-g2g8)
- uipathctl で作成されたワークロードのリソース要求と制限を設定する
Azure Key Vault をシークレットストアとして設定する
EKS/AKS でサービス プリンシパルまたはワークロード ID の認証を使用して、Azure Key Vault をシークレットストアとして設定します。
Azure Key Vault をシークレットストアとして設定するには、以下のいずれかの方法を使用します。
- サービス プリンシパル認証
- Workload Identity の認証
デフォルトでは、すべての機密データは input.jsonで定義されます。このデータは、次の 2 つの部分に分けることができます。
input.json- 構成データのみが含まれます。- Azure Key Vault - 資格情報を安全に保存します。
証明書のパスや証明書関連の資格情報を secretstore の一部として保存することはできません。
シークレット ストアを設定する前に、 input.json で参照されるすべての資格情報が Azure Key Vault にシークレットとして存在している必要があります。参照されている資格情報が Azure Key Vault に存在しない場合、インストールは失敗します。
サービス プリンシパル認証を使用する
サービス プリンシパル認証を使用して Azure Key Vault を SecretStore として設定するには、以下の手順を実行します。
-
資格情報が Azure Key Vault に格納されていること
uipathctl識別するには、次の例に示すように、secretstore セクションをinput.jsonに追加する必要があります。"secret_store": { "enabled": true, "provider_configs": [ { "type": "azure", "credentials_secret_name": "azure-service-principal-secret", "refresh_interval": "5m", "name": "azure-secret-store", "environment_type": "PublicCloud", "azure_kv": { "vault_url": "https://eso-azure-kv.vault.azure.net/", "tenant_id": "00000000-0000-0000-0000-000000000000" } } ] }"secret_store": { "enabled": true, "provider_configs": [ { "type": "azure", "credentials_secret_name": "azure-service-principal-secret", "refresh_interval": "5m", "name": "azure-secret-store", "environment_type": "PublicCloud", "azure_kv": { "vault_url": "https://eso-azure-kv.vault.azure.net/", "tenant_id": "00000000-0000-0000-0000-000000000000" } } ] } -
次の例に示すように、Azure サービス プリンシパルの資格情報を格納する Kubernetes シークレットを作成します。
apiVersion: v1 kind: Secret metadata: name: azure-service-principal-secret type: Opaque stringData: clientId: <client-id> clientSecret: <client-secret>apiVersion: v1 kind: Secret metadata: name: azure-service-principal-secret type: Opaque stringData: clientId: <client-id> clientSecret: <client-secret> -
次のコマンドを使用して、
uipath名前空間にシークレットをデプロイします。kubectl apply -f azure-service-principal-secret -n uipathkubectl apply -f azure-service-principal-secret -n uipath -
次の形式を使用して、
input.jsonの資格情報の値を更新し、Azure Key Vault に格納されているシークレットを参照します。vault/<vault-name>/<key-stored-in-the-vault>vault/<vault-name>/<key-stored-in-the-vault>場所:
vault- static キーワードです。vault-name-secret_store.provider_configs[i].nameの値です (例:azure-secret-store)。key-stored-in-the-vault- Azure Key Vault に格納されているシークレットの名前です。変更前の資格情報は次のようになります。
"admin_username": "admin", "admin_password": "password","admin_username": "admin", "admin_password": "password",Azure Key Vault を参照するように更新すると、次のようになります。
"admin_username": "vault/azure-secret-store/admin-username-1234", "admin_password": "vault/azure-secret-store/admin-password-1234","admin_username": "vault/azure-secret-store/admin-username-1234", "admin_password": "vault/azure-secret-store/admin-password-1234",次の図は、Azure Key Vault に格納されているシークレットを示しています。
次の例は、Azure Key Vault に格納されている資格情報を使用した input.json 構成を示しています。
{
"admin_password": "vault/azure-secret-store/admin-password-1234",
"admin_username": "vault/azure-secret-store/admin-username-1234",
"apps": {
"enabled": true,
"external_object_storage": {
"account_key": "vault/azure-secret-store/apps-external-object-storage-account-key-1234",
"account_name": "as-storage-account",
"azure_fqdn_suffix": "core.windows.net",
"bucket_name": "uipath-as-platform",
"create_bucket": true,
"enabled": true,
"region": "us-east-1",
"storage_type": "azure",
"use_instance_profile": true
}
},
"exclude_components": [],
"external_object_storage": {
"account_key": "vault/azure-secret-store/external-object-storage-account-key-1234",
"account_name": "as-storage-account",
"azure_fqdn_suffix": "core.windows.net",
"create_bucket": true,
"enabled": true,
"region": "us-east-1",
"storage_type": "azure",
"use_instance_profile": true
},
"fabric": {
"redis": {
"hostname": "redis-cache.mycompany.com",
"password": "vault/azure-secret-store/fabric-redis-password-1234",
"port": 6380,
"tls": true
}
},
"fqdn": "automationsuite.mycompany.com",
"infra": {
"docker_registry": {}
},
"ingress": {
"gateway_selector": {
"istio": "ingressgateway"
},
"service_annotations": {
"service.beta.kubernetes.io/azure-load-balancer-internal": "false",
"service.beta.kubernetes.io/azure-load-balancer-ipv4": "ip-address"
}
},
"install_type": "online",
"integrationservices": {
"enabled": true,
"external_object_storage": {
"bucket_name": "uipath-as-platform"
}
},
"istioMinProtocolVersion": "TLSV1_3",
"kubernetes_distribution": "aks",
"orchestrator": {
"enabled": true,
"external_object_storage": {
"account_key": "vault/azure-secret-store/orchestrator-external-object-storage-account-key-1234",
"account_name": "os-storage-account",
"azure_fqdn_suffix": "core.windows.net",
"bucket_name": "uipath-as-orchestrator",
"create_bucket": true,
"enabled": true,
"region": "us-east-1",
"storage_type": "azure",
"use_instance_profile": true
},
"sql_connection_str": "vault/azure-secret-store/orchestrator-sql-connection-str-1234",
"testautomation": {
"enabled": true
},
"updateserver": {
"enabled": true
}
},
"platform": {
"enabled": true
},
"pod_identity": {
"aks_managed_identity_client_id": "client-id",
"enabled": true
},
"postgresql_connection_string_template_sqlalchemy_pyodbc": "vault/azure-secret-store/postgresql-connection-string-template-sqlalchemy-pyodbc-1234",
"profile": "ha",
"proxy": {
"enabled": true,
"http_proxy": "\u003c\u003chttp://\u003cPROXY-SERVER-IP\u003e\u003e:\u003cPROXY-PORT\u003e",
"https_proxy": "\u003c\u003chttp://\u003cPROXY-SERVER-IP\u003e\u003e:\u003cPROXY-PORT\u003e",
"no_proxy": "paste list from Configuring the cluster section"
},
"registries": {
"docker": {
"password": "",
"pull_secret_name": "registry-credentials",
"url": "registry.uipath.com",
"username": ""
},
"helm": {
"password": "",
"url": "registry.uipath.com",
"username": ""
}
},
"secret_store": {
"enabled": true,
"secret_name": "",
"provider_configs": [
{
"type": "azure",
"credentials_secret_name": "azure-service-principal-secret",
"is_default": true,
"refresh_interval": "5m",
"name": "azure-secret-store",
"azure_kv": {
"vault_url": "https://eso-azure-kv.vault.azure.net/",
"tenant_id": "00000000-0000-0000-0000-000000000000",
"managed_identity_id": null
},
"aws_kv": {
"role_arn": null
},
"hashicorp_kv": {}
}
]
},
"snapshot": {
"aks_infra_resource_group": "MC_ci-asaks4002399_ci-asaks4002399_eastus",
"enabled": true,
"external_object_storage": {
"account_name": "storaccid2547865",
"auth_mode": "ServicePrincipal",
"bucket_name": "uipath-backup",
"client_id": "1fbd7d95-5f8c-4f70-90a6-fdf20310d10e",
"client_secret": "vault/azure-secret-store/snapshot-external-object-storage-client-secret-1234",
"cloud_name": "AzurePublicCloud",
"resource_group": "ci-asaks4002399",
"storage_type": "azure",
"subscription_id": "b65b0225-ce9b-4a79-9dd9-c00071d40d64",
"tenant_id": "00000000-0000-0000-0000-000000000000"
}
},
"sql_connection_string_template": "vault/azure-secret-store/sql-connection-string-template-1234",
"sql_connection_string_template_jdbc": "vault/azure-secret-store/sql-connection-string-template-jdbc-1234",
"sql_connection_string_template_odbc": "vault/azure-secret-store/sql-connection-string-template-odbc-1234",
"sql_connection_string_template_sqlalchemy_pyodbc": "vault/azure-secret-store/sql-connection-string-template-sqlalchemy-pyodbc-1234",
"storage_class": "managed-premium",
"storage_class_single_replica": "azurefile-csi",
"test_manager": {
"enabled": true,
"external_object_storage": {
"bucket_name": "uipath-as-platform"
}
},
"tolerations": []
}
{
"admin_password": "vault/azure-secret-store/admin-password-1234",
"admin_username": "vault/azure-secret-store/admin-username-1234",
"apps": {
"enabled": true,
"external_object_storage": {
"account_key": "vault/azure-secret-store/apps-external-object-storage-account-key-1234",
"account_name": "as-storage-account",
"azure_fqdn_suffix": "core.windows.net",
"bucket_name": "uipath-as-platform",
"create_bucket": true,
"enabled": true,
"region": "us-east-1",
"storage_type": "azure",
"use_instance_profile": true
}
},
"exclude_components": [],
"external_object_storage": {
"account_key": "vault/azure-secret-store/external-object-storage-account-key-1234",
"account_name": "as-storage-account",
"azure_fqdn_suffix": "core.windows.net",
"create_bucket": true,
"enabled": true,
"region": "us-east-1",
"storage_type": "azure",
"use_instance_profile": true
},
"fabric": {
"redis": {
"hostname": "redis-cache.mycompany.com",
"password": "vault/azure-secret-store/fabric-redis-password-1234",
"port": 6380,
"tls": true
}
},
"fqdn": "automationsuite.mycompany.com",
"infra": {
"docker_registry": {}
},
"ingress": {
"gateway_selector": {
"istio": "ingressgateway"
},
"service_annotations": {
"service.beta.kubernetes.io/azure-load-balancer-internal": "false",
"service.beta.kubernetes.io/azure-load-balancer-ipv4": "ip-address"
}
},
"install_type": "online",
"integrationservices": {
"enabled": true,
"external_object_storage": {
"bucket_name": "uipath-as-platform"
}
},
"istioMinProtocolVersion": "TLSV1_3",
"kubernetes_distribution": "aks",
"orchestrator": {
"enabled": true,
"external_object_storage": {
"account_key": "vault/azure-secret-store/orchestrator-external-object-storage-account-key-1234",
"account_name": "os-storage-account",
"azure_fqdn_suffix": "core.windows.net",
"bucket_name": "uipath-as-orchestrator",
"create_bucket": true,
"enabled": true,
"region": "us-east-1",
"storage_type": "azure",
"use_instance_profile": true
},
"sql_connection_str": "vault/azure-secret-store/orchestrator-sql-connection-str-1234",
"testautomation": {
"enabled": true
},
"updateserver": {
"enabled": true
}
},
"platform": {
"enabled": true
},
"pod_identity": {
"aks_managed_identity_client_id": "client-id",
"enabled": true
},
"postgresql_connection_string_template_sqlalchemy_pyodbc": "vault/azure-secret-store/postgresql-connection-string-template-sqlalchemy-pyodbc-1234",
"profile": "ha",
"proxy": {
"enabled": true,
"http_proxy": "\u003c\u003chttp://\u003cPROXY-SERVER-IP\u003e\u003e:\u003cPROXY-PORT\u003e",
"https_proxy": "\u003c\u003chttp://\u003cPROXY-SERVER-IP\u003e\u003e:\u003cPROXY-PORT\u003e",
"no_proxy": "paste list from Configuring the cluster section"
},
"registries": {
"docker": {
"password": "",
"pull_secret_name": "registry-credentials",
"url": "registry.uipath.com",
"username": ""
},
"helm": {
"password": "",
"url": "registry.uipath.com",
"username": ""
}
},
"secret_store": {
"enabled": true,
"secret_name": "",
"provider_configs": [
{
"type": "azure",
"credentials_secret_name": "azure-service-principal-secret",
"is_default": true,
"refresh_interval": "5m",
"name": "azure-secret-store",
"azure_kv": {
"vault_url": "https://eso-azure-kv.vault.azure.net/",
"tenant_id": "00000000-0000-0000-0000-000000000000",
"managed_identity_id": null
},
"aws_kv": {
"role_arn": null
},
"hashicorp_kv": {}
}
]
},
"snapshot": {
"aks_infra_resource_group": "MC_ci-asaks4002399_ci-asaks4002399_eastus",
"enabled": true,
"external_object_storage": {
"account_name": "storaccid2547865",
"auth_mode": "ServicePrincipal",
"bucket_name": "uipath-backup",
"client_id": "1fbd7d95-5f8c-4f70-90a6-fdf20310d10e",
"client_secret": "vault/azure-secret-store/snapshot-external-object-storage-client-secret-1234",
"cloud_name": "AzurePublicCloud",
"resource_group": "ci-asaks4002399",
"storage_type": "azure",
"subscription_id": "b65b0225-ce9b-4a79-9dd9-c00071d40d64",
"tenant_id": "00000000-0000-0000-0000-000000000000"
}
},
"sql_connection_string_template": "vault/azure-secret-store/sql-connection-string-template-1234",
"sql_connection_string_template_jdbc": "vault/azure-secret-store/sql-connection-string-template-jdbc-1234",
"sql_connection_string_template_odbc": "vault/azure-secret-store/sql-connection-string-template-odbc-1234",
"sql_connection_string_template_sqlalchemy_pyodbc": "vault/azure-secret-store/sql-connection-string-template-sqlalchemy-pyodbc-1234",
"storage_class": "managed-premium",
"storage_class_single_replica": "azurefile-csi",
"test_manager": {
"enabled": true,
"external_object_storage": {
"bucket_name": "uipath-as-platform"
}
},
"tolerations": []
}
Azure クラウド環境を設定する
environment_type フィールドには、Key Vault へのアクセスに使用する Azure クラウド環境を指定します。このフィールドは任意で、既定値は PublicCloudです。
次の値がサポートされています。
| 値 (Value) | 説明 |
|---|---|
PublicCloud | Azure パブリック クラウド (既定) |
USGovernmentCloud | Azure US Government クラウド |
ChinaCloud | Azure China クラウド |
GermanCloud | Azure Germany クラウド |
vault_urlは Azure クラウド環境と一致する必要があります。例えば:
- パブリック クラウド:
https://<vault-name>.vault.azure.net/ - 米国政府:
https://<vault-name>.vault.usgovcloudapi.net/ - 中国:
https://<vault-name>.vault.azure.cn/ - ドイツ:
https://<vault-name>.vault.microsoftazure.de/
次の例は、input.jsonの [environment_type] フィールドを設定する方法を示しています。
"secret_store": {
"enabled": true,
"provider_configs": [
{
"type": "azure",
"credentials_secret_name": "azure-service-principal-secret",
"refresh_interval": "5m",
"name": "azure-secret-store",
"environment_type": "USGovernmentCloud",
"azure_kv": {
"vault_url": "https://eso-azure-kv.vault.azure.net/",
"tenant_id": "00000000-0000-0000-0000-000000000000"
}
}
]
}
"secret_store": {
"enabled": true,
"provider_configs": [
{
"type": "azure",
"credentials_secret_name": "azure-service-principal-secret",
"refresh_interval": "5m",
"name": "azure-secret-store",
"environment_type": "USGovernmentCloud",
"azure_kv": {
"vault_url": "https://eso-azure-kv.vault.azure.net/",
"tenant_id": "00000000-0000-0000-0000-000000000000"
}
}
]
}
Workload Identity 認証を使用する
Azure Key Vault は、サービス プリンシパルの代わりに Workload Identity 認証を使用してシークレットストアとして設定できます。
ワークロード ID を使用すると、Kubernetes ポッドは Kubernetes シークレットに資格情報を格納せずに Azure リソースにアクセスできます。
設定に応じて、すべてのコンポーネントに適用されるグローバル ワークロード ID を使用するか、次のように Azure Key Vault 専用の別のワークロード ID を設定できます。
- グローバル ワークロード ID を使用する
"pod_identity": { "aks_managed_identity_client_id": "managed-identity-id", "enabled": true }, "secret_store": { "enabled": true, "provider_configs": [ { "type": "azure", "refresh_interval": "5m", "name": "azure-secret-store", "azure_kv": { "vault_url": "https://eso-azure-kv.vault.azure.net/" } } ] }"pod_identity": { "aks_managed_identity_client_id": "managed-identity-id", "enabled": true }, "secret_store": { "enabled": true, "provider_configs": [ { "type": "azure", "refresh_interval": "5m", "name": "azure-secret-store", "azure_kv": { "vault_url": "https://eso-azure-kv.vault.azure.net/" } } ] } - Azure Key Vault に個別のワークロード ID を使用する
"secret_store": { "enabled": true, "provider_configs": [ { "type": "azure", "refresh_interval": "5m", "name": "azure-secret-store", "azure_kv": { "vault_url": "https://eso-azure-kv.vault.azure.net/", "managed_identity_id": "managed-identity-id" } } ] }"secret_store": { "enabled": true, "provider_configs": [ { "type": "azure", "refresh_interval": "5m", "name": "azure-secret-store", "azure_kv": { "vault_url": "https://eso-azure-kv.vault.azure.net/", "managed_identity_id": "managed-identity-id" } } ] }
外部シークレットのマネージド ID を設定する オペレーター
外部 Secrets Operator がワークロード ID を使用して Azure Key Vault にアクセスできるようにするには、以下の手順を実行します。
-
「ワークロード ID の構成」で説明されている手順を実行して、必要なサービス アカウントにフェデレーション資格情報を提供します。
-
Workload Identity 設定のステップ 3 に加えて、以下のコマンドを実行して、External Secrets Operator のフェデレーション認証情報を作成します。
create_federated_credentials "uipath" "external-secrets"create_federated_credentials "uipath" "external-secrets" -
必要なロールをマネージド ID に割り当てて、Azure Key Vault 内のシークレットにアクセスできるようにします。
# Export the following variables with your correct values export SUBSCRIPTION_ID="<your-subscription-id>" export TARGET_RG="<your-resource-group-name>" export VAULT_NAME="<your-key-vault-name>" export USER_ASSIGNED_MANAGED_IDENTITY_OBJECT_ID="<your-managed-identity-object-id>" # Assign Key Vault roles to the managed identity az role assignment create --assignee $USER_ASSIGNED_MANAGED_IDENTITY_OBJECT_ID --role "Key Vault Secrets User" --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$TARGET_RG/providers/Microsoft.KeyVault/vaults/$VAULT_NAME" az role assignment create --assignee $USER_ASSIGNED_MANAGED_IDENTITY_OBJECT_ID --role "Key Vault Reader" --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$TARGET_RG/providers/Microsoft.KeyVault/vaults/$VAULT_NAME"# Export the following variables with your correct values export SUBSCRIPTION_ID="<your-subscription-id>" export TARGET_RG="<your-resource-group-name>" export VAULT_NAME="<your-key-vault-name>" export USER_ASSIGNED_MANAGED_IDENTITY_OBJECT_ID="<your-managed-identity-object-id>" # Assign Key Vault roles to the managed identity az role assignment create --assignee $USER_ASSIGNED_MANAGED_IDENTITY_OBJECT_ID --role "Key Vault Secrets User" --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$TARGET_RG/providers/Microsoft.KeyVault/vaults/$VAULT_NAME" az role assignment create --assignee $USER_ASSIGNED_MANAGED_IDENTITY_OBJECT_ID --role "Key Vault Reader" --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$TARGET_RG/providers/Microsoft.KeyVault/vaults/$VAULT_NAME"
外部 OCI 準拠プライベート レジストリを設定する
プライベート レジストリを使用する際に、レジストリの資格情報を input.jsonで設定しない場合は、次の例に示すように、代わりに Kubernetes シークレットとして指定できます。
"registries": {
"docker": {
"pull_secret_name": "registry-credentials",
"url": "sfbrdevhelmweacr.azurecr.io"
}
}
"registries": {
"docker": {
"pull_secret_name": "registry-credentials",
"url": "sfbrdevhelmweacr.azurecr.io"
}
}
次の例に示すように、レジストリの資格情報を格納する Kubernetes シークレットを作成します。
apiVersion: v1
kind: Secret
metadata:
name: registry-credentials
type: Opaque
data:
url: base64Encode(sfbrdevhelmweacr.azurecr.io)
username: base64Encode(<registry-username>)
password: base64Encode(<registry-password>)
apiVersion: v1
kind: Secret
metadata:
name: registry-credentials
type: Opaque
data:
url: base64Encode(sfbrdevhelmweacr.azurecr.io)
username: base64Encode(<registry-username>)
password: base64Encode(<registry-password>)
次のコマンドを使用して、 uipath 名前空間にシークレットを適用します。
kubectl apply -f registry-credentials.yaml -n uipath
kubectl apply -f registry-credentials.yaml -n uipath