IAM-Authentifizierung verwalten

Auf dieser Seite finden Sie eine Anleitung zu häufigen Aufgaben für das Feature zur IAM-Authentifizierung für Memorystore for Redis Cluster. Weitere Informationen zu diesem Feature finden Sie unter IAM-Authentifizierung.

Instanz mit IAM-Authentifizierung erstellen

Führen Sie den Befehl create aus, um eine Memorystore for Redis Cluster-Instanz zu erstellen, die die IAM-Authentifizierung verwendet:

gcloud redis clusters create INSTANCE_ID --region=REGION_ID --network=NETWORK --node-type=NODE_TYPE --shard-count=SHARD_COUNT --auth-mode=iam-auth

Ersetzen Sie Folgendes:

  • INSTANCE_ID ist die ID der Memorystore for Redis Cluster-Instanz, die Sie erstellen. Die Instanz-ID muss zwischen 1 und 63 Zeichen lang sein und darf nur Kleinbuchstaben, Ziffern oder Bindestriche enthalten. Sie muss mit einem Kleinbuchstaben beginnen und mit einem Kleinbuchstaben oder einer Ziffer enden.

  • REGION_ID ist die Region, in der die Instanz platziert werden soll.

  • NETWORK ist das Netzwerk, das zum Erstellen der Instanz verwendet wird. Es muss das Format projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID haben. Die hier verwendete Netzwerk-ID muss mit der Netzwerk-ID übereinstimmen, die von der Richtlinie für die Dienstverbindung verwendet wird. Andernfalls schlägt der Vorgang create fehl. Weitere Informationen finden Sie unter Netzwerke.

  • NODE_TYPE ist der Knotentyp für den Cluster.

  • SHARD_COUNT bestimmt die Anzahl der Shards in Ihrer Instanz. Die Anzahl der Shards bestimmt die Gesamtspeicherkapazität zum Speichern von Clusterdaten. Weitere Informationen zur Clusterspezifikation finden Sie unter Cluster- und Knotenspezifikation.

Berechtigungen für die IAM-Authentifizierung gewähren

Eine Anleitung zum Gewähren des IAM-Zugriffs finden Sie unter IAM-Rolle zuweisen. Weisen Sie dem Hauptkonto die Rolle roles/redis.dbConnectionUser zu. Das Hauptkonto ist eine Identität, der Sie Zugriff auf Ressourcen gewähren können Google Cloud. Ein Hauptkonto kann beispielsweise ein Dienstkonto sein, das auf Ihr Google Cloud Projekt zugreifen kann.

Wenn Sie einem Hauptkonto die Rolle roles/redis.dbConnectionUser zuweisen, kann es standardmäßig auf alle Instanzen in Ihrem Projekt zugreifen.

Eingeschränkte IAM-Administratorrolle für eine Instanz erstellen

Möglicherweise möchten Sie eine Rolle erstellen, mit der IAM-Berechtigungen für die Instanzverbindung geändert werden können, ohne den vollständigen IAM-Administratorzugriff zu gewähren. Dazu können Sie einen eingeschränkten IAM-Administrator für die Rolle roles/redis.dbConnectionUser erstellen. Weitere Informationen finden Sie unter Eingeschränkte IAM-Administratoren erstellen.

