> 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/da/knowledge-base/knowledge-base-articles/external-secrets-operator.md).

# External Secrets Operator

Integrer External Secrets Operator med Devolutions Server for at synkronisere Kubernetes-hemmeligheder, henvise til boksposter og skubbe opdaterede adgangskoder.

External Secrets Operator integrerer med [Devolutions Server](file:///) til administration af hemmeligheder.

{% hint style="info" %}
Værdierne i denne vejledning (f.eks. `your-application-id`) er pladsholdere. Erstat dem med de specifikke værdier for Deres miljø.
{% endhint %}

### Godkendelse

Godkendelse til Devolutions Server bruger legitimationsoplysningerne ***Program-id*** og ***Programhemmelighed***.

#### Oprettelse af en programidentitet i Devolutions Server

1. Log på webgrænsefladen i Deres Devolutions Server.
2. Gå til ***Administration*** – ***Programidentiteter***.
3. Klik på ***Tilføj*** (**+**) for at oprette et nyt program.
4. Konfigurer programmet med de tilladelser, der kræves for at få adgang til de ønskede bokse og poster.
5. Gem ***Program-id*** og ***Programhemmelighed***.

#### Oprettelse af Kubernetes-hemmeligheden

Opret en Kubernetes-hemmelighed, der indeholder Deres legitimationsoplysninger til Devolutions Server, ved hjælp af følgende script:

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

#### Oprettelse af et 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
```

| **Felt**                   | **Beskrivelse**                                                                                                                                                                                      |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `serverUrl`                | URL'en til Devolutions Server-forekomsten (f.eks. `https://devolutions-server.example.com`)                                                                                                          |
| `vault`                    | Navnet eller UUID'et på den boks, hemmelighederne skal hentes fra. Hvis det udelades, skal boksen angives i hemmelighedsnøglen med det ældre format `<vault-id>/<entry-id>`. Dette felt er valgfrit. |
| `insecure`                 | Sæt til `true` for at tillade almindelige HTTP-forbindelser. **Anbefales ikke til produktion**. Dette felt er valgfrit.                                                                              |
| `auth.secretRef.appId`     | Reference til den hemmelighed, der indeholder ***Program-id***.                                                                                                                                      |
| `auth.secretRef.appSecret` | Reference til den hemmelighed, der indeholder ***Programhemmelighed***.                                                                                                                              |

{% hint style="info" %}
For `ClusterSecretStore` skal De angive `namespace` i hemmelighedsreferencerne.
{% endhint %}

### Henvisning til hemmeligheder

Poster kan henvises til via UUID eller navn:

| **Format**                            | **Eksempel**                              |
| ------------------------------------- | ----------------------------------------- |
| **Post-UUID**                         | `7c9e6679-7425-40de-944b-e07fc1f90ae7`    |
| **Postnavn**                          | `db-credentials`                          |
| **Postnavn med mappesti**             | `infrastructure/databases/db-credentials` |
| **Mappesti med omvendte skråstreger** | `infrastructure\databases\db-credentials` |

Boksen konfigureres i SecretStores felt `vault` (navn eller UUID), så nøglen kun behøver at identificere posten.

#### Mappestier

Hvis en post er i en mappe, kan De medtage mappestien før postnavnet. Både skråstreger (`/`) og omvendte skråstreger (`\`) accepteres som stiadskillere:

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

{% hint style="warning" %}
Når De bruger omvendte skråstreger i YAML, skal De escape dem med en dobbelt omvendt skråstreg (`\\`):
{% endhint %}

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

Skråstreger behøver ikke at escapes og anbefales for enkelhedens skyld.

{% hint style="warning" %}
Postnavne, der indeholder skråstreger (`/`) eller omvendte skråstreger (`</code>) are not supported with name-based lookups, as those characters are interpreted as path separators. Use the entry UUID instead.`
{% endhint %}

Mappestien er valgfri. Uden en sti søger udbyderen i alle mapper i boksen. Hvis flere poster har samme navn i forskellige mapper, kan De enten angive mappestien eller bruge postens UUID til at skelne.

Navnebaserede opslag oversætter navnet til et UUID på kørselstidspunktet via et API-kald. Hvis flere poster med legitimationsoplysninger matcher, returneres en fejl. I scenarier med mange skrivninger (hyppige `PushSecret`-handlinger) bør De foretrække UUID-referencer for at undgå det ekstra opslag pr. handling.

De kan finde UUID'er i webgrænsefladen i Devolutions Server ved at se postens egenskaber.

### Understøttede typer af legitimationsoplysninger

Devolutions Server understøtter flere typer legitimationsoplysninger. Udbyderen knytter hver type til specifikke egenskaber:

| **Type af legitimationsoplysninger** | Devolutions Server **posttype** | **Tilgængelige egenskaber**                                       |
| ------------------------------------ | ------------------------------- | ----------------------------------------------------------------- |
| **Standard**                         | Legitimationsoplysning          | `username`, `password`, `domain`                                  |
| **Adgangskode**                      | Secret                          | `password`                                                        |
| **API-nøgle**                        | Legitimationsoplysning          | `api-id`, `api-key`, `tenant-id`                                  |
| **Azure-tjenesteprincipal**          | Legitimationsoplysning          | `client-id`, `client-secret`, `tenant-id`                         |
| **Forbindelsesstreng**               | Legitimationsoplysning          | `connection-string`                                               |
| **Privat nøgle**                     | Legitimationsoplysning          | `username`, `password`, `private-key`, `public-key`, `passphrase` |

Alle poster indeholder også metadataegenskaberne `entry-id` og `entry-name`.

{% hint style="warning" %}
Når der ikke er angivet en `property`, returneres feltet `password` som standard.

I webgrænsefladen i Devolutions Server vises poster af typen "Secret" som en særskilt posttype og knyttes internt til undertypen Access Code for legitimationsoplysninger.
{% endhint %}

### Eksempler

#### Hentning af enkelte egenskaber

Sådan hentes specifikke egenskaber fra en post med legitimationsoplysninger:

```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
```

#### Brug af dataFrom til at udtrække alle felter

Når `dataFrom.extract` bruges, synkroniseres alle tilgængelige egenskaber fra posten med legitimationsoplysninger til Kubernetes-hemmeligheden.

### Skub hemmeligheder

Udbyderen til Devolutions Server understøtter at skubbe hemmeligheder tilbage til 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'
```

**Bemærk:** Skub hemmelighed opdaterer adgangskodefeltet for en eksisterende post. Posten skal allerede findes i Devolutions Server.

### Begrænsninger

* **GetAllSecrets**: Handlingen `find` til at opdage hemmeligheder understøttes ikke i øjeblikket.
* **Brugerdefinerede CA-certifikater**: Brugerdefinerede TLS-certifikater til selvsignerede forekomster af Devolutions Server understøttes endnu ikke. Brug miljøvariablen `SSL_CERT_FILE` som en midlertidig løsning.
* **Certifikatposter**: Certifikatposttyper (`Document/Certificate`) understøttes ikke i øjeblikket. Kun poster af typen Credential understøttes.

### Fejlfinding

#### Godkendelsesfejl

Hvis De får godkendelsesfejl:

1. Kontrollér, at program-id og hemmelighed er korrekte.
2. Sørg for, at programmet har de nødvendige tilladelser i Devolutions Server.
3. Kontrollér, at URL'en til Devolutions Server er tilgængelig fra Deres Kubernetes-klynge.

#### Posten blev ikke fundet

Hvis en post ikke kan findes:

1. Kontrollér, at referencerne til boksen og posten er korrekte (UUID eller navn)
2. Sørg for, at programmet mindst har læseadgang til boksen
3. Kontrollér, at posten findes, og at den er af typen Credential eller Secret
4. Sørg for, at programmet mindst har tilladelserne læs, vis adgangskode og forbind (udfør) på posten

#### Flere poster fundet

Hvis De får fejlen "multiple entries found", når De bruger navnebaserede referencer, betyder det, at mere end én post med legitimationsoplysninger har samme navn i boksen. Brug postens UUID i stedet for navnet for at ramme den rigtige post.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
