Cloud HSM

Dieses Thema bietet einen Überblick über Google Cloud HSM und zeigt, wie Verschlüsselungsschlüssel in Cloud HSM mit dem Cloud Key Management Service erstellt und verwendet werden.

Was ist Cloud HSM?

Cloud HSM ist ein in der Cloud gehosteter HSM-Dienst (Hardware Security Module), mit dem Sie Verschlüsselungsschlüssel hosten und kryptografische Abläufe in einem Cluster von zertifizierten HSMs auf FIPS 140-2 Level 3 durchführen können. Google verwaltet den HSM-Cluster für Sie, sodass Sie sich keine Gedanken über Clustering, Skalierung oder Patching machen müssen. Da Cloud KMS von Cloud HSM als Front-End verwendet wird, können Sie alle Funktionen von Cloud KMS nutzen.

Hinweis

  1. Senden Sie mit der E-Mail-Adresse des Kontos, das zum Erstellen Ihres/Ihrer Testprojekts/Testprojekte verwendet wird, eine E-Mail an cloudhsm-feedback@google.com. Rechnen Sie mindestens 24 Stunden ein, damit ausreichend Zeit für die Eintragung Ihres Kontos in die Whitelist zur Verfügung steht.
  2. Öffnen Sie in der Google Cloud Platform Console die Seite "Projekte" und wählen oder erstellen Sie ein neues Projekt. Um die Latenzzeit zu reduzieren, empfiehlt es sich, die Region us-central1 für das Projekt auszuwählen.

    Weiter zur Seite "Projekte"

    Das erstellte Projekt wird in diesem Thema als [PROJECT_ID] bezeichnet.
  3. Aktivieren Sie die Abrechnung für Ihr Projekt. (Die Aktivierung der Abrechnung ist erforderlich, aber die Nutzung von HSM-Schlüsseln wird während des Beta-Programms nicht abgerechnet und Schlüssel sind nicht mehr verfügbar, wenn das Programm abgeschlossen ist).

    Abrechnung aktivieren

Private Version für gcloud verwenden

Für diesen Release muss eine private Version des gcloud-Befehlszeilentools verwendet werden, um Anfragen an die Cloud KMS API zu senden. Mithilfe dieser Anweisungen erhalten Sie die private Version von gcloud und können sie mit Ihrem Projekt in der Testlab-Region (us-central1-testlab) verwenden. Die Testlab-Region ist eine spezielle Region, die den HSM-Cluster hostet, der für das Beta-Programm verwendet wird.

  1. Aktivieren Sie die API für Ihr Projekt:
    1. Öffnen Sie https://console.cloud.google.com/apis/api/testlab-cloudkms.googleapis.com/overview?project=[PROJECT_ID].
    2. Klicken Sie oben auf der Seite auf Aktivieren.
  2. Erstellen Sie mit Ihrem Whitelist-Konto ein Dienstkonto in Ihrem neuen Projekt und laden Sie die Anmeldedaten für das Dienstkonto herunter. Sie verwenden diese Anmeldedaten, wenn Sie sich mit dem gcloud-Befehlszeilentool anmelden, anstatt den normalen gcloud auth login-Ablauf zu verwenden.
    1. Öffnen Sie https://console.cloud.google.com/apis/credentials/serviceaccountkey?project=[PROJECT_ID].
    2. Wählen Sie in der Drop-down-Liste für Dienstkonto den Eintrag Neues Dienstkonto aus.
    3. Geben Sie für Dienstkontoname einen Namen für Ihr Dienstkonto ein.
    4. Weisen Sie Ihrem Dienstkonto für Rolle mindestens die Rollen Cloud KMS Admin und Cloud KMS CryptoKey Encrypter/Decrypter zu:
      1. Wählen Sie Cloud KMS aus und klicken Sie auf Cloud KMS Admin.
      2. Wählen Sie Cloud KMS aus und klicken Sie auf Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler.
      Informationen zum Zuweisen einer Rolle zu einem Dienstkonto finden Sie unter Dienstkonten Rollen zuweisen.
    5. Wenn die Aufforderung angezeigt wird, aktivieren Sie Neuen privaten Schlüssel zur Verfügung stellen.
    6. Klicken Sie auf Erstellen. Eine .json-Datei, die den Dienstkontoschlüssel enthält, wird heruntergeladen. Diese Datei wird später in diesem Thema als [JSON_KEY_FILE] bezeichnet. Informationen zum sicheren Verwalten von Dienstkontoschlüsseln finden Sie unter Best Practices für die Verwaltung von Anmeldedaten.
  3. Installieren Sie den öffentlichen Release von gcloud in einem speziellen Ordner, um Ihre vorhandene Installation beizubehalten:
    pushd /tmp
    curl -o installer.sh https://sdk.cloud.google.com
    chmod +x installer.sh
    ./installer.sh --disable-prompts --install-dir ~/testlab
    rm installer.sh
    popd
    alias hsmgcloud=~/testlab/google-cloud-sdk/bin/gcloud
    hsmgcloud auth login
    
  4. Bearbeiten Sie Ihre Installation so, dass sie auf das testlab-Repository verweist.
    hsmgcloud components repositories add  \
    https://storage.googleapis.com/cloud-kms-testlab/components-2.json
    hsmgcloud components update
    hsmgcloud components install alpha
    
  5. Konfigurieren Sie gcloud für die Verwendung mit dem Testlab-Endpunkt.
    hsmgcloud config configurations create --activate testlab
    hsmgcloud config set project [PROJECT_ID]
    hsmgcloud config set api_endpoint_overrides/cloudkms "https://testlab-cloudkms.googleapis.com/"
    hsmgcloud auth activate-service-account --key-file [JSON_KEY_FILE]
    

