> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/pam/it/knowledge-base/knowledge-base-articles/external-secrets-operator.md).

# External Secrets Operator

External Secrets Operator si integra con [Devolutions Server](file:///) per la gestione dei secret.

{% hint style="info" %}
I valori riportati in questa guida (ad es., `your-application-id`) sono segnaposto, li sostituisca con i valori specifici del suo ambiente.
{% endhint %}

### Autenticazione

L'autenticazione di Devolutions Server utilizza le credenziali ***Application ID*** e ***Application secret***.

#### Creazione di un'identità applicazione in Devolutions Server

1. Acceda all'interfaccia web di Devolutions Server.
2. Vada in ***Amministrazione*** – ***Identità applicazioni***.
3. Clicchi su ***Aggiungi*** (**+**) per creare una nuova applicazione.
4. Configuri l'applicazione con le autorizzazioni necessarie per accedere alle casseforti e alle voci desiderate.
5. Salvi l'***Application ID*** e l'***Application secret***.

#### Creazione del secret di Kubernetes

Crei un secret di Kubernetes contenente le credenziali di Devolutions Server utilizzando il seguente script:

```bash
kubectl create secret generic dvls-credentials \
  --from-literal=app-id="your-application-id" \
  --from-literal=app-secret="your-application-secret"
```

#### Creazione di un SecretStore

```bash
apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
  name: dvls-store
  namespace: default
spec:
  provider:
    dvls:
      serverUrl: 'https://devolutions-server.example.com'
      vault: 'my-vault'
      auth:
        secretRef:
          appId:
            name: dvls-credentials
            key: app-id
          appSecret:
            name: dvls-credentials
            key: app-secret
```

| **Campo**                  | **Descrizione**                                                                                                                                                                                                           |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `serverUrl`                | L'URL dell'istanza di Devolutions Server (ad es., `https://devolutions-server.example.com`)                                                                                                                               |
| `vault`                    | Il nome o l'UUID della cassaforte da cui recuperare i secret. Se omesso, la cassaforte deve essere specificata nella chiave del secret utilizzando il formato legacy `<vault-id>/<entry-id>`. Questo campo è facoltativo. |
| `insecure`                 | Imposti su `true` per consentire connessioni HTTP non protette. **Non consigliato per la produzione**. Questo campo è facoltativo.                                                                                        |
| `auth.secretRef.appId`     | Riferimento al secret contenente l'***Application ID***.                                                                                                                                                                  |
| `auth.secretRef.appSecret` | Riferimento al secret contenente l'***Application secret***.                                                                                                                                                              |

{% hint style="info" %}
Per `ClusterSecretStore`, si assicuri di specificare il `namespace` nei riferimenti ai secret.
{% endhint %}

### Riferimento ai secret

È possibile fare riferimento alle voci tramite UUID o nome:

| **Formato**                                      | **Esempio**                               |
| ------------------------------------------------ | ----------------------------------------- |
| **UUID della voce**                              | `7c9e6679-7425-40de-944b-e07fc1f90ae7`    |
| **Nome della voce**                              | `db-credentials`                          |
| **Nome della voce con percorso della cartella**  | `infrastructure/databases/db-credentials` |
| **Percorso della cartella con barre rovesciate** | `infrastructure\databases\db-credentials` |

La cassaforte è configurata nel campo `vault` del SecretStore (nome o UUID), quindi la chiave deve identificare solo la voce.

#### Percorsi delle cartelle

Se una voce si trova all'interno di una cartella, può includere il percorso della cartella prima del nome della voce. Sia le barre (`/`) sia le barre rovesciate (`\`) sono accettate come separatori di percorso:

```bash
folder/subfolder/entry-name
folder\subfolder\entry-name
```

{% hint style="warning" %}
Quando utilizza le barre rovesciate in YAML, deve applicare l'escape con una doppia barra rovesciata (`\\`):
{% endhint %}

```
key: "folder\\subfolder\\entry-name"
```

Le barre non richiedono l'escape e sono consigliate per semplicità.

{% hint style="warning" %}
I nomi delle voci che contengono barre (`/`) o barre rovesciate (`</code>) are not supported with name-based lookups, as those characters are interpreted as path separators. Use the entry UUID instead.`
{% endhint %}

Il percorso della cartella è facoltativo. Senza un percorso, il provider cerca in tutte le cartelle della cassaforte. Se più voci condividono lo stesso nome in cartelle diverse, può specificare il percorso della cartella oppure utilizzare l'UUID della voce per disambiguare.

Le ricerche basate sul nome risolvono il nome in un UUID in fase di esecuzione tramite una chiamata API. Se corrispondono più voci di credenziali, viene restituito un errore. Per scenari con molte scritture (operazioni `PushSecret` frequenti), preferisca i riferimenti tramite UUID per evitare la ricerca aggiuntiva a ogni operazione.

Può trovare gli UUID nell'interfaccia web di Devolutions Server visualizzando le proprietà della voce.

### Tipi di credenziali supportati

Devolutions Server supporta più tipi di credenziali. Il provider associa ciascun tipo a proprietà specifiche:

| **Tipo di credenziale**     | **Tipo di voce** di Devolutions Server | **Proprietà disponibili**                                         |
| --------------------------- | -------------------------------------- | ----------------------------------------------------------------- |
| **Default**                 | Credential                             | `username`, `password`, `domain`                                  |
| **Access Code**             | Secret                                 | `password`                                                        |
| **API Key**                 | Credential                             | `api-id`, `api-key`, `tenant-id`                                  |
| **Azure Service Principal** | Credential                             | `client-id`, `client-secret`, `tenant-id`                         |
| **Connection String**       | Credential                             | `connection-string`                                               |
| **Private Key**             | Credential                             | `username`, `password`, `private-key`, `public-key`, `passphrase` |

Tutte le voci includono anche le proprietà di metadati `entry-id` e `entry-name`.

{% hint style="warning" %}
Se non viene specificata alcuna `property`, per impostazione predefinita viene restituito il campo `password`.

Nell'interfaccia web di Devolutions Server, le voci "Secret" compaiono come tipo di voce distinto e vengono associate internamente al sottotipo di credenziale Access Code.
{% endhint %}

### Esempi

#### Recupero di singole proprietà

Per recuperare proprietà specifiche da una voce di credenziali:

```bash
---
# Fetch a single property from a credential entry by name
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: database-credentials
spec:
  refreshInterval: 1h
  secretStoreRef:
    kind: SecretStore
    name: dvls-store
  target:
    name: database-secret
    creationPolicy: Owner
  data:
    - secretKey: username
      remoteRef:
        key: 'db-credentials'
        property: username
    - secretKey: password
      remoteRef:
        key: 'db-credentials'
        property: password
---
# Fetch all fields from a credential entry with folder path
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: api-credentials
spec:
  refreshInterval: 1h
  secretStoreRef:
    kind: SecretStore
    name: dvls-store
  target:
    name: api-secret
    creationPolicy: Owner
  dataFrom:
    - extract:
        key: 'infrastructure/apis/my-api-key'
---
# Fetch a Secret entry (Access Code type) by UUID
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: app-secret
spec:
  refreshInterval: 1h
  secretStoreRef:
    kind: SecretStore
    name: dvls-store
  target:
    name: app-secret
    creationPolicy: Owner
  data:
    - secretKey: secret
      remoteRef:
        key: '<entry-uuid>'
        property: password
```

#### Utilizzo di dataFrom per estrarre tutti i campi

Quando si utilizza `dataFrom.extract`, tutte le proprietà disponibili della voce di credenziali verranno sincronizzate con il secret di Kubernetes.

### Push dei secret

Il provider Devolutions Server supporta il push dei secret verso Devolutions Server:

```bash
apiVersion: external-secrets.io/v1alpha1
kind: PushSecret
metadata:
  name: push-to-dvls
spec:
  refreshInterval: 1h
  secretStoreRefs:
    - name: dvls-store
      kind: SecretStore
  selector:
    secret:
      name: my-k8s-secret
  data:
    - match:
        secretKey: password
        remoteRef:
          # When vault is set in the SecretStore, remoteKey is the entry name
          # (or path/name). Without vault, use the legacy 'vault-uuid/entry-uuid' format.
          remoteKey: 'db-credentials'
```

**Nota:** il push secret aggiorna il campo password di una voce esistente. La voce deve già esistere in Devolutions Server.

### Limitazioni

* **GetAllSecrets**: l'operazione `find` per individuare i secret non è attualmente supportata.
* **Certificati CA personalizzati**: i certificati TLS personalizzati per istanze di Devolutions Server con certificato autofirmato non sono ancora supportati. Utilizzi la variabile d'ambiente `SSL_CERT_FILE` come soluzione alternativa.
* **Voci di tipo certificato**: i tipi di voce certificato (`Document/Certificate`) non sono attualmente supportati. Sono supportate solo le voci Credential.

### Risoluzione dei problemi

#### Errori di autenticazione

Se riceve errori di autenticazione:

1. Verifichi che l'Application ID e il Secret siano corretti.
2. Si assicuri che l'applicazione disponga delle autorizzazioni necessarie in Devolutions Server.
3. Verifichi che l'URL del server Devolutions Server sia accessibile dal suo cluster Kubernetes.

#### Voce non trovata

Se non è possibile trovare una voce:

1. Verifichi che i riferimenti alla cassaforte e alla voce siano corretti (UUID o nome)
2. Si assicuri che l'applicazione disponga almeno dell'accesso in lettura alla cassaforte
3. Verifichi che la voce esista e sia di tipo Credential o Secret
4. Si assicuri che l'applicazione disponga almeno delle autorizzazioni di lettura, visualizzazione della password e connessione (esecuzione) sulla voce

#### Trovate più voci

Se riceve un errore "multiple entries found" quando utilizza riferimenti basati sul nome, significa che più di una voce di credenziali condivide lo stesso nome nella cassaforte. Utilizzi l'UUID della voce anziché il nome per individuare la voce corretta.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/pam/it/knowledge-base/knowledge-base-articles/external-secrets-operator.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
