Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Configure políticas de autorização para controle de acesso em workloads

Última atualização: Jun 28, 2026

Por padrão, os workloads em uma instância do Service Mesh (ASM) podem se comunicar entre si. Crie políticas de autorização para aplicar controle de acesso e gerenciar permissões dos workloads no cluster. Assim, apenas solicitações que atendam a requisitos específicos acessam os workloads. Por exemplo, você pode controlar o acesso especificando caminhos de solicitação, métodos de requisição e endereços IP dos clientes. Essa prática aumenta a segurança e protege os recursos da instância ASM.

Pré-requisitos

O cluster foi adicionado à instância ASM.

Introdução ao recurso

Você pode definir a ação CUSTOM, DENY ou ALLOW em uma política de autorização. Ao aplicar várias políticas a um único workload, elas seguem níveis diferentes de prioridade. O sistema verifica as solicitações na seguinte ordem: CUSTOM, DENY e ALLOW. Se você criar múltiplas políticas para um mesmo workload, as regras abaixo serão aplicadas:

  • Se uma solicitação corresponder à condição de rejeição de uma política CUSTOM, ela será bloqueada.

  • Caso a solicitação atenda aos critérios de rejeição de uma política DENY, o acesso será negado.

  • Na ausência de uma política ALLOW configurada para o workload, a solicitação tem acesso permitido por padrão.

  • Quando existe uma política ALLOW e a requisição cumpre suas condições, o acesso ao workload é concedido.

  • Solicitações que não cumpram nenhum dos requisitos anteriores são automaticamente rejeitadas.

Este tópico apresenta quatro exemplos práticos para ajudar você a entender e configurar rapidamente as políticas de autorização:

Cenário 1: Controlar o acesso a um caminho específico de um workload

Neste exemplo, cria-se uma política de autorização permitindo que aplicações no namespace foo acessem o caminho /headers da aplicação HTTPBin, que também reside no namespace foo. Requisições para outros caminhos falharão. Aplicações fora do namespace foo não terão acesso à aplicação HTTPBin.

Etapa 1: Ativar a injeção automática de proxy sidecar nos namespaces default e foo

  1. Crie os namespaces default e foo. Para mais informações, consulte Criar um namespace.

  2. Ative a injeção automática de proxy sidecar para os namespaces default e foo. Para mais detalhes, veja Ativar injeção automática de proxy sidecar.

Etapa 2: Implantar aplicações de teste

  1. Implante a aplicação sleep nos namespaces default e foo.

    1. Crie um arquivo sleep.yaml com o seguinte conteúdo:

      Show the sleep.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Execute o comando abaixo para implantar a aplicação sleep no namespace default:

      kubectl apply -f sleep.yaml -n default
    3. Execute o comando a seguir para implantar a aplicação sleep no namespace foo:

      kubectl apply -f sleep.yaml -n foo
  2. Implante a aplicação HTTPBin no namespace foo.

    1. Crie um arquivo httpbin.yaml contendo o conteúdo abaixo:

      Show the httpbin.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. Execute este comando para implantar a aplicação HTTPBin no namespace foo:

      kubectl apply -f httpbin.yaml -n foo

Etapa 3: Criar uma política de autorização

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

  2. Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, selecione Mesh Security Center > AuthorizationPolicy. Na página exibida, clique em Create.

  3. Na página Create, configure os parâmetros e clique em Create.

    Parâmetro

    Descrição

    Name

    Nome da política de autorização.

    Policy Type

    Defina o valor como ALLOW.

    Namespaces

    Na aba Workload Scope, defina Namespaces como foo.

    Effective Scope

    Selecione Service.

    Workload

    Escolha httpbin.

    Request Matching Rules

    1. Na seção Add Request Source, ative a chave Namespaces e insira o valor foo. Isso permite que todas as aplicações no namespace foo acessem a aplicação httpbin.

    2. Na seção Add Request Target, ative a chave Paths e defina o valor como /headers. Assim, as aplicações poderão acessar apenas o caminho /headers da aplicação httpbin no namespace foo.

