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-authenticatorreinicia 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-authenticatortambé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.

Ao usar uma ferramenta como kubectl para autenticação no API server, o cliente kubectl executa o comando
execdefinido no arquivo kubeconfig e invoca o ack-ram-tool para gerar uma URL de token STS assinada.O cliente kubectl envia o webhook de autenticação ao API server, que o encaminha para o ack-ram-authenticator.
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.
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.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em Components and Add-ons .
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
EnableNonBootstrapMappinge 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.
Baixe o ack-ram-tool correspondente ao seu sistema operacional e arquitetura.
-
Conceda permissão de execução ao cliente:
chmod +x ./ack-ram-tool -
Copie o ack-ram-tool para um diretório presente no
PATHdo sistema:mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATH -
(Opcional) Para Bash, persista a configuração do
PATHno arquivo~/.bash_profile:echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profile -
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.
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
-
Gere um arquivo KubeConfig. Detalhes do comando: get-kubeconfig.
ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-token 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
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.
-
Crie um arquivo de modelo de configuração chamado
auth.yamlcom 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 EOFCada instância de RAMIdentityMapping associa um ARN do RAM a um
usernamee agroups. 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 daAlibaba Cloud Account.acs:ram::123456789012****:rootUsuá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/testuserFunção RAM
acs:ram::<root_uid>:role/<role_name><root_uid>é o ID daAlibaba Cloud Accounte<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
-
Crie a instância de
RAMIdentityMapping:kubectl apply -f auth.yaml -
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