Informationen zu den Apigee-Verschlüsselungsschlüsseln

Diese Seite gilt für Apigee, aber nicht für Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

In diesem Abschnitt werden die verschiedenen Arten von Verschlüsselungsschlüsseln und ihre Erstellung beschrieben.

Bei der Apigee-Einrichtung generieren Sie folgende Cloud Key Management Service-Verschlüsselungsschlüssel:

Schlüsseltyp Zeit der Erstellung Beschreibung
Verschlüsselungsschlüssel der Steuerungsebene

Google Cloud Console:

Befehlszeile:

Bei Verwendung des Datenstandorts verwendet Apigee diesen Schlüssel, um Analytics-Daten zu verschlüsseln, die in BigQuery im Mandantenprojekt gespeichert sind.

Verschlüsselt API-Proxys, Zielserver, Truststores und Schlüsselspeicher, Analysedaten und alles andere, das über verschiedene Laufzeiten hinweg gemeinsam genutzt wird.

Apigee fordert Sie auf, zwei CMEK auf Steuerungsebene anzugeben. Dieser Schlüssel und ein Verschlüsselungsschlüssel für API-Nutzerdaten.

Der Speicherort des Verschlüsselungsschlüssels für die Steuerungsebene sollte mit dem Speicherort des Speicherorts der Steuerungsebene übereinstimmen.

Verschlüsselungsschlüssel für API-Nutzerdaten

Google Cloud Console:

Befehlszeile:

Wenn Sie den Datenstandort verwenden, benötigt Apigee zusätzlich zum Verschlüsselungsschlüssel der Steuerungsebene einen einzelnen Regionsschlüssel, der für Dienste verwendet wird, die nur in einer einzigen Region verfügbar sind. Beispiel: Dataflow und Cloud SQL.

Der Speicherort des Verschlüsselungsschlüssels für die API-Nutzerdaten sollte sich innerhalb des Standorts der Steuerungsebene befinden.

Verschlüsselungsschlüssel der Laufzeitdatenbank

Google Cloud Console:

Befehlszeile:

Verschlüsselt Anwendungsdaten wie KVMs, Cache und Clientschlüssel, die dann in der Datenbank gespeichert werden.

Es gibt einen Schlüssel zur Verschlüsselung der Laufzeitdatenbank pro Organisation. Alle Instanzen/Regionen in einer Organisation nutzen denselben Schlüssel zur Verschlüsselung der Laufzeitdatenbank.

Der Verschlüsselungsschlüssel der Laufzeitdatenbank unterstützt alle Cloud KMS-Standorte, die Cloud HSM und Cloud EKM unterstützen. Google empfiehlt die Verwendung eines multiregionalen Standorts (z. B. us oder europe) oder eines dual-regionalen Standorts (eur5, nam4), wenn Sie diesen Schlüssel erstellen.

Der Speicherort des Verschlüsselungsschlüssels für die Laufzeitdatenbank sollte sich innerhalb des Standorts der Steuerungsebene befinden, wenn der Datenstandort verwendet wird.

Laufwerkverschlüsselungsschlüssel

Google Cloud Console:

Befehlszeile:

Verschlüsselt die Daten der Laufzeitinstanz, bevor sie auf das Laufwerk geschrieben werden.

Zu den verschlüsselten Daten gehören das Key Management System (KMS), Schlüssel/Wert-Paar-Zuordnungen (KVMs), Kontingentdefinitionen, Buckets und Zähler; und alle im Cache gespeicherten Daten. KMS-Daten umfassen API-Produkte, Entwickler, Entwickler-Apps, OAuth-Tokens (einschließlich Zugriffstokens, Aktualisierungstokens und Autorisierungscodes) sowie API-Schlüssel.

Dieser Schlüssel befindet sich in derselben Region wie die Laufzeitinstanz. Beim Erstellen eines neuen Schlüssels muss der Speicherort des Schlüssels mit dem Speicherort der Laufzeitinstanz übereinstimmen.

Jede Kombination aus Instanz/Region hat einen eigenen Schlüssel zur Laufwerksverschlüsselung.

Wichtige Fakten

Beachten Sie beim Erstellen der Verschlüsselungsschlüssel für das Laufwerk und die Laufzeitdatenbank Folgendes:

  • Der Speicherort des Verschlüsselungsschlüssels der Apigee-Laufzeitdatenbank unterstützt alle Cloud KMS-Standorte, die Cloud HSM und Cloud EKM unterstützen.
  • Der Speicherort des Schlüssels zur Laufwerksverschlüsselung muss dem Speicherort der Laufzeitinstanz entsprechen, in der der Schlüssel verwendet wird.
  • Nachdem Sie einen Schlüssel festgelegt haben, können Sie ihn nicht mehr ändern.
  • Alle Schlüssel müssen sich in einem Schlüsselbund befinden.
  • Schlüssel verschiedener Typen müssen aber in separaten Schlüsselbunden enthalten sein. Schlüssel zur Laufwerksverschlüsselung dürfen sich nicht im selben Schlüsselbund wie der Schlüssel zur Verschlüsselung der Laufzeitdatenbank befinden.
  • Die Schlüssel müssen einen purpose haben. Wenn Sie die neuen Schlüssel mit der Befehlszeile generieren, setzen Sie purpose auf encryption. Wenn Sie die Google Cloud Console verwenden, wählen Sie Symmetrisches Ver-/Entschlüsseln für den Zweck.
  • Die Schlüssel werden durch einen Schlüsselpfad definiert, der folgendes Muster verwendet:
    projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

Vorhandene Schlüssel auflisten

Wenn Sie bereits neue Cloud KMS-Verschlüsselungsschlüssel für Apigee erstellt haben, können Sie diese nutzen und müssen keine neuen Schlüssel bei der Einrichtung erstellen.

So listen Sie alle KMS-Schlüssel in einem Schlüsselbund auf:

Führen Sie den Befehl gcloud kms keys list aus.

gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION

Ersetzen Sie dabei Folgendes:

  • KEY_RING_NAME: Der Name des Schlüsselbunds. Beispiel: my-key-ring.
  • KEY_RING_LOCATION ist der physische Speicherort des Schlüsselbunds, z. B. us-west1.

Alternativ können Sie Ihre Schlüssel in der Google Cloud Console ansehen.

Neue Schlüssel in der Befehlszeile generieren

Sie können einen Schlüsselbund und einen Schlüssel in der Befehlszeile oder in der Google Cloud Console erstellen.

Jeder Schlüsseltyp muss einen eigenen Schlüsselbund haben. Sie können beispielsweise die Schlüssel zur Laufwerksverschlüsselung im gleichen Schlüsselbund speichern. Der Schlüssel zur Verschlüsselung der Laufzeitdatenbank muss aber in einem separaten Schlüsselbund gespeichert sein.

In den folgenden Schritten wird beschrieben, wie Sie einen Schlüsselbund und einen Schlüssel erstellen und dem Apigee-Dienst-Agent Zugriff zur Verwendung des neuen Schlüssels gewähren. Erstellen Sie Schlüsselringe und Schlüssel für die Steuerungsebene (falls Sie den Datenstandort verwenden), die Laufzeitdatenbank und das Laufzeitlaufwerk.

  1. Erstellen Sie mit dem Befehl gcloud kms keyrings create einen neuen Schlüsselbund:

    Steuerungsebene

    Wenn der Datenstandort aktiviert ist, erstellen Sie einen Schlüsselbund für die Steuerungsebene und einen weiteren für die Region der Nutzerdaten.

    gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --project PROJECT_ID
    gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • CONTROL_PLANE_KEY_RING_NAME: der Name des Schlüsselbunds der Steuerungsebene.
    • CONTROL_PLANE_LOCATION ist der physische Speicherort, an dem die Daten der Apigee-Steuerungsebene gespeichert werden.
    • PROJECT_ID: die Google Cloud-Projekt-ID.
    • CONSUMER_DATA_KEY_RING_NAME: der Name des Schlüsselbunds für Nutzerdaten.
    • CONSUMER_DATA_REGION: Eine Subregion der Region der Steuerungsebene. Sie müssen sowohl die CONTROL_PLANE_LOCATION als auch die CONSUMER_DATA_REGION angeben.

    Laufzeitdatenbank

    gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • RUNTIMEDB_KEY_RING_NAME: Der Name des Datenbankschlüsselbunds, den Sie erstellen.
    • RUNTIMEDB_KEY_LOCATION: der physische Speicherort des Datenbankschlüsselbunds.
    • PROJECT_ID: die Google Cloud-Projekt-ID.

    Der Speicherort des Apigee-Verschlüsselungsschlüssels unterstützt alle Cloud KMS-Standorte, die Cloud HSM und Cloud EKM unterstützen.

    Laufzeitlaufwerk

    gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • RUNTIMEDISK_KEY_RING_NAME: Der Name des zu erstellenden Laufwerkschlüsselbunds.
    • RUNTIMEDISK_KEY_LOCATION: der physische Speicherort des Schlüsselbunds für das Laufwerk.
    • PROJECT_ID: die Google Cloud-Projekt-ID.

    Prüfen Sie, ob der Schlüsselbund des Laufwerks auf den gleichen Standort wie die Instanz eingestellt ist. Jede Instanz und jeder Schlüsselbund müssen einen eigenen Standort haben.

    gcloud kms keyrings list \
    --location  \
    --project $PROJECT_ID

    gcloud kms keyrings describe $DISK_KEY_RING_NAME \
    --location  \
    --project $PROJECT_ID
  2. Der Name des Schlüsselbunds muss für Ihre Organisation eindeutig sein. Wenn Sie weitere Regionen erstellen, müssen sich die Schlüsselbundnamen für diese Regionen von den vorhandenen Schlüsselbundnamen unterscheiden.

  3. Erstellen Sie einen Schlüssel mit dem Befehl kms keys create:

    Steuerungsebene

    Wenn der Datenstandort aktiviert ist, erstellen Sie einen Schlüsselbund für die Steuerungsebene und einen weiteren für die Region der Nutzerdaten.

    gcloud kms keys create CONTROL_PLANE_KEY_NAME \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --purpose "encryption" \
    --project PROJECT_ID
    gcloud kms keys create CONSUMER_DATA_KEY_NAME \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --purpose "encryption" \
    --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • CONTROL_PLANE_KEY_NAME: der Schlüsselname der Steuerungsebene.
    • CONTROL_PLANE_KEY_RING_NAME: der Name des Schlüsselbunds der Steuerungsebene.
    • CONTROL_PLANE_LOCATION ist der physische Speicherort, an dem die Daten der Apigee-Steuerungsebene gespeichert werden.
    • PROJECT_ID: die Google Cloud-Projekt-ID.
    • CONSUMER_DATA_KEY_NAME: der Name des Nutzerdaten-Schlüssels.
    • CONSUMER_DATA_KEY_RING_NAME: der Name des Schlüsselbunds der Nutzerdaten.
    • CONSUMER_DATA_REGION: Eine Subregion der Region der Steuerungsebene. Sie müssen sowohl die CONTROL_PLANE_LOCATION als auch die CONSUMER_DATA_REGION angeben.

    Laufzeitdatenbank

    gcloud kms keys create RUNTIMEDB_KEY_NAME \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • RUNTIMEDB_KEY_NAME: Der Name des Datenbankschlüssels, den Sie erstellen.
    • RUNTIMEDB_KEY_RING_NAME: Der Name des Datenbankschlüsselbunds, den Sie erstellen.
    • RUNTIMEDB_KEY_LOCATION: der physische Speicherort des Datenbankschlüsselbunds.
    • PROJECT_ID: die Google Cloud-Projekt-ID.

    Laufzeitlaufwerk

    gcloud kms keys create RUNTIMEDISK_KEY_NAME \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • RUNTIMEDISK_KEY_NAME: der Name des Laufwerksschlüssels, den Sie erstellen.
    • RUNTIMEDISK_KEY_RING_NAME: Der Name des zu erstellenden Laufwerkschlüsselbunds.
    • RUNTIMEDISK_KEY_LOCATION: der physische Speicherort des Schlüsselbunds für das Laufwerk.
    • PROJECT_ID: die Google Cloud-Projekt-ID.

    Dieser Befehl erstellt den Schlüssel und fügt ihn dem Schlüsselbund hinzu.

    Verwenden Sie beim Verweis auf einen Schlüssel die Schlüssel-ID.

  4. Gewähren Sie dem Apigee-Dienst-Agent mit dem Befehl gcloud kms keys add-iam-policy-binding Zugriff auf den neuen Schlüssel:

    Steuerungsebene

    Wenn der Datenstandort aktiviert ist, erstellen Sie einen Schlüsselbund für die Steuerungsebene und einen weiteren für die Region der Nutzerdaten.

    gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \
    --location CONTROL_PLANE_LOCATION \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \
    --location CONSUMER_DATA_REGION \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    

    Ersetzen Sie dabei Folgendes:

    • CONTROL_PLANE_KEY_NAME: der Schlüsselname der Steuerungsebene.
    • CONTROL_PLANE_LOCATION ist der physische Speicherort, an dem die Daten der Apigee-Steuerungsebene gespeichert werden.
    • CONTROL_PLANE_KEY_RING_NAME: der Name des Schlüsselbunds der Steuerungsebene.
    • PROJECT_NUMBER ist die Google Cloud-Projektnummer.
    • PROJECT_ID: die Google Cloud-Projekt-ID.
    • CONSUMER_DATA_KEY_NAME: der Name des Nutzerdaten-Schlüssels.
    • CONSUMER_DATA_REGION: Eine Subregion der Region der Steuerungsebene. Sie müssen sowohl die CONTROL_PLANE_LOCATION als auch die CONSUMER_DATA_REGION angeben.
    • CONSUMER_DATA_KEY_RING_NAME: der Name des Schlüsselbunds für Nutzerdaten.

    Laufzeitdatenbank

    gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • RUNTIMEDB_KEY_NAME: Der Name des Datenbankschlüssels, den Sie erstellen.
    • RUNTIMEDB_KEY_RING_NAME: Der Name des Datenbankschlüsselbunds, den Sie erstellen.
    • RUNTIMEDB_KEY_LOCATION: der physische Speicherort des Datenbankschlüsselbunds.
    • PROJECT_NUMBER ist die Google Cloud-Projektnummer.
    • PROJECT_ID: die Google Cloud-Projekt-ID.

    Laufzeitlaufwerk

    gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    Ersetzen Sie dabei Folgendes:

    • RUNTIMEDISK_KEY_NAME: der Name des Laufwerksschlüssels, den Sie erstellen.
    • RUNTIMEDISK_KEY_RING_NAME: Der Name des zu erstellenden Laufwerkschlüsselbunds.
    • RUNTIMEDISK_KEY_LOCATION: der physische Speicherort des Schlüsselbunds für das Laufwerk.
    • PROJECT_NUMBER ist die Google Cloud-Projektnummer.
    • PROJECT_ID: die Google Cloud-Projekt-ID.

    Mit diesem Befehl wird der Schlüssel an den Apigee-Dienst-Agent gebunden.

    Nach dem erfolgreichen Abschluss dieser Anfrage gibt gcloud etwa folgende Antwort zurück:

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwWqgEuCuwk=
    version: 1

    Wenn Sie einen Fehler wie folgenden erhalten:

    INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

    Achten Sie darauf, dass Sie die Projektnummer und nicht den Projektnamen in der E-Mail-Adresse des Dienstkontos verwendet haben.

    So prüfen Sie, ob der Schlüssel an den Apigee-Dienst-Agent gebunden ist:

    gcloud kms keys get-iam-policy $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

    gcloud kms keys describe $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

Neue Schlüssel mit der Google Cloud Console generieren

Sie können neue Schlüssel über die Console generieren, wie unter Symmetrischen Verschlüsselungsschlüssel erstellen beschrieben.

So erstellen Sie einen neuen Schlüssel mit der Console:

  • Legen Sie für den Schlüssel zur Verschlüsselung der Laufzeitdatenbak den Standort auf einen beliebigen Cloud KMS-Standort fest, der Cloud HSM und Cloud EKM unterstützt. Auf der Benutzeroberfläche können Sie keinen abweichenden Speicherort für den Schlüssel auswählen, er entspricht also Ihrer Auswahl im Schlüsselbund.
  • Nachdem Sie den Schlüssel erstellt haben, rufen Sie den Schlüsselpfad in der Ansicht Kryptografische Schlüssel ab. Klicken Sie dazu neben dem Schlüssel auf  Mehr und wählen Sie dann Ressourcenname kopieren aus.

Rufen Sie die Schlüssel-ID ab

Wenn Sie mit der Cloud KMS API oder der Google Cloud CLI auf eine Cloud Key Management Service-Ressource verweisen, verwenden Sie die Ressourcen-ID. Die Schlüssel-ID lässt sich mit dem gcloud kms keys list-Befehl abrufen:

Steuerungsebene

Wenn der Datenstandort aktiviert ist, gibt es einen Schlüsselbund für die Steuerungsebene und einen weiteren für die Region der Nutzerdaten.

gcloud kms keys list \
--location=CONTROL_PLANE_LOCATION \
--keyring=CONTROL_PLANE_KEY_RING_NAME \
--project=PROJECT_ID

gcloud kms keys list \
--location=CONSUMER_DATA_REGION \
--keyring=CONSUMER_DATA_KEY_RING_NAME \
--project=PROJECT_ID

Die Schlüssel-ID hat die folgende Syntax (ähnlich einem Dateipfad):

projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME

Laufzeitdatenbank

gcloud kms keys list \
--location=RUNTIMEDB_KEY_LOCATION \
--keyring=RUNTIMEDB_KEY_RING_NAME \
--project=PROJECT_ID

Die Schlüssel-ID hat die folgende Syntax (ähnlich einem Dateipfad):

projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME

Laufzeitlaufwerk

gcloud kms keys list \
  --location=RUNTIMEDISK_KEY_LOCATION \
  --keyring=RUNTIMEDISK_KEY_RING_NAME \
  --project=PROJECT_ID

Die Schlüssel-ID hat die folgende Syntax (ähnlich einem Dateipfad):

projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME

Beispiel:

NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

Sie können die Schlüssel-ID auch in der Google Cloud Console abrufen. Weitere Informationen finden Sie unter Cloud KMS-Ressourcen-ID abrufen