Verbindung zu einer Instanz herstellen, die die IAM-Authentifizierung verwendet

  1. Wenn Sie noch keine Compute Engine-VM haben, die dasselbe autorisierte Netzwerk wie Ihr Redis-Cluster verwendet, erstellen Sie eine VM und stellen Sie eine Verbindung zu ihr her: Folgen Sie dazu der Kurzanleitung: Linux-VM verwenden.

  2. Verwenden Sie für Ihr Projekt den gcloud compute instances set-service-account-Befehl, um ein Dienstkonto festzulegen und den Cloud Platform API-Bereich für Ihre Compute Engine-VM zu aktivieren.

    gcloud compute instances set-service-account VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=SCOPE
    

    Ersetzen Sie die folgenden Werte:

    • VM_NAME: der Name Ihrer Compute Engine-VM
    • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse Ihres Dienstkontos
    • SCOPE: der Cloud Platform API-Bereich für die VM (cloud-platform)

    Der folgende Befehl weist beispielsweise einer VM namens example-VM das Dienstkonto my-sa-123@my-project-123.iam.gserviceaccount.com zu und legt den Zugriffsbereich für diese VM auf die Cloud Platform API fest:

    gcloud compute instances set-service-account example-VM \
    --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \
    --scopes=cloud-platform
    

    Weitere Informationen zum Aktivieren dieses Zugriffsbereichs finden Sie unter Dienstkonto anhängen und Zugriffsbereich aktualisieren. Weitere Informationen zu Best Practices für diesen Bereich finden Sie unter Best Practices für Bereiche.

  3. Aktivieren Sie für Ihr Projekt die Memorystore for Redis API.

    Memorystore for Redis API

  4. Installieren Sie redis-cli auf der Compute Engine-VM. Führen Sie dazu den folgenden Befehl im Compute Engine-SSH-Terminal aus:

    sudo apt-get install redis-tools
    
  5. Führen Sie den folgenden Befehl aus, um ein Zugriffstoken für Ihren IAM-Nutzer abzurufen:

    gcloud auth print-access-token
    

    Zugriffstokens laufen nach einer Stunde ab. Weitere Informationen finden Sie unter Zeitraum für IAM-Zugriffstoken.

  6. Stellen Sie eine Verbindung zum Discovery-Endpunkt Ihrer Instanz her:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
    

    Ersetzen Sie Folgendes:

    • NETWORK_ADDRESS: die Netzwerkadresse der Instanz. Informationen zum Aufrufen der Netzwerkadresse finden Sie unter Clusterinformationen ansehen.

    • PORT: die Portnummer der Instanz. Informationen zum Aufrufen der Portnummer finden Sie unter Clusterinformationen ansehen.

    • ACCESS_TOKEN: das Token, das Sie im vorherigen Schritt abgerufen haben.

    Wenn Sie einen Nutzernamen angeben, müssen Sie entweder den Nutzernamen default oder die E-Mail-Adresse des IAM-Hauptkontos verwenden. Außerdem bleiben authentifizierte Verbindungen auch nach Ablauf des Tokens gültig. Weitere Informationen finden Sie unter Zeitraum für IAM-Zugriffstoken.

    Wenn Sie die Verschlüsselung während der Übertragung im Cluster aktivieren, müssen Sie die TLS-Flags (Transport Layer Security) anhängen. Beispiel:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
    
  7. Führen Sie den Befehl CLUSTER SHARDS aus, um die Clustertopologie aufzurufen. Notieren Sie sich eine der IP-Adressen und Portnummern des Knotens.

  8. Verwenden Sie den folgenden Befehl, um sich mit redis-cli zu authentifizieren und eine Verbindung zu Ihrem Knoten herzustellen:

    redis-cli -h NODE_IP_ADDRESS -p NODE_PORT -a ACCESS_TOKEN -c
    

    Ersetzen Sie Folgendes:

    • NODE_IP_ADDRESS: die IP-Adresse des Knotens, die Sie im vorherigen Schritt notiert haben
    • NODE_PORT: die Portnummer des Knotens, die Sie im vorherigen Schritt notiert haben
    • ACCESS_TOKEN: das IAM-Zugriffstoken, das Sie zuvor in diesem Verfahren abgerufen haben
  9. Führen Sie einen Redis-Befehl SET und GET aus, um zu prüfen, ob Sie eine authentifizierte Verbindung zu Ihrem Knoten haben.

  10. Löschen Sie die Compute Engine-VM die Sie zum Herstellen einer Verbindung zum Cluster verwendet haben. So vermeiden Sie, dass Ihrem Cloud-Rechnungskonto Gebühren in Rechnung gestellt werden.

