IAM-basierte API-Authentifizierung – Übersicht

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

Apigee unterstützt die IAM-basierte Authentifizierung und Autorisierung für API-Proxys. Wenn Sie diese Funktion verwenden möchten, fügen Sie die VerifyIAM-Richtlinie in den Anforderungsablauf des Proxys ein und konfigurieren Sie die Nutzer-ID (in der Regel die E-Mail-Adresse) des API-Nutzer so, dass er die erforderliche Google Cloud -IAM-Rolle oder Berechtigungen zum Aufrufen von Apigee-APIs hat. Die API-Anfrage muss ein gültiges Google Cloud Zugriffstoken für diesen Nutzer enthalten.

Administratoren können die Autorisierung für jedes Google Cloud Hauptkonto gewähren, nicht nur für einzelne Nutzer.

IAM-basierte Zugriffssteuerung verwenden

In diesem Abschnitt wird der End-to-End-Prozess für die Einrichtung der IAM-basierten Authentifizierung und Autorisierung beschrieben. Außerdem wird erläutert, wie Anfragen ausgewertet werden, sobald der Zugriff eingerichtet ist, und wie der Zugriff für API-Kunden widerrufen wird, die zuvor Zugriff hatten.

Zugriffsverwaltung hinzufügen

So richten Sie die Zugriffsverwaltung für einen API-Proxy ein:

  1. Fügen Sie die VerifyIAM-Richtlinie als Teil des Anfrageablaufs dem Apigee-API-Proxy oder den Apigee-API-Proxys hinzu.
  2. Der Cloud-Administrator für das Apigee-Projekt:
    1. Gewährt die IAM-Rolle deploymentInvoker (oder eine benutzerdefinierte Rolle mit der IAM-Berechtigung apigee.deployments.invoke) für das Google Cloud -Hauptkonto des API-Nutzer auf Projektebene. Dadurch erhält der API-Nutzer Zugriff zum Aufrufen aller gehosteten APIs in der zugehörigen Apigee-Organisation.

      oder

    2. Verwendet die Aktion SetIamPolicy, um dem Google Cloud -Prinzip des API-Nutzers in einer bestimmten Bereitstellung oder iterativ in mehreren Bereitstellungen die Rolle oder Berechtigung zu gewähren. Verwenden Sie den List-Vorgang für die Bereitstellungsressource, um alle Bereitstellungen in einer Umgebung aufzurufen, einschließlich API-Proxys und freigegebener Abläufe. Der Name der Bereitstellung ist der Name des API-Proxys oder des freigegebenen Ablaufs.
  3. Weisen Sie den API-Nutzer an, ein Zugriffstoken zu generieren, das er in die Apigee API-Anfrage für die Berechtigungsprüfung einfügt. Das generierte Token muss den Auth-Bereich https://www.googleapis.com/auth/cloud-platform haben.

Verwaltungsvorgänge

In diesem Abschnitt werden die Aktionen aufgeführt, die API-Administratoren (API-Produzenten) beim Verwalten von IAM-basierten Berechtigungen ausführen.

Die Dokumentation für API-basierte Vorgänge, die beim Verwalten des IAM-basierten Zugriffs verwendet werden, finden Sie in der API-Referenzdokumentation für organizations.environments und organizations.environments.deployments. Sie umfasst die Vorgänge SetIamPolicy, GetIamPolicy, TestIamPermissions und GetDeployment.

In dieser Tabelle werden Vorgänge den erforderlichen Berechtigungen zugeordnet:

