Schützen Sie vertrauliche Daten für Apps, die in Ihrem Kubernetes-Cluster ausgeführt werden, mithilfe des Trial- und Standard-Tarifs

In diesem Lernprogramm erfahren Sie, wie Sie mithilfe des Open-Source-Tools External Secrets Operator IBM Cloud® Secrets Manager geheime Schlüssel für Anwendungen verwalten, die Ihren IBM Cloud Kubernetes Service-Cluster ausführen.

Alternativ können Sie auch das Kubernetes Service CLI-Plug-in verwenden, um TLS und nicht TLS Geheimnisse zu verwalten. Weitere Informationen zu diesem Ansatz finden Sie unter Einrichten von Kubernetes Ingress.

Sie sind Entwickler in einem Unternehmen, und Ihr Team nutzt Kubernetes Service, um containerisierte Anwendungen und Dienste auf IBM Cloud bereitzustellen. In Ihrem aktuellen Ablauf verwenden Sie Kubernetes-Secrets, um sensible Daten wie Passwörter und API-Schlüssel zu speichern, die von den in Ihrem Cluster ausgeführten Anwendungen und Diensten verwendet werden. Um mehr Kontrolle über Ihre geheimen Schlüssel für Anwendungen zu haben, sollten Sie die Möglichkeit haben, Ihre geheimen Clusterschlüssel in einem externen Service für das Management geheimer Schlüssel zu speichern, wo Sie sie im Ruhezustand verschlüsseln, ihre Aktivität überwachen und sie einfach verwalten können.

Mit Secrets Manager können Sie die geheimen Schlüssel, die von den in Ihren Kubernetes-Clustern ausgeführten Apps verwendet werden, zentralisieren und schützen. Anstatt Ihre geheimen Schlüssel bei der Bereitstellung zu injizieren, können Sie Ihre Apps so konfigurieren, dass sie bei der Ausführung geheime Schlüssel aus Secrets Manager sicher abrufen. Wenn es an der Zeit ist, den geheimen Schlüssel turnusmäßig zu wechseln, können Sie dies von Secrets Manager aus ausführen. Nehmen Sie beispielsweise folgendes Szenario an:

Das Diagramm veranschaulicht den grundlegenden Datenfluss zwischen „ Secrets Manager “ und Ihrem „ Kubernetes “-Cluster.
Datenfluss externer Secrets

  1. Als Entwickler verwenden Sie Secrets Manager, um einen geheimen Schlüssel für eine Anwendung zu speichern, die Sie in einem Kubernetes-Cluster bereitstellen möchten.
  2. Secrets Manager stellt eine ID für den geheimen Schlüssel bereit. Sie schließen die ID in die Konfigurationsdatei ExternalSecrets für Ihre App ein und wenden die Konfiguration auf den Cluster an.
  3. Der Controller für externe geheime Schlüssel ruft die ExternalSecrets-Objekte in der Konfigurationsdatei ab, die Sie mithilfe der Kubernetes-API definiert haben.
  4. Zur Anwendungslaufzeit ruft der Controller die geheimen Daten aus Secrets Manager ab und konvertiert die ExternalSecrets-Objekte in geheime Kubernetes-Schlüssel für Ihren Cluster.

Dieses Szenario verfügt über ein Tool eines anderen Anbieters, das sich auf die Konformitätsbereitschaft von Workloads auswirken kann, die in Ihrem Kubernetes-Cluster ausgeführt werden. Wenn Sie ein Community-Tool oder ein Tool eines Drittanbieters hinzufügen, beachten Sie bitte, dass Sie für die Einhaltung der Compliance-Vorgaben Ihrer Apps verantwortlich sind und bei der Behebung etwaiger Probleme mit dem entsprechenden Anbieter zusammenarbeiten müssen. Weitere Informationen finden Sie im Abschnitt Ihre Verantwortlichkeiten bei der Verwendung von IBM Cloud Kubernetes Service.