Schlüsselbunde und Schlüssel

Zur Ver- und Entschlüsselung von Inhalten ist ein Cloud KMS-Schlüssel erforderlich, der zu einem Schlüsselbund gehört.

Erstellen Sie einen Schlüsselbund namens hsm-ring und einen Schlüssel namens hsm-key. Weitere Informationen zu diesen Objekten und ihren Beziehungen finden Sie in der Objekthierarchieübersicht.

hsmgcloud kms keyrings create hsm-ring --location us-central1-testlab
hsmgcloud alpha kms keys create hsm-key --location us-central1-testlab --keyring hsm-ring --purpose encryption --protection-level hsm

Mit der Option list können Sie den Namen und die Metadaten für den Schlüssel ansehen, den Sie gerade erstellt haben.

hsmgcloud kms keys list --location us-central1-testlab --keyring hsm-ring

Sie sollten Folgendes sehen:

NAME                              PURPOSE                PROTECTION_LEVEL           PRIMARY_ID              PRIMARY_STATE
projects/[PROJECT_ID]/locations/us-central1-testlab/keyRings/hsm-ring/cryptoKeys/hsm-key  ENCRYPT_DECRYPT  HSM   1   ENABLED

Daten verschlüsseln

Mit dem erstellten Schlüssel können Sie Text oder binären Inhalt verschlüsseln. Erstellen Sie Text, der verschlüsselt werden soll, und speichern Sie ihn in einer Datei namens /tmp/secret.

echo "Some text to be encrypted" > /tmp/secret
hsmgcloud kms encrypt --location us-central1-testlab --keyring hsm-ring --key hsm-key --plaintext-file /tmp/secret --ciphertext-file /tmp/secret.enc

Chiffretext entschlüsseln

Um verschlüsselten Inhalt zu entschlüsseln, müssen Sie den gleichen Schlüssel verwenden, mit dem auch der Inhalt verschlüsselt wurde. Entschlüsseln Sie die verschlüsselte Datei /tmp/secret, indem Sie den folgenden Befehl eingeben:

hsmgcloud kms decrypt --location us-central1-testlab --keyring hsm-ring --key hsm-key --ciphertext-file /tmp/secret.enc --plaintext-file /tmp/secret.dec

Achten Sie darauf, dass der Inhalt von /tmp/secret.dec und die ursprüngliche Klartextdatei /tmp/secret identisch sind.

cat /tmp/secret.dec
Some text to be encrypted

Bereinigen

Bereinigen beinhaltet das Löschen der in diesem Thema verwendeten Schlüsselversionen.

Listen Sie die für Ihren Schlüssel verfügbaren Versionen auf:

hsmgcloud kms keys versions list --location us-central1-testlab --keyring hsm-ring --key hsm-key

Führen Sie den folgenden Befehl aus, um eine Version zu löschen, wobei Sie [VERSION_NUMBER] durch die zu löschende Versionsnummer ersetzen:

hsmgcloud kms keys versions destroy [VERSION_NUMBER] --location us-central1-testlab --keyring hsm-ring --key hsm-key

Nächste Schritte

  • Mit der Verwendung der API beginnen.

  • Die Cloud KMS API-Referenz ansehen. Weitere Informationen zur API-Referenz für die Verwendung von HSM mit Cloud KMS finden Sie im folgenden Abschnitt.

  • Anleitungen zu den ersten Schritten bei der Erstellung und Rotation von Schlüsseln und der Einrichtung von Berechtigungen lesen.

  • Informationen zur Vertiefung der Konzepte Objekthierarchie, Schlüsselstatus und Schlüsselrotation lesen.

API-Referenz

Mit den folgenden API-Updates können Sie Verschlüsselungsschlüssel in Cloud KMS mit Cloud KMS erstellen und verwenden.