Abrufen von Zugriffstokens automatisieren

  1. Optional: Wenn Sie noch kein Dienstkonto für Ihre Anwendung haben, erstellen Sie eines (siehe Dienstkonto erstellen und verwalten).

    gcloud iam service-accounts create SA_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Ersetzen Sie Folgendes:

    • SA_NAME ist der Name des Dienstkontos.
    • DESCRIPTION ist eine optionale Beschreibung des Dienstkontos.
    • DISPLAY_NAME ist ein Dienstkontoname, der in der Google Cloud Console angezeigt werden soll.
  2. Weisen Sie Ihrem Dienstkonto die Rolle redis.dbConnectionUser in Ihrem Projekt zu.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --role=roles/"ROLE_NAME"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • SA_NAME: der Name des Dienstkontos.
    • ROLE_NAME: ein Rollenname. In diesem Beispiel: redis.dbConnectionUser.
  3. Authentifizieren Sie Ihre Anwendung als das angegebene Dienstkonto. Weitere Informationen finden Sie unter Dienstkonten.

Codebeispiel für die Verbindung zu einer Instanz, die die IAM-Authentifizierung verwendet

Hier finden Sie ein Codebeispiel, das zeigt, wie Sie Ihre Anwendung mit gängigen Clientbibliotheken authentifizieren können. Außerdem erfahren Sie, wie Sie dieses Codebeispiel verwenden, um eine Verbindung zu einer Instanz herzustellen, die die IAM-Authentifizierung verwendet.

Fehlermeldungen bei der IAM-Authentifizierung beheben

Fehlermeldung Empfohlene Maßnahmen Beschreibung

-WRONGPASS invalid username-password pair or user is disabled

Überprüfen Sie das Zugriffstoken, das dem Memorystore for Redis Cluster-Server bereitgestellt wurde, und prüfen Sie, ob der entsprechende ACL-Nutzer aktiviert ist.

Dem IAM-Hauptkonto fehlen die erforderlichen Berechtigungen, das von Ihnen bereitgestellte Zugriffstoken ist ungültig oder der entsprechende ACL-Nutzer ist deaktiviert.

Prüfen Sie, ob das Zugriffstoken abgelaufen ist und ob Sie es gemäß der Anleitung unter Verbindung zu einer Instanz herstellen, die die IAM-Authentifizierung verwendet abgerufen haben.

Wenn Sie die IAM-Berechtigungen vor Kurzem geändert haben, kann es einige Minuten dauern, bis die Berechtigungen übernommen werden.

-NOAUTH Authentication required

Prüfen Sie, ob die Anwendung so konfiguriert ist, dass sie dem Memorystore for Redis Cluster-Server ein IAM-Zugriffstoken bereitstellt.

Die Anwendung stellt dem Memorystore for Redis Cluster-Server kein Zugriffstoken bereit.

Prüfen Sie, ob die Anwendung so konfiguriert ist, dass sie ein Zugriffstoken bereitstellt, und ob Sie das Zugriffstoken gemäß der Anleitung unter Verbindung zu einer Instanz herstellen, die die IAM-Authentifizierung verwendet abgerufen haben.

-ERR (ERR_IAM_EXHAUSTED) Memorystore IAM authentication backend quota exceeded.

Wiederholen Sie den Vorgang mit exponentiellem Backoff.

Das IAM-Backend ist überlastet und hat dem Memorystore for Redis Cluster-Server einen Fehler wegen Überschreitung des Kontingents zurückgegeben.

Um weitere Verbindungsfehler zu vermeiden, empfehlen wir, dass Anwendungen diesen Fehler mit exponentiellem Backoff wiederholen.

-ERR (ERR_IAM_OTHER) Memorystore IAM authentication backend error.

Prüfen Sie den Nutzernamen oder wiederholen Sie den Vorgang mit exponentiellem Backoff.

Dieser Fehler kann folgende Ursachen haben:

  • Der von Ihnen angegebene Nutzername ist ungültig. Sie können den default Nutzernamen verwenden, den Nutzernamen weglassen oder die E-Mail-Adresse des IAM-Hauptkontos verwenden.
  • Das IAM-Backend hat dem Memorystore for Redis Cluster-Server einen vorübergehenden Fehler zurückgegeben.

Wenn der Nutzername gültig ist, empfehlen wir, dass Ihre Anwendung diesen Fehler mit exponentiellem Backoff wiederholt, um weitere Verbindungsfehler zu vermeiden.