# Secrets Manager Kubernetes Operator

Bitwarden Secrets Manager Kubernetes Operator kommer att tillåta team att integrera Secrets Manager i Kubernetes arbetsflöden säkert och effektivt. Genom att använda operatören, som distribueras med [Helm](https://helm.sh/) Package Manager, kan hemligheter lagras och hämtas från Secrets Manager.

#### Bitwarden Secrets Manager Kubernetes Operator

`Sm-operatören` använder en styrenhet för att synkronisera Bitwarden-hemligheter till Kubernetes-hemligheter. Operatören registrerar den anpassade resursdefinitionen: `BitwardenSecret` i Kubernetes-klustret. Klustret kommer att lyssna efter det nyregistrerade `BitwardenSecret` och synkronisera på ett konfigurerbart intervall.

## Krav

För att komma igång krävs en aktiv Bitwarden-organisation med [Secrets Manager](https://bitwarden.com/sv-se/help/secrets-manager-overview/). Dessutom krävs en eller flera [åtkomsttokens](https://bitwarden.com/sv-se/help/access-tokens/) kopplade till ett [maskinkonto](https://bitwarden.com/sv-se/help/machine-accounts/).

#### Ytterligare beroenden

- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
- [Roder 3](https://v3.helm.sh/docs/intro/install/)

## Lägg till förvaret i Helm

Lägg till Bitwarden Secrets Manager-diagramförrådet:

```plain text
helm repo add bitwarden https://charts.bitwarden.com/
```

Uppdatera information om lokalt tillgängliga sjökort:

```plain text
helm repo update
```

## Installation

#### Skapa en konfigurationsfil

Skapa en anpassad värdefil som används för distribution:

```plain text
helm show values bitwarden/sm-operator --devel > my-values.yaml
```

#### Uppdatera konfigurationsfilen

Leta upp `my-values.yaml` och fyll i obligatoriska värden. Ett exempel kan finnas i [Bitwarden-förvaret](https://github.com/bitwarden/helm-charts/blob/535ad726cfc9dd5c9cd18531c15008d0d939ed74/charts/sm-operator/values.yaml). Vi rekommenderar att följande värden justeras för din inställning:

| Värde | Beskrivning |
|------|------|
| `settings.bwSecretsManagerRefreshInterval` | Hur ofta hemligheterna synkroniseras (i sekunder). Minsta värde är 180. |
| `settings.cloudRegion` | Användare med egen värd inställd på molnregion `i USA` eller `EU` för synkronisering. Se [aktivera molnkommunikation](https://bitwarden.com/sv-se/help/families-for-enterprise-self-hosted/#step-1-enable-cloud-communication/) för ytterligare information. |
| `settings.bwApiUrlOverride` | Endast för användare med egen värd. Detta är URL:en för ditt instans-API. |
| `settings.bwIdentityUrlOverride` | Endast för användare med egen värd. Det här är webbadressen till din instanss identitetstjänst. |
| `containers.enableSecompProfileRuntimeDefault` | Ställ in på `false` för att fungera på äldre Kubernetes-versioner (< 1.19) eller på leverantörsversioner som inte stöder detta fält som standard (som OpenShift < 4.11). Den här inställningen rekommenderas för de flesta vanliga fall som inte kräver eskalerande privilegier för att göra behållare restriktiva. Se [Kubernetes dokumentation](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted) för mer information. |

> [!NOTE] Using non-default char image
> To use a different operate image version than the one included with the chart, update:
> `containers.manager.image.tag`.

## Uppgradera roderdiagram

När filen `values.yaml` har konfigurerats, uppgradera versionen till ett nytt diagram genom att köra:

```plain text
helm upgrade sm-operator bitwarden/sm-operator -i --debug -n sm-operator-system --create-namespace --values my-values.yaml --devel
```

Detta kommando installerar eller uppgraderar en version med namnet `sm-operator`, i namnområdet `sm-operator-system`, med värdena från `my-values.yaml`.

> [!NOTE] Informatino for helm install/upgrade
> To see information for the `helm install` or `helm upgrade` commands, run `helm install --help` or `helm upgrade --help`.

## Skapa Bitwarden-hemligheter

För att synkronisera hemligheter lagrade i Bitwarden Secrets Manager till Kubernetes-hemligheter måste vi skapa ett BitwardenSecret-objekt.

1. Skapa en Kubernetes-hemlighet att autentisera med Secrets Manager:

```plain text
kubectl create secret generic bw-auth-token -n <YOUR_NAMESPACE> --from-literal=token="<TOKEN_HERE>"
```

> [!NOTE] Command recorded in shell hsitory
> This command is recorded in your shell history. To avoid exposing access token data, consider deploying with an ephemeral pipeline agent.

## Distribuera BitwardenSecret

`BitwardenSecret-objektet` är synkroniseringsinställningen som kommer att användas av operatören för att skapa och synkronisera en Kubernetes-hemlighet. Kubernetes-hemligheten tillhör ett namnområde och kommer att injiceras med data som Secrets [Manager-maskinkontot](https://bitwarden.com/sv-se/help/machine-accounts/) har åtkomst till.

Exempel på BitwardenSecret-distribution med anpassad mappning:

```plain text
cat <<EOF | kubectl apply -n <YOUR_NAMESPACE> -f -
apiVersion: k8s.bitwarden.com/v1
kind: BitwardenSecret
metadata:
 labels:
 app.kubernetes.io/name: bitwardensecret
 app.kubernetes.io/instance: bitwardensecret-sample
 app.kubernetes.io/part-of: sm-operator
 app.kubernetes.io/managed-by: kustomize
 app.kubernetes.io/created-by: sm-operator
 name: bitwardensecret-sample
spec:
 organizationId: "a08a8157-129e-4002-bab4-b118014ca9c7"
 secretName: bw-sample-secret
 onlyMappedSecrets: true # default is true
 map:
 - bwSecretId: 6c230265-d472-45f7-b763-b11b01023ca6
 secretKeyName: container__registry__secret
# - bwSecretId: d132a5ed-12bd-49af-9b74-b11b01025d58
# secretKeyName: test__secret__2
 authToken:
 secretName: bw-auth-token
 secretKey: token
EOF
```

I BitwardenSecret-implementeringsexemplet är det `anpassade kartelementet` valfritt.

| **Miljö** | **Beskrivning** |
|------|------|
| `metadata.name` | Namnet på BitwardenSecret-objektet som du distribuerar. |
| `spec.organizationId` | Bitwardens organisations-ID som du hämtar Secrets Manager-data från. |
| `spec.secretName` | Namnet på Kubernetes-hemligheten som kommer att skapas och injiceras med Secrets Manager-data. |
| `spec.authToken` | Namnet på en hemlighet inuti Kubernetes-namnrymden som BitwardenSecrets-objektet distribueras till som innehåller auktoriseringstoken för Secrets Manager-maskinkonto som används över hemligheter. |

> [!NOTE] Secrets Manager not guarentee unique secret names
> Secrets Manager does not guarantee unique secret names across projects. By default, secrets will be created with the Secrets Manager secret UUID used as the Key.

För att göra genererade hemligheter enklare att använda kan du skapa en karta över Bitwarden Secrets ID:n till Kubernetes hemliga nycklar. Den genererade hemligheten kommer att ersätta Bitwardens hemliga ID:n med det mappade namnet du anger. 

Tillgängliga kartinställningar:

| Miljö | Beskrivning |
|------|------|
| `bwSecretId` | Detta är UUID (universellt unik identifierare) för hemligheten i Secrets Manager. Detta kan hittas under det hemliga namnet i Secrets Manager webbportal eller genom att använda Bitwarden [Secrets Manager CLI](https://bitwarden.com/sv-se/help/secrets-manager-cli/). |
| `secretKeyName` | Den resulterande nyckeln inuti Kubernetes-hemligheten som ersatte UUID. |

## Exempel på användningsdiagram

```plain text
apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-deployment
 labels:
 app: my-deployment
spec:
 selector:
 matchLabels:
 app: my-deployment
 template:
 metadata:
 labels:
 app: my-deployment
 spec:
 containers:
 - name: my-deployment
 image: <some-image>
 imagePullSecrets:
 - name: container__registry__secret
 envFrom:
 - secretRef:
 name: bw-sample-secret
```