Admin-Vorgang Aktion Erforderliche IAM-Berechtigung IAM-Ressource, für die die Berechtigung erforderlich ist*
GetDeployment Informationen zu einer Bereitstellung in einer Apigee-Umgebung abrufen apigee.deployments.get Google Cloud-Projekt oder Apigee-Umgebung
ListDeployments Deployments in einer Apigee-Umgebung auflisten apigee.deployments.list Projekt oder Apigee-Umgebung
SetIamPolicy Aufrufszugriff für API-Nutzer in einer bestimmten API-Bereitstellung festlegen apigee.deployments.setIamPolicy Google Cloud-Projekt oder Apigee-Umgebung
GetIamPolicy Abrufen der Einstellungen für den Aufrufzugriff für eine API-Bereitstellung apigee.deployments.getIamPolicy Google Cloud-Projekt oder Apigee-Umgebung
TestIamPermissions Prüfen, ob der Nutzer, der diese API aufruft, die in der Nutzlast erwähnte Berechtigung hat Keine IAM-Berechtigung erforderlich
* Das Google Cloud Projekt ist das Projekt, das zum Bereitstellen von Apigee verwendet wird. Berechtigungen auf Apigee-Umgebungsebene werden für die Umgebung mit setIAMPolicy festgelegt.

Laufzeitzugriffsprüfung

Wenn der API-Nutzer versucht, auf eine API mit IAM-basierter Zugriffssteuerung zuzugreifen, wird geprüft, ob er das erforderliche Zugriffstoken und die entsprechende Rolle oder Berechtigung auf Projekt- oder Bereitstellungsebene hat. Wenn ja, dürfen sie weiterhin auf den Proxy zugreifen. Andernfalls werden sie blockiert.

Zugriff entfernen

Zugriff auf Projektebene entfernen:Wenn Sie den Zugriff für einen API-Nutzer entfernen möchten, der auf Projektebene verwaltet wird, widerruft der Cloud-Administrator für das Apigee-Projekt die IAM-Rolle deploymentInvoker (oder die benutzerdefinierte Rolle mit der IAM-Berechtigung apigee.deployments.invoke) für das Google Cloud -Hauptkonto des API-Nutzers für das Google Cloud -Projekt.

Wenn der Zugriff für einzelne Bereitstellungen mit setIamPolicy gewährt wurde,entfernen Sie die Rolle oder Berechtigung aus den Bereitstellungen mit einem anderen setIamPolicy-Vorgang.

Merkmale und Einschränkungen der IAM-basierten Zugriffssteuerung

Beachten Sie die folgenden Merkmale und Einschränkungen bei der Verwendung der IAM-basierten Authentifizierung und Autorisierung:

  • Die Richtlinienausführung mit VerifyIAM dauert in der Regel zwischen 10 und 50 Millisekunden. Bei einigen Anrufen kann es jedoch zu höheren Latenzen kommen. In der Region asia-east2 kann die durchschnittliche Latenz beispielsweise auf 50 ms ansteigen und einige Aufrufe können etwa 100 ms dauern.

    Beachten Sie, dass diese Latenzwerte nicht garantiert werden können.

  • Die Einbeziehung der VerifyIAM-Richtlinie für einen Proxy ist nur eine Prüfung, ob der API-Nutzer verifiziert ist. Die spezifischen Rollen und Berechtigungen des API-Nutzers werden in späteren Prozessen im Anfrage- oder Antwortablauf nicht berücksichtigt.
  • Da eine Autorisierungsprüfung nur zum Zeitpunkt der Ausführung der VerifyIAM-Richtlinie erfolgt, sollte VerifyIAM die erste Richtlinie im Anfrageablauf sein, nach Richtlinien für die Traffic-Verwaltung.
  • Wenn die Berechtigungsüberprüfung erfolgreich ist oder der API-Ersteller die VerifyIAM-Richtlinie so markiert hat, dass sie bei einem Fehler fortgesetzt wird, wird der Anfrageablauf mit den anderen Richtlinien fortgesetzt und erreicht schließlich den Zielserver. Wenn die Berechtigungsprüfung fehlschlägt und der API-Ersteller die Richtlinie nicht so markiert hat, dass sie bei einem Fehler fortgesetzt wird, erhält der Nutzer eine Fehlermeldung.
  • Wenn Sie den Aufrufzugriff (apigee.deployments.invoke) auf Umgebungsebene hinzufügen, wird der Aufrufzugriff nicht auf alle API-Bereitstellungen in der Umgebung übertragen.
  • IAM-Bedingungen werden für die Bereitstellungsressource nicht unterstützt und können nicht verwendet werden, um den Aufrufzugriff zu steuern. Weitere Informationen finden Sie unter Apigee IAM Conditions zu Richtlinien hinzufügen.
  • Die IAM-basierte Zugriffssteuerung unterstützt maximal 1.500 Rollenbindungen in einer einzelnen Richtlinie und unterliegt weiteren Einschränkungen. Weitere Informationen finden Sie unter IAM-Kontingente und ‑Limits.
  • Die IAM-basierte Zugriffssteuerung unterliegt IAM-Verzögerungen.
  • Der Versuch, andere apigee.deployments-Vorgänge wie apigee.deployments.delete über die setIAMPolicy auf Bereitstellungsebene zu verwalten, ist nicht effektiv, führt aber auch nicht zu einem Fehler. Nur apigee.deployements.invoke ist wirksam.
  • Der Zugriff auf eine Bereitstellung wird gelöscht, wenn der entsprechende Proxy aus der Umgebung entfernt oder gelöscht wird. Der Zugriff muss bei der erneuten Bereitstellung wieder hinzugefügt werden.
  • Die IAM-basierte Authentifizierung und Autorisierung ist derzeit nicht in Hybrid verfügbar.

