Questa pagina si applica ad Apigee, ma non ad Apigee hybrid.
Apigee supporta l'autenticazione e l'autorizzazione basate su IAM per i proxy API. Per utilizzare questa funzionalità, includere il criterio VerifyIAM nel flusso di richieste del proxy e configurare l'identificatore utente (di solito l'indirizzo email) del consumatore dell'API in modo che disponga del ruolo o delle autorizzazioni Google Cloud IAM necessarie per richiamare le API Apigee. La richiesta dell'API deve trasmettere un Google Cloud token di accesso valido per l'utente.
Gli amministratori possono concedere l'autorizzazione a qualsiasi principaleGoogle Cloud , non solo ai singoli utenti.
Utilizzare il controllo dell'accesso basato su IAM
Questa sezione descrive la procedura end-to-end per la configurazione dell'autenticazione e dell'autorizzazione basate su IAM, la modalità di valutazione delle richieste una volta configurato l'accesso e come revocare l'accesso per i consumer dell'API che hanno avuto accesso in precedenza.
Aggiungi gestione dell'accesso
Per configurare la gestione dell'accesso per un proxy API:
- Aggiungi il criterio VerifyIAM al proxy o ai proxy API Apigee nell'ambito del flusso di richiesta.
- L'amministratore Cloud del progetto Apigee:
- Concede
il ruolo IAM
deploymentInvoker
(o un ruolo personalizzato con l'autorizzazione IAMapigee.deployments.invoke
) all' Google Cloud principale del consumatore dell'API a livello di progetto. In questo modo, il consumer dell'API può invocare tutte le API ospitate nell'organizzazione Apigee associata.
o - Utilizza l'azione
SetIamPolicy
per concedere il ruolo o l'autorizzazione al principio Google Cloud del consumatore dell'API in un determinato deployment o in modo iterativo in più deployment. Utilizza l'operazione di elenco sulla risorsa di deployment per visualizzare tutti i deployment all'interno di un ambiente, inclusi i proxy API e i flussi condivisi. Il nome del deployment è il nome del proxy API o del flusso condiviso.
- Concede
il ruolo IAM
- Chiedi al consumatore dell'API di
generare un token di accesso,
che verrà passato all'interno della richiesta dell'API Apigee per il controllo delle autorizzazioni. Il token generato deve avere l'ambito di autorizzazione
https://www.googleapis.com/auth/cloud-platform
.
Operazioni di amministrazione
Questa sezione elenca le azioni intraprese dagli amministratori dell'API (produttori di API) durante la gestione delle autorizzazioni basate su IAM.
La documentazione per le operazioni basate su API utilizzate per gestire l'accesso basato su IAM è disponibile nella documentazione di riferimento dell'API
organizations.environments
e
organizations.environments.deployments
e include le operazioni SetIamPolicy
,
GetIamPolicy
, TestIamPermissions
e
GetDeployment
.
Questa tabella mappa le operazioni alle autorizzazioni richieste:
Operazione di amministrazione | Azione | Autorizzazione IAM necessaria | Risorsa IAM per cui è necessaria l'autorizzazione* |
---|---|---|---|
GetDeployment | Recuperare informazioni per un deployment in un ambiente Apigee | apigee.deployments.get | Progetto Google Cloud o ambiente Apigee |
ListDeployments | Elenco dei deployment in un ambiente Apigee | apigee.deployments.list | Progetto o ambiente Apigee |
SetIamPolicy | Impostare l'accesso invocazione per i consumer dell'API in un determinato deployment dell'API | apigee.deployments.setIamPolicy | Progetto Google Cloud o ambiente Apigee |
GetIamPolicy | Recupera l'insieme di impostazioni di accesso all'invocazione per un deployment dell'API | apigee.deployments.getIamPolicy | Progetto Google Cloud o ambiente Apigee |
TestIamPermissions | Controlla se l'utente che chiama questa API dispone dell'autorizzazione indicata nel payload | Nessuna autorizzazione IAM richiesta | N/D |
Controllo dell'accesso in runtime
Quando il consumatore dell'API tenta di accedere a un'API con controllo dell'accesso basato su IAM, viene eseguito un controllo per verificare se dispone del token di accesso necessario e del ruolo o dell'autorizzazione appropriati a livello di progetto o di implementazione. In questo caso, può continuare ad accedere al proxy. In caso contrario, vengono bloccati.
Rimuovi accesso
Per rimuovere l'accesso a livello di progetto: per rimuovere l'accesso per un consumatore di API gestito a livello di progetto, l'amministratore cloud del progetto Apigee revoca il ruolo IAM deploymentInvoker
(o il ruolo personalizzato con l'autorizzazione IAM apigee.deployments.invoke
) dall'entità Google Cloud del consumatore di API per il progetto Google Cloud .
Se l'accesso è stato concesso per singoli implementazioni utilizzando setIamPolicy
,
rimuovi il ruolo o l'autorizzazione dalle implementazioni utilizzando un'altra operazione setIamPolicy
.
Caratteristiche e limitazioni del controllo degli accessi basato su IAM
Tieni presente queste caratteristiche e limitazioni quando utilizzi l'autenticazione e l'autorizzazione basate su IAM:
In genere, l'esecuzione dei criteri con VerifyIAM richiede tra 10 e 50 millisecondi. Tuttavia, alcune chiamate potrebbero presentare latenze più elevate. Ad esempio, nella regione
asia-east2
in particolare, la latenza media può aumentare fino a 50 ms e alcune chiamate potrebbero richiedere circa 100 ms per essere completate.Tieni presente che questi valori di latenza non sono garantiti.
- L'inclusione del criterio VerifyIAM per un proxy è solo un controllo di verifica/non verifica; i ruoli e le autorizzazioni specifici del consumatore dell'API non vengono considerati nelle fasi successive del flusso di richiesta o risposta.
- Poiché un controllo dell'autorizzazione viene eseguito solo al momento dell'esecuzione del criterio VerifyIAM, VerifyIAM deve essere il primo criterio nel flusso di richiesta, dopo solo i criteri di gestione del traffico.
- Se la convalida delle autorizzazioni va a buon fine o se il produttore dell'API ha contrassegnato il criterio VerifyIAM per continuare in caso di errore, il flusso di richieste continua a eseguire gli altri criteri, se presenti, fino a raggiungere il server di destinazione. Se il controllo delle autorizzazioni non va a buon fine e il produttore dell'API non ha contrassegnato il criterio per continuare in caso di errore, l'utente riceve un messaggio di errore.
- L'aggiunta dell'accesso invocazione (
apigee.deployments.invoke
) a livello di ambiente non consente di trasmettere l'accesso invocazione a tutti i deployment dell'API all'interno dell'ambiente. - Le condizioni IAM non sono supportate nella risorsa di deployment e non possono essere utilizzate per controllare l'accesso all'invoke. Per ulteriori informazioni, consulta Aggiunta di condizioni IAM di Apigee ai criteri.
- Il controllo dell'accesso basato su IAM supporta al massimo 1500 associazioni di ruolo all'interno di un singolo criterio e altre limitazioni. Consulta Quote e limiti di IAM.
- Il controllo dell'accesso basato su IAM è soggetto a tempi di propagazione IAM.
- Il tentativo di gestire altre operazioni
apigee.deployments
, ad esempioapigee.deployments.delete
tramite setIAMPolicy a livello di deployment, non sarà efficace, ma non restituirà nemmeno un errore. Soloapigee.deployements.invoke
è efficace. - L'accesso a un deployment viene eliminato quando il proxy corrispondente viene ritirato dall'ambiente o eliminato. L'accesso deve essere aggiunto di nuovo al nuovo deployment.
- Al momento, l'autenticazione e l'autorizzazione basate su IAM non sono disponibili in modalità ibrida.
Esempi
Questa sezione fornisce esempi per la concessione e la revoca dell'accesso alle API basato su IAM. Questi esempi presuppongono che VerifyIAM sia già stato aggiunto al proxy API appropriato.
In questi esempi, utilizza la console Cloud o gcloud (mostrato) per gestire i ruoli o le autorizzazioni sul principale Google Cloud del consumatore dell'API.
Concedi e revoca l'accesso degli utenti per richiamare tutte le API in un'organizzazione Apigee
Per aggiungere l'accesso, aggiungi il ruolo deploymentInvoker
:
APIGEE_ORG=GCP_PROJECT USER=USER_EMAIL_HERE gcloud projects add-iam-policy-binding "${APIGEE_ORG}" --member="${USER}" \ --role='roles/apigee.deploymentInvoker'
Per revocare l'accesso, rimuovi il ruolo deploymentInvoker
:
APIGEE_ORG=GCP_PROJECT USER=USER_EMAIL_HERE gcloud projects remove-iam-policy-binding "${APIGEE_ORG}" --member="${USER}" \ --role='roles/apigee.deploymentInvoker'
Concedere e revocare l'accesso degli utenti a implementazioni specifiche all'interno di un ambiente
Per aggiungere il ruolo invocatore per un singolo utente a un deployment specifico:
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" } ] } }'
Una risposta di successo dovrebbe avere il seguente aspetto:
{ "version": 1, "etag": "BwYT8i40Vwo=", "bindings": [ { "role": "roles/apigee.deploymentInvoker", "members": [ "user:user-email@example.com" ] } ] }
Per aggiungere il ruolo invocatore per più utenti a un deployment specifico:
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" } ] } }'
Per eseguire query sull'oggetto criterio impostato in precedenza:
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:getIamPolicy" \ --header "Authorization: Bearer $TOKEN"
Dovresti visualizzare una risposta di successo come quella mostrata sopra.
L'utente può verificare se è in grado di accedere al deployment specificato (se l'autorizzazione apigee.deployments.invoke
è impostata per l'utente in un deployment specificato), senza invocare direttamente l'API di cui è stato eseguito il deployment. A questo scopo, l'utente può
inviare questa richiesta utilizzando un token di accesso generato da lui:
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"]}'
La risposta deve includere l'autorizzazione apigee.deployments.invoke
per l'utente.
Per revocare l'accesso a un deployment specifico per un singolo utente, rimuovi il ruolo
deploymentInvoker
per l'utente in questione. Per farlo, ottieni prima l'oggetto criterio attualmente associato al deployment:
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:getIamPolicy" \ --header "Authorization: Bearer $TOKEN"
La risposta di successo dovrebbe avere il seguente aspetto.
{ "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" ] } ] }
Per rimuovere il vincolo per un singolo utente, utilizza setIamPolicy
e specifica nel payload gli utenti che devono continuare ad avere accesso, come faresti quando imposti l'accesso iniziale per questi utenti. Continuando con l'esempio mostrato sopra, se vuoi rimuovere l'accesso per USER1, ma mantenere l'accesso per USER2 e USER3, utilizza questo comando:
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" } ] } }'
Per rimuovere il vincolo per tutti gli utenti di un deployment specifico, specifica un payload vuoto:
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:setIamPolicy" \ --header "Authorization: Bearer $TOKEN" \ --header 'Content-Type: application/json' \ --data '{}'
Per verificare che il vincolo sia stato rimosso, assicurati che l'autorizzazione apigee.deployments.invoke
non esista per l'utente nel deployment:
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"]}'
Dovrebbe restituire una risposta appropriata, ad esempio un output vuoto se nessun utente ha l'autorizzazione per richiamare l'API.