Esta página aplica-se ao Apigee, mas não ao Apigee Hybrid.
O Apigee suporta a autenticação e a autorização baseadas na IAM para proxies de API. Para usar esta funcionalidade, inclua a política VerifyIAM no fluxo de pedidos do proxy e configure o identificador do utilizador (normalmente, o endereço de email) do consumidor da API para ter o Google Cloud papel ou as autorizações do IAM necessários para invocar as APIs Apigee. O pedido de API deve transmitir uma chave de acesso Google Cloud válida para esse utilizador.
Os administradores podem conceder autorização a qualquer Google Cloud principal, não apenas a utilizadores individuais.
Use o controlo de acesso baseado na IAM
Esta secção descreve o processo completo de configuração da autenticação e autorização baseadas na IAM, como os pedidos são avaliados assim que o acesso é configurado e como revogar o acesso para consumidores da API que tiveram acesso anteriormente.
Adicione a gestão de acessos
Para configurar a gestão de acesso para um proxy de API:
- Adicione a política VerifyIAM ao proxy ou aos proxies da API Apigee como parte do fluxo do pedido.
- O administrador do Google Cloud para o projeto do Apigee:
- Concede
a função IAM
deploymentInvoker
(ou uma função personalizada com a autorização IAMapigee.deployments.invoke
) ao principal Google Cloud do consumidor da API ao nível do projeto. Isto dá ao consumidor da API acesso para invocar todas as APIs alojadas na organização do Apigee associada.
ou - Usa a ação
SetIamPolicy
para conceder a função ou a autorização ao principal do consumidor da API num determinado Google Cloud implementação ou iterativamente em várias implementações. Use a operação list no recurso de implementação para ver todas as implementações num ambiente, incluindo proxies de API e fluxos partilhados. O nome da implementação é o nome do proxy da API ou do fluxo partilhado.
- Concede
a função IAM
- Indique ao consumidor da API que
gere um token de acesso,
que vai transmitir no pedido da API Apigee para a verificação de autorização. O token gerado
tem de ter o âmbito de autorização
https://www.googleapis.com/auth/cloud-platform
.
Operações de administração
Esta secção lista as ações que os administradores de APIs (produtores de APIs) realizam quando gerem autorizações baseadas na IAM.
A documentação das operações baseadas em API usadas na gestão do acesso baseado na IAM encontra-se na documentação de referência da API
organizations.environments
e
organizations.environments.deployments
e inclui as operações SetIamPolicy
,
GetIamPolicy
, TestIamPermissions
e
GetDeployment
.
Esta tabela mapeia as operações para as autorizações necessárias:
Operação de administrador | Ação | Autorização de IAM necessária | Recurso de IAM no qual a autorização é necessária* |
---|---|---|---|
GetDeployment | Recupere informações para uma implementação num ambiente do Apigee | apigee.deployments.get | Projeto do Google Cloud ou ambiente Apigee |
ListDeployments | Apresente a lista das implementações num ambiente do Apigee | apigee.deployments.list | Projeto ou ambiente do Apigee |
Definir Política IAM | Defina o acesso de invocação para consumidores de API numa implementação de API específica | apigee.deployments.setIamPolicy | Projeto do Google Cloud ou ambiente Apigee |
Obter Política IAM | Obtenha o conjunto de definições de acesso de invocação para uma implementação de API | apigee.deployments.getIamPolicy | Projeto do Google Cloud ou ambiente Apigee |
TestIamPermissions | Verifique se o utilizador que chama esta API tem a autorização mencionada na carga útil | Não é necessária autorização de IAM | N/A |
Verificação de acesso em tempo de execução
Quando o consumidor da API tenta aceder a uma API com controlo de acesso baseado no IAM, é feita uma verificação para ver se tem o token de acesso necessário e a função ou a autorização adequada ao nível do projeto ou da implementação. Se for o caso, os utilizadores podem continuar a aceder ao proxy. Caso contrário, são bloqueados.
Remover acesso
Para remover o acesso ao nível do projeto: para remover o acesso de um consumidor da API gerido ao nível do projeto, o administrador da nuvem do projeto do Apigee revoga a função do deploymentInvoker
IAM (ou a função personalizada com a autorização do apigee.deployments.invoke
IAM) do Google Cloud principal do consumidor da API para o Google Cloud projeto.
Se o acesso tiver sido concedido para implementações individuais através de setIamPolicy
,
remova a função ou a autorização das implementações através de outra operação setIamPolicy
.
Características e limitações do controlo de acesso baseado na IAM
Tenha em atenção estas caraterísticas e limitações quando usar a autenticação e a autorização baseadas na IAM:
Normalmente, a execução de políticas com o VerifyIAM demora entre 10 e 50 milissegundos. No entanto, algumas chamadas podem ter latências mais elevadas. Por exemplo, na região
asia-east2
especificamente, a latência média pode aumentar para 50 ms e algumas chamadas podem demorar cerca de 100 ms a serem concluídas.Tenha em atenção que estes valores de latência não são garantidos.
- A inclusão da política VerifyIAM para um proxy é apenas uma verificação validada/não validada; as funções e as autorizações específicas do consumidor da API não são consideradas em processos posteriores no fluxo de pedidos ou respostas.
- Uma vez que é feita uma verificação de autorização apenas no momento da execução da política VerifyIAM, a política VerifyIAM deve ser a primeira no fluxo de pedidos, depois apenas das políticas de gestão de tráfego.
- Se a validação de autorizações for bem-sucedida ou o produtor da API tiver marcado a política VerifyIAM para continuar em caso de erro, o fluxo de pedidos continua a executar as outras políticas, se existirem, alcançando finalmente o servidor de destino. Se a verificação de autorizações falhar e o produtor da API não tiver marcado a política para continuar em caso de erro, o utilizador recebe um erro.
- Adicionar acesso de invocação (
apigee.deployments.invoke
) ao nível do ambiente não transmite o acesso de invocação a todas as implementações de API no ambiente. - As condições da IAM não são suportadas no recurso de implementação e não podem ser usadas para controlar o acesso de invocação. Consulte o artigo Adicionar condições da IAM do Apigee a políticas para mais informações.
- O controlo de acesso baseado na IAM suporta um máximo de 1500 associações de funções numa única política e outras limitações. Consulte as cotas e os limites do IAM.
- O controlo de acesso baseado na IAM está sujeito a atrasos na propagação da IAM.
- A tentativa de gerir outras operações
apigee.deployments
, comoapigee.deployments.delete
, através de setIAMPolicy ao nível da implementação, não é eficaz, mas também não devolve um erro. Apenasapigee.deployements.invoke
é eficaz. - O acesso numa implementação é eliminado quando o proxy correspondente é desimplementado do ambiente ou eliminado. O acesso tem de ser adicionado novamente na reimplementação.
- A autenticação e a autorização baseadas na IAM não estão disponíveis no modo híbrido neste momento.
Exemplos
Esta secção fornece exemplos de concessão e revogação do acesso baseado no IAM a APIs. Estes exemplos partem do princípio de que o VerifyIAM já foi adicionado ao proxy da API adequado.
Nestes exemplos, use a Cloud Console ou o gcloud (mostrado) para gerir funções ou autorizações no principal Google Cloud do consumidor da API.
Conceder e revogar o acesso do utilizador para invocar todas as APIs numa organização do Apigee
Para adicionar acesso, adicione a função deploymentInvoker
:
APIGEE_ORG=GCP_PROJECT USER=USER_EMAIL_HERE gcloud projects add-iam-policy-binding "${APIGEE_ORG}" --member="${USER}" \ --role='roles/apigee.deploymentInvoker'
Para revogar o acesso, remova a função deploymentInvoker
:
APIGEE_ORG=GCP_PROJECT USER=USER_EMAIL_HERE gcloud projects remove-iam-policy-binding "${APIGEE_ORG}" --member="${USER}" \ --role='roles/apigee.deploymentInvoker'
Conceder e revogar o acesso de utilizadores a implementações específicas num ambiente
Para adicionar a função de invocador de um único utilizador a uma implementação específica:
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" } ] } }'
Uma resposta de êxito deve ter um aspeto semelhante ao seguinte:
{ "version": 1, "etag": "BwYT8i40Vwo=", "bindings": [ { "role": "roles/apigee.deploymentInvoker", "members": [ "user:user-email@example.com" ] } ] }
Para adicionar a função de invocador para vários utilizadores a uma implementação específica:
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" } ] } }'
Para consultar o objeto de política que foi definido anteriormente:
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:getIamPolicy" \ --header "Authorization: Bearer $TOKEN"
Deverá ver uma resposta de êxito como a apresentada acima.
O utilizador pode verificar se consegue aceder à implementação especificada (se a autorização apigee.deployments.invoke
estiver definida para o utilizador numa implementação especificada), sem invocar diretamente a API implementada. Para tal, o utilizador pode
enviar este pedido através de uma chave de acesso gerada por si:
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"]}'
A resposta deve incluir a autorização apigee.deployments.invoke
para o utilizador.
Para revogar o acesso numa implementação específica para um único utilizador, remova a função deploymentInvoker
desse utilizador. Para o fazer, obtenha primeiro o objeto de política que está atualmente associado à implementação:
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:getIamPolicy" \ --header "Authorization: Bearer $TOKEN"
A resposta de sucesso deve ter um aspeto semelhante ao seguinte.
{ "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" ] } ] }
Para remover a associação de um único utilizador, use setIamPolicy
e especifique no payload os utilizadores que devem continuar a ter acesso, tal como faria quando definisse o acesso inicial para esses utilizadores. Continuando com o exemplo apresentado acima, se quiser remover o acesso do
USER1, mas manter o acesso do USER2 e USER3, use este 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" } ] } }'
Para remover a associação para todos os utilizadores numa implementação específica, especifique uma carga útil vazia:
curl "https://apigee.googleapis.com/v1/organizations/${APIGEE_ORG}/environments/${ENV}/deployments/${API}:setIamPolicy" \ --header "Authorization: Bearer $TOKEN" \ --header 'Content-Type: application/json' \ --data '{}'
Para verificar se a associação foi removida, certifique-se de que a autorização apigee.deployments.invoke
não existe para o utilizador na implementação:
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"]}'
Isto deve devolver uma resposta adequada; por exemplo, um resultado vazio se nenhum utilizador tiver a autorização para invocar a API.