Ressource: CryptoKey

JSON representation
{
 "name": string,
  "primary": {
    object(CryptoKeyVersion)
  },
  "purpose": enum(CryptoKeyPurpose),
  "createTime": string,
  "nextRotationTime": string,
  "rotationPeriod": string,
  "protectionLevel": enum(ProtectionLevel),
}
Felder Beschreibung
name String

Nur Ausgabe. Der Ressourcenname für diesen CryptoKey im Format projects/*/locations/*/keyRings/*/cryptoKeys/*.

primary object(CryptoKeyVersion)

Nur Ausgabe. Eine Kopie der "primären" CryptoKeyVersion, die von cryptoKeys.encrypt verwendet wird, wenn dieser CryptoKey in EncryptRequest.name angegeben ist.

Die primäre Version des CryptoKey's kann mithilfe von cryptoKeys.updatePrimaryVersion aktualisiert werden.

purpose enum(CryptoKeyPurpose)

Der unveränderliche Zweck dieses CryptoKey. Derzeit ist der einzige akzeptable Zweck ENCRYPT_DECRYPT.

createTime string (Timestamp format)

Nur Ausgabe. Der Zeitpunkt, zu dem dieser CryptoKey erstellt wurde.

Ein Zeitstempel im Format "RFC3339 UTC "Zulu'" in Nanosekunden. Beispiel: "2014-10-02T15:01:23.045123456Z".

nextRotationTime string (Timestamp format)

Zum Zeitpunkt der nextRotationTime führt der Key Management Service automatisch folgende Schritte durch:

  1. Eine neue Version dieses CryptoKey wird erstellt.
  2. Die neue Version wird als primär gekennzeichnet.

Manuell über cryptoKeyVersions.create und cryptoKeys.updatePrimaryVersion durchgeführte Schlüsselrotationen wirken sich nicht auf die nextRotationTime aus.

Ein Zeitstempel im Format "RFC3339 UTC "Zulu'" in Nanosekunden. Beispiel: "2014-10-02T15:01:23.045123456Z".

rotationPeriod string (Duration format)

nextRotationTime wird um diesen Zeitraum verlängert, wenn der Dienst automatisch einen Schlüssel rotiert. Dies muss mindestens ein Tag sein.

Wenn rotationPeriod festgelegt ist, muss auch nextRotationTime festgelegt sein.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die durch 's' beendet wird. Beispiel: "3.5s".

protectionLevel enum(ProtectionLevel)

Der aktuelle Status des ProtectionLevel.

Ressource: ProtectionLevel

Der Status einer ProtectionLevel, der angibt, ob die Version genutzt werden kann.

Enums Beschreibung
PROTECTION_LEVEL_UNSPECIFIED Nicht angegeben
SOFTWARE Gesichertes Schlüsselmaterial und Cryptoabläufe in der Software, d. h. Standardoption in Cloud KMS.
HSM Gesichertes Schlüsselmaterial und Cryptoabläufe in HSMs.

Fehlerbehebung

  • Wenn Sie eine Meldung zu Repository-Berechtigungen sehen, wenn Sie versuchen, das Repository hinzuzufügen, wurden die Änderungen der Whitelist möglicherweise noch nicht im ganzen System umgesetzt. Vielleicht müssen Sie etwas länger warten und den Versuch wiederholen.

  • Wenn Sie eine Meldung zu Berechtigungen für das lokale Dateisystem sehen, achten Sie darauf, dass Sie keine verwaltete Installation des Befehlszeilentools gcloud verwenden.

Wenn ein anderer Fehler auftritt, geben Sie uns über cloudhsm-feedback@google.com Feedback.

Bekannte Einschränkungen

  • Die Blockgröße ist auf 16.384 Byte (im Gegensatz zu 64 KiB für Cloud KMS-Softwareschlüssel) für vom Nutzer bereitgestellten Klartext und Chiffretext, einschließlich der zusätzlichen authentifizierten Daten, beschränkt.

  • Es wird keine UI unterstützt. HSM-Keys müssen mit der API oder dem gcloud- Befehlszeilentool erstellt und verwaltet werden.

  • Cloud KMS ist nur in der Region Testlab verfügbar (us-central1-testlab).

  • Das öffentlich zugängliche gcloud-Befehlszeilentool funktioniert nicht mit Cloud KMS, also muss der private gcloud-Release verwendet werden.

  • Derzeit kann durch Abläufe mit Schlüsseln, die in Cloud KMS gespeichert sind, eine im Vergleich mit der Verwendung von Cloud KMS-Softwareschlüsseln beträchtlich höhere Latenz hervorgerufen werden.

  • Alle erstellten Schlüssel werden nach Abschluss des Beta-Programms gelöscht.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit: