Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Enable API server webhook authentication with ack-ram-authenticator in ACK managed clusters

Última atualização: Aug 20, 2026

Use o ack-ram-authenticator para garantir autenticação webhook segura via RAM nas requisições ao API server de clusters gerenciados pelo ACK. Esse componente mapeia identidades do RAM para RBAC e permite distinguir, nos logs de auditoria, usuários SSO que assumem a mesma função. Este tópico descreve o método de autenticação webhook e seu fluxo de uso.

Pré-requisitos

Você já criou um cluster gerenciado pelo ACK (versão 1.24.6-aliyun.1 ou posterior). Consulte Crie um cluster gerenciado pelo ACK.

Observações de uso

  • A instalação ou desinstalação do ack-ram-authenticator reinicia o API server e encerra conexões persistentes. Execute essa operação fora do horário de pico.

  • A autenticação webhook não bloqueia o acesso ao API server via KubeConfig obtido por DescribeClusterUserKubeconfig.

  • O ack-ram-authenticator também é compatível com ACK Serverless Cluster s.

Como o ack-ram-authenticator funciona

O ack-ram-authenticator é um complemento de autenticação para clusters gerenciados pelo ACK. Ele utiliza a Autenticação de Token Webhook do Kubernetes para autenticar requisições ao API server usando o RAM da Alibaba Cloud e mapeia identidades do RAM para permissões RBAC como CRDs.

Quando um usuário assume uma função SSO da Alibaba Cloud para acessar o API server de um cluster gerenciado pelo ACK, o ack-ram-authenticator transmite o nome da sessão dessa identidade ao API server. Isso permite que o API server autentique requisições de diferentes usuários que assumem a mesma função.

A figura a seguir ilustra o funcionamento da autenticação webhook em um cluster gerenciado pelo ACK com o ack-ram-authenticator instalado.

123..png

  1. Ao usar uma ferramenta como kubectl para autenticação no API server, o cliente kubectl executa o comando exec definido no arquivo kubeconfig e invoca o ack-ram-tool para gerar uma URL de token STS assinada.

  2. O cliente kubectl envia o webhook de autenticação ao API server, que o encaminha para o ack-ram-authenticator.

  3. O ack-ram-authenticator chama a operação GetCallerIdentity para obter a identidade do chamador a partir da URL do token e a compara com os mapeamentos de identidade definidos nas configurações de RAMIdentityMapping.

  4. O API server verifica as permissões RBAC do usuário ou grupo de usuários do RAM correspondente e retorna o resultado da autenticação ao cliente kubectl.

Benefícios

Em comparação com a autenticação padrão por certificado X.509 no ACK, a autenticação webhook com ack-ram-authenticator oferece:

  • Integração com SSO corporativo e autorização RBAC flexível e gerenciável no plano de dados.

  • Em cenários SSO, os logs de auditoria do API server incluem informações de identidade do Provedor de Identidade (IdP) corporativo. Isso permite auditar ações de diferentes usuários do IdP que assumem a mesma função.

  • A exclusão do usuário ou da função RAM de um colaborador desligado revoga automaticamente as permissões RBAC dele no cluster.

Etapa 1: Instale o ack-ram-authenticator

Instale o complemento de servidor ack-ram-authenticator para ativar a autenticação webhook via RAM no API server do cluster.

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

  2. Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em Components and Add-ons .

  3. Na página Add-ons, clique na aba Security, localize o add-on ack-ram-authenticator e clique em Install no canto inferior direito do cartão. Na caixa de diálogo Parameters exibida, selecione a opção EnableNonBootstrapMapping e clique em OK.

Etapa 2: Instale o cliente ack-ram-tool

O ack-ram-tool gera localmente um arquivo KubeConfig com credenciais para um cluster.

  1. Baixe o ack-ram-tool correspondente ao seu sistema operacional e arquitetura.

  2. Conceda permissão de execução ao cliente:

    chmod +x ./ack-ram-tool
  3. Copie o ack-ram-tool para um diretório presente no PATH do sistema:

    mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATH
  4. (Opcional) Para Bash, persista a configuração do PATH no arquivo ~/.bash_profile:

    echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profile
    
  5. Verifique a instalação. O comando retorna a versão do cliente.

    ack-ram-tool version

Etapa 3: Configure credenciais da Alibaba Cloud

Usuários RAM e usuários SSO podem configurar credenciais da Alibaba Cloud usando um dos métodos abaixo.

Nota