Vorbereitende Schritte

Stellen Sie vor dem ersten Start sicher, dass Sie über den Administrator-Plattformzugriff verfügen, damit Sie Kontoberechtigungsnachweise und Einrichtungsressourcen erstellen können. Außerdem müssen die folgenden Voraussetzungen erfüllt sein:

jq unterstützt Sie beim Ausschneiden und Filtern von JSON-Daten. Sie verwenden jq in diesem Lernprogramm, um gespeicherte Umgebungsvariablen zu erfassen und zu verwenden.

Umgebung einrichten

Um mit Secrets Manager und Kubernetes Service arbeiten zu können, müssen Sie einen Cluster und eine Secrets Manager-Instanz in Ihrem IBM Cloud-Konto erstellen. Sie müssen ferner Berechtigungen konfigurieren, damit Sie Operationen für beide Services ausführen können.

In diesem Schritt richten Sie eine Zugriffsumgebung ein, indem Sie eine Service-ID und einen API-Schlüssel von IBM Cloud erstellen. Am Ende des Lernprogramms können Sie Ihre Ressourcen leicht entfernen, wenn Sie sie nicht mehr benötigen. Alternativ können Sie ein vertrauenswürdiges Profil verwenden, um den Operator für externe geheime Schlüssel zu berechtigen.

Service-ID und API-Schlüssel erstellen

Beginnen Sie, indem Sie die Kontoberechtigungsnachweise erstellen, die Sie für die Ausführung von Operationen für Secrets Manager und Kubernetes Service benötigen.

  1. Melden Sie sich in der Befehlszeile bei IBM Cloud über die IBM Cloud-CLI an.

    ibmcloud login
    

    Wenn die Anmeldung fehlschlägt, führen Sie den Befehl ibmcloud login --sso aus, um es erneut zu versuchen. Der Parameter --sso ist erforderlich, wenn Sie sich mit einer föderierten ID anmelden. Wenn diese Option verwendet wird, rufen Sie den Link auf, der in der Ausgabe der Befehlszeilenschnittstelle aufgelistet ist, um einen einmalig verwendbaren Kenncode zu generieren.

  2. Erstellen Sie eine Service-ID und legen Sie sie als Umgebungsvariable fest.

    export SERVICE_ID=`ibmcloud iam service-id-create kubernetes-secrets-tutorial --description "A service ID for testing ESO integration" --output json | jq -r ".id"`; echo $SERVICE_ID
    
  3. Ordnen Sie die Service-ID-Berechtigungen zum Lesen von geheimen Schlüsseln aus Secrets Manager zu.

    ibmcloud iam service-policy-create $SERVICE_ID --roles "SecretsReader" --service-name secrets-manager
    

    Durch die Zuordnung des Servicezugriffs SecretsReader verfügt der Controller für externe geheime Schlüssel über die richtige Zugriffsebene, um geheime Schlüssel aus Secrets Manager zu lesen und diese in einem Kubernetes-Cluster zu füllen.

  4. Erstellen Sie einen IBM Cloud-API-Schlüssel für Ihre Service-ID.

    export IBM_CLOUD_API_KEY=`ibmcloud iam service-api-key-create kubernetes-secrets-tutorial $SERVICE_ID --description "An API key for testing ESO integration." --output json | jq -r ".apikey"`
    

    Sie verwenden diesen API-Schlüssel später, um Secrets Manager für Ihre Clusterbereitstellung zu konfigurieren.

Kubernetes-Cluster und Secrets Manager-Instanz erstellen

Erstellen Sie einen Kubernetes-Cluster und eine Instanz von Secrets Manager in Ihrem IBM Cloud-Konto.

