Como resolvo um erro de servidor não autorizado quando me conecto ao servidor de API do Amazon EKS?

Data da última atualização: 20/9/2022

Estou usando comandos kubectl para me conectar ao servidor de API do Amazon Elastic Kubernetes Service (Amazon EKS). Recebi a mensagem "erro: Você deve estar logado no servidor (não autorizado)". Como resolvo isso?

Breve descrição

O administrador do cluster deve concluir as etapas em uma das seguintes seções:

  • Você é o criador do cluster
  • Você não é o criador do cluster

Em seguida, a pessoa que recebeu o erro deve concluir as etapas na seção You're the user or role that received the error (Você é o usuário ou a função que recebeu o erro).

Resolução

Você é o criador do cluster

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

1.    Para ver a configuração do usuário ou da função da AWS CLI, execute o seguinte comando:

$ aws sts get-caller-identity

A saída exibirá o nome do recurso da Amazon (ARN) do usuário ou da função do AWS Identity and Access Management (IAM). Por exemplo:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

2.    Confirme se o ARN é igual ao do criador do cluster. Para encontrar o criador do cluster, você pode executar o seguinte comando no Amazon CloudWatch Application Insights. Observação: o Amazon EKS mapeia o perfil do IAM do criador do cluster no lado do ambiente de gerenciamento como kubernetes-admin. Se o registro do servidor de API foi ativado quando o cluster foi criado, o criador da entidade pode ser consultado.

fields @logstream, @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "username=kubernetes-admin"
| limit 50

Essa consulta retorna a entidade do IAM que é mapeada como o criador do cluster. Assuma a função de entidade do IAM que você recebe na saída e, em seguida, faça as chamadas kubectl para o cluster novamente.

3.    Atualize ou gere o arquivo kubeconfig usando um dos seguintes comandos.

Como usuário do IAM, execute o seguinte comando:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Observação: substitua eks-cluster-name pelo nome do cluster. Substitua aws-region por sua Região da AWS.

Como a função do IAM, execute o seguinte comando:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

Observação: substitua eks-cluster-name pelo nome do cluster. Substitua aws-region por sua Região da AWS.

4.    Para confirmar se o arquivo kubeconfig está atualizado, execute o seguinte comando:

$ kubectl config view --minify

5.    Para confirmar se o usuário ou o perfil do IAM está autenticado, execute o seguinte comando:

$ kubectl get svc

Exemplo de saída:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Você não é o criador do cluster

1.    Para obter a configuração do usuário ou da função da AWS CLI, execute o seguinte comando:

$ aws sts get-caller-identity

A saída exibirá o ARN do usuário ou do perfil do IAM.

2.    Peça ao proprietário ou administrador do cluster que adicione seu usuário ou seu perfil do IAM ao ConfigMap aws-auth.

Observação: se você tiver as permissões corretas do IAM, também poderá usar AssumeRole para fazer login como o criador do cluster.

3.    Para editar o ConfigMap aws-auth em um editor de texto, o proprietário ou o administrador do cluster precisam executar o seguinte comando:

$ kubectl edit configmap aws-auth --namespace kube-system

Observação: se você receber o erro “Erro do servidor (NotFound): configmaps “aws-auth” não encontrado”, siga as instruções para aplicar o AWS-authConfigMap ao seu cluster.

4.    Para adicionar um usuário do IAM ou um perfil do IAM, conclua uma das etapas abaixo.

Adicione o usuário do IAM a mapUsers. Por exemplo:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
      - system:masters

Observação: substitua testuser seu nome de usuário.

Adicione a função do IAM ao mapRoles. Por exemplo:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole
    groups:
      - system:masters

Observação: substitua testrole por sua função.

O valor de username na seção mapRoles aceita somente caracteres minúsculos. O perfil do IAM deve ser mapeado sem o caminho. Para saber mais sobre os requisitos do caminho de rolearn, expanda a seção aws-auth ConfigMap não concede acesso ao cluster em Solução de problemas do IAM.

Para especificar rolearn para um perfil do IAM do AWS IAM Identity Center (sucessor do AWS Single Sign-On), remova o caminho “/AWS-reserved/sso.amazonaws.com/region” do ARN do perfil. Caso contrário, a entrada no ConfigMap não poderá autorizar você como um usuário válido.

O grupo system:masters permite o acesso de superusuário para a execução de qualquer ação em qualquer recurso. Para obter mais informações, consulte Default roles and role bindings (Funções padrão e associações de função). Para restringir o acesso a esse usuário, você pode criar uma função do Amazon EKS e um recurso de vinculação de função. Para obter um exemplo de acesso restrito para usuários que visualizam recursos no console do Amazon EKS, siga as etapas 2 e 3 em Permissões necessárias.

Você é o usuário ou a função que recebeu o erro

1.    Para atualizar ou gerar o arquivo kubeconfig após a atualização do ConfigMap aws-auth, execute um dos seguintes comandos.

Como usuário do IAM, execute o seguinte comando:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Observação: substitua eks-cluster-name pelo nome do cluster. Substitua aws-region por sua Região da AWS.

2.    Como a função do IAM, execute o seguinte comando:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

Observação: substitua eks-cluster-name pelo nome do cluster. Substitua aws-region por sua Região da AWS.

3.    Para confirmar se o arquivo kubeconfig está atualizado, execute o seguinte comando:

$ kubectl config view --minify

4.    Para confirmar se o usuário ou o perfil do IAM está autenticado, execute o seguinte comando:

$ kubectl get svc

Exemplo de saída:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Observação: se você continuar a receber erros, consulte as diretrizes de solução de problemas Usar a autorização RBAC.


Solução de problemas do Amazon EKS

Give a IAM user and role access to your cluster (Dê acesso a um usuário do IAM ao seu cluster com o perfil de acesso)

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?