Etapa 4: Verificar se a política de controle de acesso ao caminho específico entrou em vigor

  1. Envie uma requisição usando a aplicação sleep no namespace default para acessar a aplicação HTTPBin no namespace foo.

    1. Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.

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

    3. No topo da página Pods, defina Namespaces como default. Localize o pod sleep e clique em Terminal > sleep na coluna Actions.

    4. Execute o comando abaixo na seção Terminal do contêiner sleep para acessar o caminho /headers da aplicação HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/headers

      O código 403 será retornado, indicando que a requisição foi rejeitada.

    5. Execute este comando na seção Terminal do contêiner sleep para acessar o caminho /ip da aplicação HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/ip

      Novamente, o código 403 será retornado, confirmando a rejeição da requisição.

  2. Envie uma requisição utilizando a aplicação sleep no namespace foo para acessar a aplicação HTTPBin, também no namespace foo.

    1. No painel de navegação à esquerda da página de gerenciamento do cluster, escolha Workload > Pods.

    2. No topo da página Pods, defina Namespaces como foo. Encontre o pod sleep e clique em Terminal > sleep na coluna Actions.

    3. Execute o seguinte comando na seção Terminal do contêiner sleep para acessar o caminho /headers da aplicação HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/headers

      Saída esperada:

      {
        "headers": {
          "Accept": "*/*",
          "Host": "httpbin.foo.svc.cluster.local:8000",
          "User-Agent": "curl/7.82.0-DEV",
          "X-Envoy-Attempt-Count": "1",
          "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=f7ab4985563b5b1986314d5a36c6e46819213e2f38301f534f00afb7cd4b9164;Subject=\"\";URI=spiffe://cluster.local/ns/foo/sa/sleep"
        }
      }
    4. Execute o comando abaixo na seção Terminal do contêiner sleep para tentar acessar o caminho /ip da aplicação HTTPBin:

      curl httpbin.foo.svc.cluster.local:8000/ip

      O retorno será o código 403, indicando que a requisição foi rejeitada.

    Os resultados demonstram que as aplicações no namespace default não conseguem acessar os caminhos da aplicação HTTPBin no namespace foo. Já as aplicações dentro do namespace foo têm acesso permitido ao caminho /headers da aplicação HTTPBin.

Cenário 2: Controlar o método de requisição e o acesso a um caminho específico

Neste cenário, configura-se uma política de autorização determinando que aplicações fora do namespace foo só possam acessar o caminho /status da aplicação HTTPBin através de requisições GET. A aplicação HTTPBin está localizada no namespace foo. Requisições para outros caminhos ou que utilizem métodos diferentes de GET falharão.

Etapa 1: Ativar a injeção automática de proxy sidecar nos namespaces default e foo

  1. Crie os namespaces default e foo. Consulte Criar um namespace para mais informações.

  2. Ative a injeção automática de proxy sidecar para os namespaces default e foo. Veja mais detalhes em Ativar injeção automática de proxy sidecar.

Etapa 2: Implantar aplicações de teste

  1. Implante a aplicação sleep nos namespaces default e foo.

    1. Crie um arquivo sleep.yaml com o conteúdo a seguir:

      Show the sleep.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Execute o comando abaixo para implantar a aplicação sleep no namespace default:

      kubectl apply -f sleep.yaml -n default
    3. Execute o seguinte comando para implantar a aplicação sleep no namespace foo:

      kubectl apply -f sleep.yaml -n foo
  2. Implante a aplicação HTTPBin no namespace foo.

    1. Crie um arquivo httpbin.yaml contendo o seguinte conteúdo:

      Show the httpbin.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. Use o comando a seguir para implantar a aplicação HTTPBin no namespace foo:

      kubectl apply -f httpbin.yaml -n foo

Etapa 3: Criar uma política de autorização

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

  2. Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, selecione Mesh Security Center > AuthorizationPolicy. Na página exibida, clique em Create.

  3. Na página Create, configure os parâmetros necessários e clique em Create.

  4. Parâmetro

    Descrição

    Name

    Nome da política de autorização.

    Policy Type

    Selecione ALLOW.

    Namespaces

    Na aba Workload Scope, defina Namespaces como foo.

    Effective Scope

    Escolha Service.

    Workload

    Selecione httpbin.

    Request Matching Rules

    Na seção Add Request Target, configure os seguintes parâmetros:

    1. Ative a chave Methods e defina o valor como GET.

    2. Ative a chave Paths e insira o valor /status/*. Isso garante que aplicações em qualquer namespace usem exclusivamente o método GET para acessar o caminho /status da aplicação httpbin no namespace foo.

Etapa 4: Validar a eficácia da política de controle de método e caminho

  1. Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.

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

  3. No topo da página Pods, defina Namespaces como default. Localize o pod sleep e clique em Terminal > sleep na coluna Actions.

  4. Execute o comando abaixo na seção Terminal do contêiner sleep para acessar o caminho /status da aplicação HTTPBin usando uma requisição POST:

    curl -I -X POST "httpbin.foo.svc.cluster.local:8000/status/200" -H "accept: text/plain"

    O código 403 será retornado, indicando que a requisição foi rejeitada.

  5. Execute este comando para tentar acessar o caminho /IP da aplicação HTTPBin usando uma requisição GET:

    curl -I -X GET "httpbin.foo.svc.cluster.local:8000/IP/200" -H "accept: text/plain"

    Novamente, o código 403 será retornado, confirmando a rejeição.

  6. Execute o comando a seguir para acessar o caminho /status da aplicação HTTPBin usando uma requisição GET:

    curl -I -X GET "httpbin.foo.svc.cluster.local:8000/status/200" -H "accept: text/plain"

    Saída esperada:

    HTTP/1.1 200 OK
    server: envoy
    date: Fri, 29 Apr 2022 03:01:16 GMT
    content-type: text/html; charset=utf-8
    access-control-allow-origin: *
    access-control-allow-credentials: true
    content-length: 0
    x-envoy-upstream-service-time: 5

    O resultado confirma que as aplicações no namespace default conseguem acessar o caminho /status da aplicação HTTPBin apenas via requisições GET. Isso comprova que a política de autorização está funcionando corretamente.

Exemplo 3: Restringir o acesso ao workload por endereços IP de cliente

Você pode criar uma política de autorização que permita o acesso à aplicação HTTPBin no namespace foo apenas para endereços IP de cliente autorizados.

Etapa 1: Ativar a injeção automática de proxy sidecar no namespace foo

  1. Crie o namespace foo. Para mais informações, consulte Gerenciar namespaces globais.

  2. Ative a injeção automática de proxy sidecar para o namespace foo. Veja mais detalhes em Ativar injeção automática de proxy sidecar.

Etapa 2: Implantar um gateway de entrada

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

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

  3. Na página Ingress Gateway, clique em Create, configure os parâmetros e clique em Create.

    Parâmetro

    Descrição

    Name

    Nome do gateway de entrada.

    Cluster

    Cluster onde o gateway de entrada será implantado.

    SLB

    Selecione Classic Load Balancer e Public Access. Este exemplo utiliza um Classic Load Balancer, mas também é possível usar um Network Load Balancer.

    Create SLB Instance

    Instância de balanceador de carga a ser utilizada. Escolha uma das opções abaixo:

    • Use Existing CLB Instance: Selecione um balanceador existente na lista.

    • Create SLB Instance: Clique em Create SLB Instance e escolha as especificações desejadas na lista suspensa.

    Port Mapping

    Selecione um Protocol e insira uma Service Port conforme necessário.

    External Traffic Policy

    Clique em Advanced Options e defina External Traffic Policy como Local.

Etapa 3: Criar um serviço virtual e um gateway Istio

  1. Utilize o conteúdo abaixo para criar um serviço virtual no namespace foo. Para mais informações, consulte Gerenciar serviços virtuais.

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: httpbin
    spec:
      gateways:
        - httpbin-gateway
      hosts:
        - '*'
      http:
        - match:
            - uri:
                prefix: /headers
          route:
            - destination:
                host: httpbin
                port:
                  number: 8000
  2. Use o conteúdo a seguir para criar um gateway Istio no namespace foo. Consulte Gerenciar gateways Istio para mais detalhes.

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: httpbin-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: http
            number: 80
            protocol: HTTP

Etapa 4: Criar uma política de autorização

  1. Obtenha o endereço IP do gateway de entrada. Para instruções, veja Criar um gateway de entrada.

  2. Identifique o endereço IP do cliente.

    Insira http://{ASM Gateway IP}/headers na barra de endereços do seu navegador para obter o valor de X-Envoy-External-Address. Na resposta retornada, o campo X-Envoy-External-Address corresponde ao endereço IP externo real do cliente.

    {
      "headers": {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,imag...",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
        "Cache-Control": "max-age=0",
        "Host": "<IP address>",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.3...",
        "X-Envoy-Attempt-Count": "1",
        "X-Envoy-External-Address": "<Client external IP>",
        "X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/foo/sa/httpbin;Hash=e49...service-account"
      }
    }
  3. Crie uma política de autorização.

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

    2. Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, selecione Mesh Security Center > AuthorizationPolicy. Na página exibida, clique em Create.

    3. Na página Create, configure os parâmetros e clique em Create.

      Parâmetro

      Descrição

      Name

      Nome da política de autorização.

      Policy Type

      Selecione DENY.

      Namespaces

      Na aba Workload Scope, defina Namespaces como foo.

      Effective Scope

      Escolha Service.

      Workload

      Selecione httpbin.

      Request Matching Rules

      Na seção Add Request Source, ative a chave RemoteIPBlocks e insira o endereço IP do cliente obtido na etapa anterior. Isso impede que o referido endereço IP acesse a aplicação httpbin.

Etapa 5: Verificar se a política de bloqueio por IP entrou em vigor

No seu navegador, acesse http://{ASM gateway IP}/headers. A mensagem RBAC: access denied será exibida, indicando falha no acesso à aplicação httpbin. Isso confirma que a restrição baseada no endereço IP do cliente está ativa.

RBAC: access denied

Exemplo 4: Gerenciar o acesso a serviços entre namespaces

Etapa 1: Ativar a injeção automática de proxy sidecar nos namespaces demo-frontend e demo-server

  1. Crie os namespaces demo-frontend e demo-server. Consulte Criar um namespace para mais informações.

  2. Ative a injeção automática de proxy sidecar para os namespaces demo-frontend e demo-server. Para detalhes, consulte a seção "Ativar injeção automática de proxy sidecar" no tópico Gerenciar namespaces globais.

Etapa 2: Implantar serviços de teste

Crie um serviço chamado sleep no namespace demo-frontend e outro chamado httpbin no namespace demo-server. O serviço sleep será usado para enviar requisições de acesso ao serviço httpbin.

  1. Crie o serviço sleep no namespace demo-frontend.

    1. Crie um arquivo sleep.yaml com o seguinte conteúdo:

      Show the sleep.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Conecte-se ao cluster Container Service for Kubernetes (ACK) usando kubectl e as informações do arquivo kubeconfig. Em seguida, execute o comando abaixo para criar o serviço sleep:

      kubectl apply -f sleep.yaml -n demo-frontend
  2. Crie o serviço httpbin no namespace demo-server.

    1. Crie um arquivo httpbin.yaml contendo o conteúdo a seguir:

      Show the httpbin.yaml file

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    2. Utilize o kubectl para se conectar ao cluster ACK com base nas informações do arquivo kubeconfig e execute o comando abaixo para criar o serviço httpbin:

      kubectl apply -f httpbin.yaml -n demo-server
  3. Verifique se os proxies sidecar foram injetados nos pods onde residem os serviços sleep e httpbin.

    1. Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.

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

    3. No topo da página Pods, selecione demo-frontend na lista suspensa Namespaces e clique em nome do pod do serviço sleep.

      Na aba Containers, verifique a presença do contêiner istio-proxy. Isso indica que a injeção de sidecar para o serviço sleep foi concluída com sucesso.

    4. No topo da página Pods, selecione demo-server na lista suspensa Namespaces e clique em nome do pod do serviço httpbin.

      Na aba Containers, confirme a existência do contêiner istio-proxy. Isso demonstra que a injeção de sidecar para o serviço httpbin foi finalizada.

Etapa 3: Criar uma política de autorização para controlar o acesso entre namespaces

Crie uma política de autorização e modifique o parâmetro de ação para negar ou permitir requisições de acesso enviadas de serviços no namespace demo-frontend para serviços no namespace demo-server. Assim, você gerencia efetivamente o acesso entre namespaces.

  1. Crie uma política de autorização para negar requisições de acesso do namespace demo-frontend para o namespace demo-server.

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

    2. Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, selecione Mesh Security Center > AuthorizationPolicy. Na página exibida, clique em Create.

    3. Configure os parâmetros da política de autorização e clique em Create.

      Parâmetro

      Descrição

      Name

      Nome da política de autorização.

      Policy Type

      Selecione DENY.

      Namespaces

      Na aba Workload Scope, defina Namespaces como demo-server.

      Effective Scope

      Escolha Namespace Scope.

      Request Matching Rules

      Na seção Add Request Source, ative a chave Namespaces e insira o valor demo-frontend.

  2. Tente acessar o serviço httpbin.

    1. Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.

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

    3. No topo da página Pods, selecione demo-frontend na lista suspensa Namespaces. Em seguida, localize o pod sleep e clique em Terminal > sleep na coluna Actions.

    4. Execute o comando abaixo no terminal do contêiner sleep para acessar o serviço httpbin:

      curl -I httpbin.demo-server.svc.cluster.local:8000

      Saída esperada:

      HTTP/1.1 403 Forbidden
      content-length: 19
      content-type: text/plain
      date: Wed, 11 Oct 2023 08:15:25 GMT
      server: envoy
      x-envoy-upstream-service-time: 4

      A saída acima indica que os serviços no namespace demo-frontend não conseguiram acessar os serviços no namespace demo-server.

  3. Altere o valor do parâmetro de ação na política de autorização para ALLOW, permitindo assim as requisições de acesso do namespace demo-frontend para o namespace demo-server.

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

    2. Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, selecione Mesh Security Center > AuthorizationPolicy.

    3. Na página AuthorizationPolicy, localize a política desejada e clique em View YAML na coluna Actions.

    4. Na caixa de diálogo Edit, altere o valor do parâmetro action para ALLOW e clique em OK.

  4. Execute o comando abaixo no terminal do contêiner sleep para acessar o serviço httpbin:

    curl -I httpbin.demo-server.svc.cluster.local:8000

    Saída esperada:

    HTTP/1.1 200 OK
    server: envoy
    date: Wed, 11 Oct 2023 08:21:40 GMT
    content-type: text/html; charset=utf-8
    content-length: 9593
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 13

    A saída acima confirma que os serviços no namespace demo-frontend agora acessam com sucesso os serviços no namespace demo-server.

    Como demonstrado, após a criação de uma política de autorização com Action definida como Deny, os serviços no namespace demo-frontend falham ao tentar acessar o namespace demo-server. Quando a Action da política é alterada para ALLOW, o acesso entre os namespaces ocorre normalmente. Isso comprova a eficácia da política de autorização no controle de acesso entre namespaces.