Para personalizar políticas de controle de acesso, como autorizar solicitações com base em nomes de host HTTP, caminhos ou métodos, use um serviço de autorização personalizada em um gateway de entrada ASM. Isso garante que apenas usuários autorizados acessem seus serviços críticos.
Pré-requisitos
Visão geral
Quando um cliente envia uma solicitação, o backend precisa verificar sua validade, por exemplo, checando se o usuário tem permissão para acessar o recurso solicitado. Após uma autorização bem-sucedida, talvez seja necessário adicionar informações à resposta que não estavam na solicitação original, como um número de versão do serviço ou um ID de usuário no cabeçalho. O ASM fornece um serviço de autorização personalizada. Adicione um fluxo de autorização em um gateway de entrada ASM para garantir que os serviços críticos sejam acessados apenas com a devida autorização.
Um serviço de autorização personalizada é um serviço desenvolvido por você. Este tópico usa um serviço de autorização simples e pré-construído como exemplo. Ele direciona solicitações específicas que chegam ao gateway de entrada para o serviço de autorização personalizada, que decide se permite ou nega a solicitação. O gateway de entrada aplica essa decisão. Configure as duas partes a seguir:
Os detalhes de integração entre o gateway de entrada e o serviço de autorização personalizada.
As regras que especificam quais solicitações exigem autorização personalizada.
O serviço de autorização personalizada é um recurso avançado de segurança do Service Mesh. Se você tiver requisitos simples, considere usar uma lista de bloqueios/permissões de gateway ou uma política de autorização padrão. Para lógicas mais complexas, siga as etapas deste tópico.
Fluxo de implementação
O ASM encapsula o recurso de autorização personalizada do Istio. Caso queira entender a implementação nativa do Istio, inspecione os recursos nativos do Istio gerados pelo ASM. O fluxo de implementação para um serviço de autorização personalizada do ASM é o seguinte:
Defina um serviço de autorização personalizada no ASM e associe-o ao serviço implantado na Etapa 1. Isso permite que o ASM use o serviço para autorização.
No ASM, crie uma política de autorização para configurar a aplicação que requer autorização personalizada e direcione a autorização para o serviço de autorização personalizada configurado na Etapa 2.

