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
SetIamPolicypara 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-east2especificamente, 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.