Sie können einen kostenlosen Kubernetes-Cluster und eine Secrets Manager-Serviceinstanz pro IBM Cloud-Konto erstellen. Wenn Sie bereits über beide Ressourcen in Ihrem Konto verfügen, können Sie den vorhandenen kostenlosen Cluster und die Secrets Manager-Instanz verwenden, um das Lernprogramm abzuschließen.

  1. Wählen Sie in der Befehlszeile das Konto, die Region und die Ressourcengruppe aus, in der Sie eine Secrets Manager-Serviceinstanz erstellen möchten.

    In diesem Lernprogramm interagieren Sie mit der Region 'Dallas'. Wenn Sie in einer anderen Region angemeldet sind, achten Sie darauf, Dallas als Zielregion festzulegen, indem Sie den folgenden Befehl ausführen.

    ibmcloud target -r us-south -g default
    
  2. Erstellen Sie einen Kubernetes-Cluster.

    ibmcloud ks cluster create classic --zone dal10 --flavor free --name my-test-cluster
    
  3. Erstellen Sie eine Secrets Manager-Instanz.

    ibmcloud resource service-instance-create my-secrets-manager secrets-manager trial us-south
    

    Die Bereitstellung sowohl für Secrets Manager als auch für Ihren Kubernetes-Cluster dauert 5 bis 15 Minuten.

  4. Bevor Sie mit dem nächsten Schritt fortfahren, vergewissern Sie sich, dass Ihr Cluster und Ihre Secrets Manager-Instanz erfolgreich bereitgestellt wurden.

    1. Stellen Sie sicher, dass die Implementierung des Workerknotens abgeschlossen ist.
        ibmcloud ks worker ls --cluster my-test-cluster
        ```
        Wenn Einrichtung Ihres Workerknotens abgeschlossen ist, ändert sich der Status in **Bereit**.
    
        ```sh {: screen}
        ID                                                       Public IP       Private IP      Flavor   State          Status                Zone    Version
        kube-c39pf4ld0m87o3fv1utg-mytestclust-default-000000dd   169.xx.xx.xxx   10.xxx.xx.xxx   free     normal   Ready   mex01   1.20.7_1543
        ```
    2. Stellen Sie anschließend sicher, dass Ihre Secrets Manager-Instanz erfolgreich eingerichtet wurde.
    
    ```sh {: pre}
        ibmcloud resource service-instance my-secrets-manager
        ```
        Wenn die Einrichtung der Instanz abgeschlossen ist, ändert sich der Status in **Aktiv**.
    
        ```plaintext {: screen}
        Name:                  my-secrets-manager
        ID:                    crn:v1:bluemix:public:secrets-manager:us-south:a/f047b55a3362ac06afad8a3f2f5586ea:fe06948b-0c6b-4183-8d4b-e6c1d38ff65f::
        GUID:                  fe06948b-0c6b-4183-8d4b-e6c1d38ff65f
        Location:              us-south
        Service Name:          secrets-manager
        Service Plan Name:     trial
        Resource Group Name:   default
        State:                 active
        Type:                  service_instance
        Sub Type:
        Created at:            2021-01-06T17:11:32Z
        Created by:            zara@example.com
        Updated at:            2021-03-31T02:33:26Z
        ```
    
  5. Legen Sie den Kontext für Ihren Kubernetes-Cluster in der Befehlszeilenschnittstelle fest.

    ibmcloud ks cluster config --cluster my-test-cluster
    
  6. Überprüfen Sie, ob kubectl-Befehle ordnungsgemäß ausgeführt werden und ob der Kubernetes-Kontext auf Ihren Cluster gesetzt ist.

    kubectl config current-context
    

    Beispielausgabe:

    my-test-cluster/<your_cluster_ID>
    

Erstellen eines vertrauenswürdigen Profils über CLI

Ein vertrauenswürdiges Profil ermöglicht dem Operator für externe geheime Schlüssel das Lesen aus Secrets Manager, ohne dass eine Service-ID erstellt oder ein API-Schlüssel verwaltet werden muss.

  1. Rufen Sie die CRNs für Ihre Secrets Manager-Instanz und Ihren Kubernetes-Cluster ab.

    CLUSTER_CRN=$(ibmcloud ks cluster get --cluster my-test-cluster --output json | jq -r '.crn')
    SECRETS_MANAGER_CRN=$(ibmcloud resource service-instance my-secrets-manager --output JSON | jq -r '.[0].crn')
    
  2. Erstellen Sie das Profil.

    ibmcloud iam trusted-profile-create 'External Secrets'
    
  3. Berechtigen Sie den Kubernetes-Cluster für die Verwendung des vertrauenswürdigen Profils.

    Kubernetes

    ibmcloud iam trusted-profile-rule-create 'External Secrets' --name kubernetes --type Profile-CR --conditions claim:namespace,operator:EQUALS,value:external-secrets --conditions claim:name,operator:EQUALS,value:external-secrets --conditions claim:crn,operator:EQUALS,value:$CLUSTER_CRN --cr-type IKS_SA
    

    OpenShift

    ibmcloud iam trusted-profile-rule-create 'External Secrets' --name kubernetes --type Profile-CR --conditions claim:namespace,operator:EQUALS,value:external-secrets-operator --conditions claim:name,operator:EQUALS,value:cluster-external-secrets --conditions claim:crn,operator:EQUALS,value:$CLUSTER_CRN --cr-type IKS_SA
    
  4. Erstellen Sie eine Zugriffsrichtlinie, mit der das vertrauenswürdige Profil geheime Schlüssel aus Ihrer Secrets Manager-Instanz lesen kann.

    ibmcloud iam trusted-profile-policy-create 'External Secrets' --roles SecretsReader --service-instance $SECRETS_MANAGER_CRN --service-name secrets-manager
    

Erstellen Sie ein vertrauenswürdiges Profil mit Terraform

Ein vertrauenswürdiges Profil ermöglicht dem Operator für externe geheime Schlüssel das Lesen aus Secrets Manager, ohne dass eine Service-ID erstellt oder ein API-Schlüssel verwaltet werden muss. Sie können diesem Beispiel in Terraform folgen, das alle Schritte zur Erstellung eines vertrauenswürdigen Profils durchführt:

```sh {: pre}
//Get your cluster details
data "ibm_container_vpc_cluster" "cluster" {
  name              = var.cluster_name
  resource_group_id = var.resource_group_id
}