Beispiele

In diesem Abschnitt finden Sie Beispiele für das Gewähren und Widerrufen von IAM-basiertem Zugriff auf APIs. In diesen Beispielen wird davon ausgegangen, dass „VerifyIAM“ dem entsprechenden API-Proxy bereits hinzugefügt wurde.

Verwenden Sie in diesen Beispielen entweder die Cloud Console oder gcloud (siehe unten), um Rollen oder Berechtigungen für das Google Cloud -Hauptkonto des API-Nutzerkontos zu verwalten.

Nutzerzugriff zum Aufrufen aller APIs in einer Apigee-Organisation gewähren und widerrufen

So fügen Sie Zugriffsrechte hinzu:deploymentInvoker

APIGEE_ORG=GCP_PROJECT
USER=USER_EMAIL_HERE
gcloud projects add-iam-policy-binding "${APIGEE_ORG}" --member="${USER}" \
    --role='roles/apigee.deploymentInvoker'
  

So widerrufen Sie den Zugriff:deploymentInvoker

APIGEE_ORG=GCP_PROJECT
USER=USER_EMAIL_HERE
gcloud projects remove-iam-policy-binding "${APIGEE_ORG}" --member="${USER}" \
    --role='roles/apigee.deploymentInvoker'
 

Nutzerzugriff auf bestimmte Bereitstellungen in einer Umgebung gewähren und widerrufen

So fügen Sie die Aufruferrolle für einen einzelnen Nutzer zu einer bestimmten Bereitstellung hinzu:

APIGEE_ORG=GCP_PROJECT
ENV=APIGEE_ENVIRONMENT
API=APIPROXY_NAME
USER=USER_EMAIL_HERE
TOKEN=$(gcloud auth print-access-token)
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:setIamPolicy" \
  --header "Authorization: Bearer $TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{
  "policy": {
    "bindings": [
      {
        "members": [
          "user:'"$USER"'"
        ],
        "role": "roles/apigee.deploymentInvoker"
      }
    ]
  }
}'
  

Eine Erfolgsantwort sollte in etwa so aussehen:

{
    "version": 1,
    "etag": "BwYT8i40Vwo=",
    "bindings": [
      {
        "role": "roles/apigee.deploymentInvoker",
        "members": [
          "user:user-email@example.com"
        ]
      }
    ]
  }

So fügen Sie die Aufruferrolle für mehrere Nutzer zu einer bestimmten Bereitstellung hinzu:

