Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Use autorização personalizada em um gateway de entrada ASM

Última atualização: Jun 28, 2026

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:

  1. 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.

  2. 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.

基于ASM实现应用请求认证授权

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.

Nota

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.

  1. Crie um arquivo chamado ext-authz.yaml com o conteúdo a seguir.

    Visualize ext-authz.yaml

    # Copyright Istio Authors
    #
    #   Licensed under the Apache License, Version 2.0 (the "License");
    #   you may not use this file except in compliance with the License.
    #   You may obtain a copy of the License at
    #
    #       http://www.apache.org/licenses/LICENSE-2.0
    #
    #   Unless required by applicable law or agreed to in writing, software
    #   distributed under the License is distributed on an "AS IS" BASIS,
    #   WITHOUT WARRANTIES OR CONDITIONS OF ANY, either express or implied.
    #   See the License for the specific language governing permissions and
    #   limitations under the License.
    # Example configurations for deploying ext-authz server separately in the mesh.
    apiVersion: v1
    kind: Service
    metadata:
      name: ext-authz
      labels:
        app: ext-authz
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 8000
      - name: grpc
        port: 9000
        targetPort: 9000
      selector:
        app: ext-authz
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ext-authz
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ext-authz
      template:
        metadata:
          labels:
            app: ext-authz
        spec:
          containers:
          - image: istio/ext-authz:0.6
            imagePullPolicy: IfNotPresent
            name: ext-authz
            ports:
            - containerPort: 8000
            - containerPort: 9000
    ---
  2. 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
  3. Execute o comando a seguir para verificar o status do pod.

    kubectl get pod

    Saída esperada:

    NAME                              READY   STATUS    RESTARTS       AGE
    ext-authz-6d458d5f8f-bh2m9        2/2     Running   0              1m
  4. 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-authz

    Saída esperada:

    2023/12/12 10:01:31 Starting HTTP server at [::]:8000
    2023/12/12 10:01:31 Starting gRPC server at [::]:9000

    Essa saída confirma que o serviço está em execução corretamente.

  5. Obtenha as portas gRPC e HTTP do serviço de autorização ext-authz.

    1. Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.

    2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Network > Services.

    3. 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.

  1. Faça login no console ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique no nome da instância ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

  3. Na página Ingress Gateway, clique no nome do gateway de destino.

  4. Na página de visão geral do gateway, clique em Gateway Security > Custom Authorization Service no painel de navegação.

  5. 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 como ext-authz.default.svc.cluster.local, Service Port como 8000 (intervalo válido: 1–65535) e Timeout como 10 segundos. Ative Include headers in the authorization request (includeRequestHeadersInCheck) e adicione os cabeçalhos da solicitação original a serem encaminhados, incluindo cookie, 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, accept e x-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-token e x-ext-authz-check-result. Ative Override headers on deny (headersToDownstreamOnDeny) e adicione os seguintes cabeçalhos: content-type, set-cookie e x-ext-authz-check-result. O cabeçalho x-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.

  6. 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

  1. Execute o comando a seguir para acessar o recurso no caminho /api/v1/products no 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/products

    Saí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: 1

    Esse resultado indica que a autorização não foi acionada. O caminho de acesso é /api/v1/products, e não o /productpage configurado; portanto, a solicitação não corresponde à política de autorização.

  2. Execute o comando a seguir para acessar o caminho /productpage com um cabeçalho x-ext-authz: deny.

    curl -I -H "x-ext-authz: deny" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpage

    Saí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: chunked

    Esse 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.

  3. Execute o comando a seguir para acessar o caminho /productpage com um cabeçalho x-ext-authz: allow.

    curl -I -H "x-ext-authz: allow" http://{YOUR_ASM_GATEWAY_ADDRESS}/productpage

    Saí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: 47

    Esse 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