Etapa 1: Implante o serviço de autorização personalizada
Implante um serviço de autorização personalizada no seu cluster ACK. O serviço deve estar em conformidade com a especificação da API de serviço de autorização personalizada do Istio e suportar os protocolos HTTP e gRPC para implementar lógica personalizada. O serviço de exemplo usado neste tópico exige que as solicitações incluam o cabeçalho x-ext-authz: allow para passar pela autorização.
Este tópico fornece um exemplo de serviço de autorização personalizada. Use o código dele como referência para criar o seu próprio. Para mais informações, consulte Autorização personalizada.
-
Crie um arquivo chamado ext-authz.yaml com o conteúdo a seguir.
-
Execute o comando a seguir para implantar o serviço de autorização personalizada no seu cluster.
Para saber como gerenciar clusters e aplicações com kubectl, consulte Conectar-se a um cluster usando kubectl.
kubectl apply -f ext-authz.yaml -
Execute o comando a seguir para verificar o status do pod.
kubectl get podSaída esperada:
NAME READY STATUS RESTARTS AGE ext-authz-6d458d5f8f-bh2m9 2/2 Running 0 1m -
Execute o comando a seguir para verificar se a aplicação está em execução corretamente.
kubectl logs "$(kubectl get pod -l app=ext-authz -n default -o jsonpath={.items..metadata.name})" -n default -c ext-authzSaída esperada:
2023/12/12 10:01:31 Starting HTTP server at [::]:8000 2023/12/12 10:01:31 Starting gRPC server at [::]:9000Essa saída confirma que o serviço está em execução corretamente.
-
Obtenha as portas gRPC e HTTP do serviço de autorização ext-authz.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página Services, clique em ext-authz.
Na seção Endpoint, verifique que a porta gRPC é 9000 e a porta HTTP é 8000. Portanto, o endereço do serviço gRPC é ext-authz.default.svc.cluster.local:9000 e o endereço do serviço HTTP é ext-authz.default.svc.cluster.local:8000.
Etapa 2: Configure um serviço de autorização personalizada HTTP
Configure os recursos de autorização personalizada do gateway de entrada ASM no console ASM.
Faça login no console ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, clique no nome do gateway de destino.
Na página de visão geral do gateway, clique em no painel de navegação.
-
No assistente de Custom Authorization Service Configuration, ative a chave Enable Gateway Custom Authorization Service, configure o serviço usando um dos métodos a seguir e clique em Next.
Método 1: Criar um novo serviço de autorização personalizada
Na aba Custom authorization service (HTTP or gRPC protocol) implemented based on envoy.ext_authz, configure os parâmetros. Para obter uma descrição dos parâmetros, consulte Conectar-se a um serviço de autorização personalizada que usa o protocolo HTTP. Configure os seguintes parâmetros obrigatórios no formulário: defina Protocol como
HTTP, Service Address comoext-authz.default.svc.cluster.local, Service Port como8000(intervalo válido: 1–65535) e Timeout como10segundos. Ative Include headers in the authorization request (includeRequestHeadersInCheck) e adicione os cabeçalhos da solicitação original a serem encaminhados, incluindocookie,x-forwarded-access-token,x-forwarded-user,x-forwarded-email,authorization,x-forwarded-proto,proxy-authorization,user-agent,x-forwarded-host,from,x-forwarded-for,acceptex-ext-authz(um cabeçalho estendido personalizado). Ative Override headers on allow (headersToUpstreamOnAllow) e adicione os seguintes cabeçalhos:authorization,cookie,path,x-auth-request-access-token,x-forwarded-access-tokenex-ext-authz-check-result. Ative Override headers on deny (headersToDownstreamOnDeny) e adicione os seguintes cabeçalhos:content-type,set-cookieex-ext-authz-check-result. O cabeçalhox-ext-authz-check-resulté essencial e deve ser configurado em ambas as listas. Clique em Next.Método 2: Importar um serviço de autorização personalizada existente
Na aba Import existing Custom Authorization Service, selecione um Existing Custom Authorization Service.
-
No assistente de Matching Rules, configure as seguintes definições e clique em Submit.
Solicitações correspondentes a esta regra acionarão a autorização personalizada. Defina Match Mode como Selected requests must be authorized e Match Rule como Custom match rules. Ative a chave HTTP Path e insira
/productpage. Mantenha as outras opções de regra (HTTP Hostname, HTTP Method e Port) desativadas.Ao concluir a configuração, uma mensagem confirma que o Gateway Custom Authorization Service Created successfully.
Etapa 3: Verifique o serviço de autorização personalizada
-
Execute o comando a seguir para acessar o recurso no caminho
/api/v1/productsno gateway.Para saber como obter o endereço do gateway, consulte Obter o endereço IP de um gateway de entrada.
curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/api/v1/productsSaída esperada:
HTTP/1.1 200 OK server: istio-envoy date: Wed, 13 Dec 2023 02:41:20 GMT content-type: application/json content-length: 395 x-envoy-upstream-service-time: 1Esse resultado indica que a autorização não foi acionada. O caminho de acesso é
/api/v1/products, e não o/productpageconfigurado; portanto, a solicitação não corresponde à política de autorização. -
Execute o comando a seguir para acessar o caminho
/productpagecom um cabeçalhox-ext-authz: deny.curl -I -H "x-ext-authz: deny" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpageSaída esperada:
HTTP/1.1 403 Forbidden x-ext-authz-check-result: denied date: Wed, 13 Dec 2023 02:42:59 GMT server: istio-envoy transfer-encoding: chunkedEsse resultado mostra que a autorização foi acionada, mas falhou. A resposta inclui o cabeçalho recém-definido
x-ext-authz-check-result: denied. Como o caminho de acesso é/productpage, ele corresponde à política de autorização. -
Execute o comando a seguir para acessar o caminho
/productpagecom um cabeçalhox-ext-authz: allow.curl -I -H "x-ext-authz: allow" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpageSaída esperada:
HTTP/1.1 200 OK server: istio-envoy date: Wed, 13 Dec 2023 02:50:38 GMT content-type: text/html; charset=utf-8 content-length: 5290 x-envoy-upstream-service-time: 47Esse resultado confirma que a solicitação foi autorizada com sucesso. O serviço de autorização personalizada de exemplo adiciona esse cabeçalho à resposta, e o gateway está configurado para encaminhá-lo à aplicação upstream após a autorização bem-sucedida.
Documentação relacionada
Os gateways de entrada ASM suportam a configuração de lista de bloqueios/permissões com base em endereço IP de origem, nome de host HTTP e porta para proteger aplicações no mesh. Para mais informações, consulte Configurar uma lista de bloqueios/permissões para um gateway de entrada.
É possível implementar logon único (SSO) com Alibaba Cloud IDaaS ou outros provedores de identidade compatíveis com OIDC sem modificar sua aplicação. Para mais informações, consulte Configurar SSO baseado em OIDC em um gateway de entrada.