APIGEE_ORG=GCP_PROJECT
ENV=APIGEE_ENVIRONMENT
API=APIPROXY_NAME
USER1=EMAIL_FOR_USER1
USER2=EMAIL_FOR_USER2
USER3=EMAIL_FOR_USER3
TOKEN=$(gcloud auth print-access-token)
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:setIamPolicy" \
  --header "Authorization: Bearer $TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{
  "policy": {
    "bindings": [
      {
        "members": [
        "user:'"$USER1"'",
        "user:'"$USER2"'",
        "user:'"$USER3"'"
        ],
        "role": "roles/apigee.deploymentInvoker"
      }
    ]
  }
}'
  

So fragen Sie das Richtlinienobjekt ab, das zuvor festgelegt wurde:

curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:getIamPolicy" \
  --header "Authorization: Bearer $TOKEN"
  

Sie sollten eine Erfolgsmeldung wie oben sehen.

Der Nutzer kann prüfen, ob er auf die angegebene Bereitstellung zugreifen kann (ob die Berechtigung apigee.deployments.invoke für den Nutzer in einer bestimmten Bereitstellung festgelegt ist), ohne die bereitgestellte API direkt aufzurufen. Dazu kann der Nutzer diese Anfrage mit einem von ihm generierten Zugriffstoken senden:

APIGEE_ORG=GCP_PROJECT
ENV=APIGEE_ENVIRONMENT
API=APIPROXY_NAME
USER=USER_EMAIL_HERE
TOKEN=$(gcloud auth print-access-token)
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:testIamPermissions" \
    --header "Authorization: Bearer $TOKEN" \
    --header 'Content-Type: application/json' \
    --data '{"permissions":["apigee.deployments.invoke"]}'

Die Antwort sollte die Berechtigung apigee.deployments.invoke für den Nutzer enthalten.

Wenn Sie den Zugriff auf eine bestimmte Bereitstellung für einen einzelnen Nutzer widerrufen möchten, entfernen Sie die Rolle deploymentInvoker für diesen Nutzer. Rufen Sie dazu zuerst das Richtlinienobjekt ab, das derzeit mit der Bereitstellung verknüpft ist:

curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:getIamPolicy" \
  --header "Authorization: Bearer $TOKEN"
  

Die Erfolgsantwort sollte in etwa so aussehen:

{
  "version": 1,
  "etag": "BwYT8i40Vwo=",
  "bindings": [
      {
        "role": "roles/apigee.deploymentInvoker",
        "members": [
          "user:user1-email@example.com",
          "user:user2-email@example.com",
          "user:user3-email@example.com"
        ]
      }
    ]
  }

Wenn Sie die Bindung für einen einzelnen Nutzer entfernen möchten, verwenden Sie setIamPolicy und geben Sie in der Nutzlast die Nutzer an, die weiterhin Zugriff haben sollen, so wie Sie es beim Festlegen des anfänglichen Zugriffs für diese Nutzer tun würden. Wenn Sie im obigen Beispiel den Zugriff für USER1 entfernen, aber den Zugriff für USER2 und USER3 beibehalten möchten, verwenden Sie diesen Befehl:

curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:setIamPolicy" \
  --header "Authorization: Bearer $TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{
  "policy": {
    "bindings": [
      {
        "members": [
        "user:'"$USER2"'",
        "user:'"$USER3"'"
        ],
        "role": "roles/apigee.deploymentInvoker"
      }
    ]
  }
}'

Wenn Sie die Bindung für alle Nutzer in einer bestimmten Bereitstellung entfernen möchten, geben Sie eine leere Nutzlast an:

  curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:setIamPolicy" \
    --header "Authorization: Bearer $TOKEN" \
    --header 'Content-Type: application/json' \
    --data '{}'
  

Prüfen Sie, ob die Bindung entfernt wurde. Die Berechtigung apigee.deployments.invoke darf für den Nutzer in der Bereitstellung nicht vorhanden sein:

curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:testIamPermissions" \
    --header "Authorization: Bearer $TOKEN" \
    --header 'Content-Type: application/json' \
    --data '{"permissions":["apigee.deployments.invoke"]}'

Daraufhin sollte eine entsprechende Antwort zurückgegeben werden, z. B. eine leere Ausgabe, wenn keine Nutzer die Berechtigung zum Aufrufen der API haben.