//Get details of Secret Manager Instance
data "ibm_resource_instance" "secrets_manager" {
  name              = var.sm_name
  resource_group_id = var.resource_group_id
  service           = "secrets-manager"
}

//Create Trusted Profile
resource "ibm_iam_trusted_profile" "eso_profile" {
  name        = var.profile_name
  description = var.profile_description
}

//Attach IAM Policy for Secrets Manager Access
resource "ibm_iam_trusted_profile_policy" "secrets_policy" {
  iam_id = ibm_iam_trusted_profile.eso_profile.id

  roles = ["SecretsReader"]

  resources {
    service = "secrets-manager"
    resource_instance_id = data.ibm_resource_instance.secrets_manager.guid
  }
}

//Add Claim Rule for Kubernetes Service Account
resource "ibm_iam_trusted_profile_claim_rule" "eso_claim_rule" {
  profile_id = ibm_iam_trusted_profile.eso_profile.id
  type       = "Profile-CR"
  cr_type    = "IKS_SA"

  conditions {
    claim    = "name"
    operator = "EQUALS"
    value    = var.service_account_name
  }

  conditions {
    claim    = "namespace"
    operator = "EQUALS"
    value    = var.namespace
  }

  conditions {
    claim    = "crn"
    operator = "EQUALS"
    value    = data.ibm_container_vpc_cluster.cluster.crn
  }
}

//Variables
variable "resource_group_id" {
  description = "Resource Group ID"
  type        = string
}

variable "sm_name" {
  description = "Secret Manager Instance ID"
  type        = string
}

variable "cluster_name" {
  description = "IKS Cluster name"
  type        = string
}

variable "profile_name" {
  type        = string
  description = "Name of the trusted profile"
}

