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:
- Fügen Sie die VerifyIAM-Richtlinie als Teil des Anfrageablaufs dem Apigee-API-Proxy oder den Apigee-API-Proxys hinzu.
- Der Cloud-Administrator für das Apigee-Projekt:
- Gewährt die IAM-Rolle
deploymentInvoker
(oder eine benutzerdefinierte Rolle mit der IAM-Berechtigungapigee.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 - 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.
- Gewährt die IAM-Rolle
- 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 | – |
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 wieapigee.deployments.delete
über die setIAMPolicy auf Bereitstellungsebene zu verwalten, ist nicht effektiv, führt aber auch nicht zu einem Fehler. Nurapigee.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.