Se houver variáveis de ambiente relacionadas a credenciais definidas, o ack-ram-tool as utiliza por padrão. Adicione --ignore-env-credentials aos comandos do ack-ram-tool para sobrescrever esse comportamento. Variáveis de ambiente suportadas pelo ack-ram-tool: Credentials.

Usuários RAM

O ack-ram-tool usa credenciais da Alibaba Cloud configuradas localmente para autenticação com o RAM.

Consulte Alibaba Cloud CLI para configurar credenciais de acesso.

Usuários SSO

Usuários SSO utilizam o acs-sso, a ferramenta CLI do CloudSSO, para fazer login e obter credenciais. Consulte Use the CLI to log on to CloudSSO and access Alibaba Cloud resources sobre o acs-sso. O modo externo da CLI da Alibaba Cloud obtém credenciais executando um comando externo. Configure o login automatizado no CloudSSO e a obtenção de credenciais:

aliyun configure --mode External --profile sso

Configuring profile 'sso' in 'External' authenticate mode...
Process Command [acs-sso login --profile sso]:
Default Region Id [cn-shanghai]:
Default Output Format [json]: json (Only support json)
Default Language [zh|en] en:
Saving profile[sso] ...Done.

Configure Done!!!
..............888888888888888888888 ........=8888888888888888888D=..............
...........88888888888888888888888 ..........D8888888888888888888888I...........
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............

Etapa 4: Gerar um arquivo KubeConfig

  1. Gere um arquivo KubeConfig. Detalhes do comando: get-kubeconfig.

    ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-token
  2. Mescle ou substitua seu KubeConfig existente pelo arquivo gerado. Consulte Organizing Cluster Access Using kubeconfig Files.

Etapa 5: Mapear identidades RAM para permissões RBAC

Nota

Selecione a opção EnableNonBootstrapMapping durante a instalação. Caso contrário, os mapeamentos abaixo não terão efeito.

Após instalar o ack-ram-authenticator, o cluster cria um CRD RAMIdentityMapping que associa identidades RAM a modelos de usuários do Kubernetes. Como administrador do cluster, mapeie um usuário RAM ou uma função RAM para um usuário Kubernetes com permissões RBAC.

  1. Crie um arquivo de modelo de configuração chamado auth.yaml com o seguinte conteúdo:

    cat >auth.yaml <<EOF
    ---
    apiVersion: ramauthenticator.k8s.alibabacloud/v1alpha1
    kind: RAMIdentityMapping
    metadata:
      name: tester
    spec:
      arn: '<ARN>'
      username: tester
      groups:
        - system:users    
    EOF
    • Cada instância de RAMIdentityMapping associa um ARN do RAM a um username e a groups. Crie uma instância para cada mapeamento.

    • Substitua <ARN> pelo ARN do usuário RAM ou da função RAM desejada. A tabela a seguir lista os formatos de ARN por tipo de conta.

      Tipo de conta

      Formato do ARN

      Exemplo

      Conta Alibaba Cloud

      acs:ram::<root_uid>:root

      <root_uid> é o ID da Alibaba Cloud Account.

      acs:ram::123456789012****:root

      Usuário RAM

      acs:ram::<root_uid>:user/<user_name>

      <root_uid> é o ID da Conta Alibaba Cloud e <user_name> é o nome do usuário RAM.

      acs:ram::123456789012****:user/testuser

      Função RAM

      acs:ram::<root_uid>:role/<role_name>

      <root_uid> é o ID da Alibaba Cloud Account e <role_name> é o nome da função RAM. Consulte Visualize as informações sobre uma função RAM para visualizar o ARN de uma função RAM.

      acs:ram::123456789012****:role/testrole

  2. Crie a instância de RAMIdentityMapping:

    kubectl apply -f auth.yaml
  3. Configure as permissões RBAC para o cluster. Crie funções e bindings RBAC personalizados conforme necessário.

    Exemplo de binding RBAC:

    cat >binding.yaml <<EOF
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: tester-clusterrolebinding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cs:ops
    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: User
      name: tester
    EOF
    
    kubectl apply -f binding.yaml

Etapa 6: Enviar requisições com KubeConfig

Use o arquivo KubeConfig da Etapa 4 para enviar uma requisição ao API server e verificar se a operação foi bem-sucedida dentro das permissões configuradas.

kubectl get ns

Saída esperada:

NAME              STATUS   AGE
arms-prom         Active   4h48m
default           Active   4h50m
kube-node-lease   Active   4h50m
kube-public       Active   4h50m
kube-system       Active   4h50m

Referências