variable "profile_description" {
  type        = string
  description = "Description of the trusted profile"
}

variable "service_account_name" {
  description = "Kubernetes service account name for claim rule"
  type        = string
}

variable "namespace" {
  description = "Kubernetes namespace for claim rule"
  type        = string
}
```

Secrets Manager-Instanz vorbereiten

Konfigurieren Sie schließlich Ihre Secrets Manager-Instanz, um mit dynamischen geheimen Schlüsseln arbeiten zu können.

  1. Überprüfen Sie in der Befehlszeile, ob Sie auf das CLI-Plug-in von Secrets Manager zugreifen können.

    ibmcloud secrets-manager --help
    

    Haben Sie das Plug-in noch nicht? Führen Sie zum Installieren des Secrets Manager-CLI-Plug-ins ibmcloud plugin install secrets-manager aus.

  2. Exportieren Sie eine Umgebungsvariable mit Ihrer eindeutigen Secrets Manager-API-Endpunkt-URL.

    export SECRETS_MANAGER_URL=`ibmcloud resource service-instance my-secrets-manager --output json | jq -r '.[].dashboard_url | .[0:-3]'`; echo $SECRETS_MANAGER_URL
    
  3. Erstellen Sie eine Gruppe geheimer Schlüssel für Ihre Instanz.

    Gruppen geheimer Schlüssel sind eine Möglichkeit, wie Sie organisieren und steuern können, wer in Ihrem Team Zugriff auf bestimmte geheime Schlüssel in Ihrer Instanz hat. Wenn Sie eine Gruppe von geheimen Schlüsseln über die IBM Cloud-CLI erstellen möchten, verwenden Sie den Befehl ibmcloud secrets-manager secret-group-create Führen Sie den folgenden Befehl aus, um eine geheime Gruppe zu erstellen und ihre ID als Umgebungsvariable zu speichern.

    export SECRET_GROUP_ID=`ibmcloud secrets-manager secret-group-create --name my-test-secret-group --description "Read and write to my test app" --output json --service-url $SECRETS_MANAGER_URL | jq -r '.id'`; echo $SECRET_GROUP_ID
    

    Verwenden Sie eine Windows™-Eingabeaufforderung (cmd.exe) oder PowerShell? Wenn bei der Übergabe des JSON-Inhalts über die Befehlszeile Fehler auftreten, müssen Sie möglicherweise die Zeichenfolgen an die Anforderungen an Escape-Zeichen für Anführungszeichen ändern, die für Ihr Betriebssystem spezifisch sind. Weitere Informationen finden Sie im Abschnitt zur Verwendung von Anführungszeichen mit Zeichenfolgen in der Befehlszeilenschnittstelle von IBM Cloud.

    Erfolgreich! Jetzt können Sie den geheimen Schlüssel in Secrets Manager speichern, den Sie in Ihrem Kubernetes-Cluster füllen möchten. Fahren Sie mit dem nächsten Schritt fort.

Geheimen Schlüssel in Secrets Manager erstellen

Geheime Schlüssel sind anwendungsspezifisch und können je nach der individuellen App oder dem Service variieren, die sie benötigt. Ein geheimer Schlüssel kann aus einem Benutzernamen, einem Kennwort, einem API-Schlüssel oder einer anderen Art von Berechtigungsnachweisen bestehen.

Secrets Manager unterstützt verschiedene Typen von geheimen Schlüsseln, die Sie im Service erstellen und verwalten können. Wenn Sie zum Beispiel einen API-Schlüssel für eine App verwalten müssen, die durch die IAM-Authentifizierung von IBM Cloud geschützt wird, können Sie einen IAM-Berechtigungsnachweis erstellen. Wenn Sie einen geheimen Schlüssel verwalten müssen, der einen beliebigen Typ strukturierter oder unstrukturierter Daten enthalten kann, können Sie einen beliebigen geheimen Schlüssel (arbitrary) erstellen.

In diesem Lernprogramm erstellen Sie als Beispiel einen Benutzernamen und ein Kennwort. Um einen geheimen Schlüssel aus der IBM Cloud-CLI zu erstellen, verwenden Sie den Befehl ibmcloud secrets-manager secret-create. Führen Sie den folgenden Befehl aus, um den geheimen Schlüssel zu erstellen und seine ID als Umgebungsvariable zu speichern.

export SECRET_ID=`ibmcloud secrets-manager secret-create --secret-type=username_password --secret-name example_username_password --username-password-username user123 --username-password-password cloudy-rainy-coffee-book --secret-labels "my-test-cluster, tutorial" --secret-group-id $SECRET_GROUP_ID --output json $SECRETS_MANAGER_URL | jq -r '.id'`; echo $SECRET_ID

Aktualisieren Sie instance_id und region auf Ihre Version.

Die Ausgabe zeigt die ID Ihres neu erstellten geheimen Schlüssels an. Zum Beispiel:

e0246cea-d668-aba7-eef2-58ca11ad3707

Operator für externe geheime Schlüssel einrichten

Nachdem Sie nun ein Geheimnis für Ihre Anwendung haben, können Sie das External Secrets Operator-Tool für Ihren Cluster einrichten. Dieses Paket konfiguriert die Verbindung zwischen Secrets Manager und Ihrem Cluster, indem es ExternalSecrets-Objekte erstellt, die in geheime Kubernetes-Schlüssel für Ihre Anwendung konvertiert werden.

External Secrets Operator ist ein Open-Source-Tool, das nicht von IBM verwaltet wird. Weitere Informationen zu diesem Tool oder zur Behebung von Problemen finden Sie in der Projektdokumentation.

Externen Operator für geheime Schlüssel für Ihren Cluster konfigurieren

Kubernetes

Fügen Sie zuerst external-secrets-Ressourcen zu Ihrem Cluster hinzu, indem Sie das offizielle Helm-Chart installieren. Weitere Installationsoptionen finden Sie in der Einführung.

  1. Führen Sie den folgenden Befehl aus, um das Helm-Repository des Operators für externe geheime Schlüssel zu installieren:

    helm repo add external-secrets https://charts.external-secrets.io
    
  2. Konfigurieren Sie die Authentifizierung zwischen dem Operator für externe geheime Schlüssel und Secrets Manager.

    Wenn Sie eine Service-ID für die Authentifizierung verwenden:

    kubectl -n default create secret generic secret-api-key --from-literal=apikey=$IBM_CLOUD_API_KEY
    helm install external-secrets external-secrets/external-secrets -n external-secrets --create-namespace --set installCRDs=true
    

    Wenn Sie ein vertrauenswürdiges Profil für die Authentifizierung verwenden:

    echo '
    installCRDs: true
    extraVolumes:
    - name: sa-token
      projected:
        defaultMode: 420
        sources:
        - serviceAccountToken:
            path: sa-token
            expirationSeconds: 3600
            audience: iam
    extraVolumeMounts:
    - mountPath: /var/run/secrets/tokens
      name: sa-token
    webhook:
      extraVolumes:
      - name: sa-token
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              path: sa-token
              expirationSeconds: 3600
              audience: iam
      extraVolumeMounts:
      - mountPath: /var/run/secrets/tokens
        name: sa-token' >values.yml
    helm install external-secrets external-secrets/external-secrets -n external-secrets --create-namespace -f values.yml
    

OpenShift

  1. Installieren Sie den Operator für externe geheime Schlüssel, indem Sie die folgenden Ressourcen erstellen:

    echo '
    apiVersion: v1
    kind: Namespace
    metadata:
      name: external-secrets-operator
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: external-secrets-operator
      namespace: external-secrets-operator
    spec:
      targetNamespaces:
        - external-secrets-operator
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: external-secrets-operator
      namespace: external-secrets-operator
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: external-secrets-operator
      source: community-operators
      sourceNamespace: openshift-marketplace
    ' | oc create -f-
    
  2. Konfigurieren Sie die Authentifizierung zwischen dem Operator für externe geheime Schlüssel und Secrets Manager.

    Wenn Sie eine Service-ID für die Authentifizierung verwenden:

    echo "
    apiVersion: operator.external-secrets.io/v1alpha1
    kind: OperatorConfig
    metadata:
      name: cluster
      namespace: external-secrets-operator
    spec: {}
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: secret-api-key
      namespace: default
    type: Opaque
    stringData:
      apikey: $IBM_CLOUD_API_KEY
    " | oc create -f-
    

    Wenn Sie ein vertrauenswürdiges Profil für die Authentifizierung verwenden:

    echo '
    apiVersion: operator.external-secrets.io/v1alpha1
    kind: OperatorConfig
    metadata:
      name: cluster
      namespace: external-secrets-operator
    spec:
      extraVolumeMounts:
      - mountPath: /var/run/secrets/tokens
        name: sa-token
      extraVolumes:
      - name: sa-token
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              audience: iam
              expirationSeconds: 3600
              path: sa-token
      webhook:
        extraVolumeMounts:
        - mountPath: /var/run/secrets/tokens
          name: sa-token
        extraVolumes:
        - name: sa-token
          projected:
            defaultMode: 420
            sources:
            - serviceAccountToken:
                audience: iam
                expirationSeconds: 3600
                path: sa-token
    ' | oc create -f-
    

App-Konfiguration aktualisieren

Nach der Installation von External Secrets Operator in Ihrem Cluster können Sie Secrets Manager als Back-End für geheime Schlüssel für Ihre Anwendung definieren. Beginnen Sie mit der Erstellung einer Konfigurationsdatei, die sich auf den geheimen Schlüssel in Secrets Manager bezieht, den Sie verwenden möchten.

  1. Erstellen Sie im Stammverzeichnis Ihrer Anwendung eine Datei external-secrets-example.yml.

    touch external-secrets-example.yml
    
  2. Ändern Sie die Datei so, dass sie Informationen zu dem geheimen Schlüssel enthält, den Sie von Ihrer Secrets Manager-Instanz abrufen möchten.

    apiVersion: external-secrets.io/v1beta1
    kind: SecretStore
    metadata:
      name: ibmcloud-secrets-manager-example
    spec:
      provider:
        ibm:
          serviceUrl: <endpoint_url>
          auth:
            secretRef:
              secretApiKeySecretRef:
                name: secret-api-key
                key: apikey
    ---
    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
      name: ibmcloud-secrets-manager-example
    spec:
      secretStoreRef:
        name: ibmcloud-secrets-manager-example
        kind: SecretStore
      target:
        name: ibmcloud-secrets-manager-example
      data:
      - secretKey: username
        remoteRef:
          property: username
          key: username_password/<SECRET_ID>
      - secretKey: password
        remoteRef:
          property: password
          key: username_password/<SECRET_ID>
    

    Es gibt zwei Modi, nach denen Sie arbeiten können: ID des geheimen Schlüssels oder Name des geheimen Schlüssels. Bei Auswahl des Namens des geheimen Schlüssels ändert sich das Format von secret_type/secret_id in secret_group/secret_type/secret_name.

    Ersetzen Sie <endpoint_url> durch die Secrets Manager Endpunkt-URL, die Sie abgerufen haben früher. Ersetzen Sie <SECRET_ID> durch die eindeutige ID des geheimen Schlüssels, den Sie im vorherigen Schritt erstellt haben.

    Wenn Sie ein vertrauenswürdiges Profil für die Authentifizierung verwenden, ersetzen Sie den Block auth durch das folgende Snippet.

          auth:
            containerAuth:
              profile: "External Secrets"
              iamEndpoint: https://iam.cloud.ibm.com
              tokenLocation: /var/run/secrets/tokens/sa-token
    
  3. Wenden Sie die Konfiguration auf Ihren Cluster an.

    kubectl apply -f external-secrets-example.yml
    
  4. Überprüfen Sie, ob der Operator für externe geheime Schlüssel den geheimen Schlüssel abrufen kann, der in Ihrer Secrets Manager -Instanz gespeichert ist.

    kubectl get secret ibmcloud-secrets-manager-example -o json | jq '.data | map_values(@base64d)'
    

    Beispielausgabe:

    {
        "password": "cloudy-rainy-coffee-book",
        "username": "user123"
    }
    

    Erfolgreich! Sie können jetzt die Daten des geheimen Schlüssels abrufen, die in Ihrer Secrets Manager-Instanz gespeichert sind. Fahren Sie mit dem nächsten Schritt fort.

App für den Cluster implementieren

Schließlich können Sie eine Anwendung in Ihrem Cluster bereitstellen, die den geheimen Schlüssel Secrets Manager verwendet, den Sie in der Datei external-secret-example.yml definiert haben. Während der Laufzeit der Anwendung werden die Daten des geheimen Schlüssels, die aus Secrets Manager abgerufen werden, in einen geheimen Kubernetes-Schlüssel konvertiert, der von Ihrem Cluster verwendet werden kann.

Suchen Sie nach Beispielen, wie Sie eine App implementieren können? Unter Kubernetes-native Apps in Clustern bereitstellen finden Sie weitere Informationen zur Bereitstellung einer einzelnen Instanz einer App.

(Optional) Ressourcen bereinigen

Wenn Sie die Ressourcen, die Sie in diesem Lernprogramm erstellt haben, nicht mehr benötigen, können Sie die folgenden Schritte ausführen, um sie aus Ihrem Konto zu entfernen.

  1. Löschen Sie den Test Kubernetes-Cluster.

    ibmcloud ks cluster rm --cluster my-test-cluster
    
  2. Löschen Sie Ihre Secrets Manager-Testinstanz.

    ibmcloud resource service-instance-delete my-secrets-manager
    
  3. Löschen Sie Ihre Berechtigung.

    Wenn Sie eine Service-ID verwenden.

    ibmcloud iam service-id-delete $SERVICE_ID
    

    Wenn Sie mit einem vertrauenswürdigen Profil arbeiten.

    ibmcloud iam trusted-profile-delete 'External Secrets'
    

Hinweise von Interesse

Beachten Sie beim Erstellen Ihres YAML-Dokuments, dass jeder Schlüssel im Datenabschnitt regelmäßig per REST von der Instanz Secrets Manager abgefragt wird. Beachten Sie Folgendes:

  1. Standardmäßig ist das Abfrageintervall auf 1 Stunde eingestellt und wird bevorzugt. Sie können diesen Wert mithilfe von in spec.refreshInterval der Vorlage External Secrets ändern. Das Intervall kann in Einheiten von s, m oder h ausgedrückt werden.
  2. Wenn Sie die YAML-Datei so festlegen, dass ein geheimer Secrets Manager-Schlüssel nach Name und nicht nach ID (keyByName: true) abgerufen wird, wird von der ESO ein zusätzlicher Aufruf zum Abrufen der relevanten ID des geheimen Schlüssels abgesetzt. Weitere Informationen finden Sie im Dokumentation zu externen geheimen Schlüsseln.

Nächste Schritte

Gut gemacht! In diesem Lernprogramm haben Sie erfahren, wie Sie Secrets Manager einrichten, um geheime Schlüssel für Anwendungen sicher in Ihrem Cluster zu füllen. Nutzen Sie weitere Ressourcen, die Sie beim Einstieg in Secrets Manager unterstützen.

Um mit Vault Dedicated und Kubernetes Service arbeiten zu können, müssen Sie einen Cluster in Ihrem IBM Cloud-Konto erstellen und den Zugriff auf Ihre Vault Dedicated-Instanz konfigurieren.