Como resolvo o erro “You must be logged in to the server (Unauthorized)” (Você deve estar logado no servidor [não autorizado]) quando me conecto ao servidor da API do Amazon EKS?
Estou usando comandos kubectl para me conectar ao servidor da interface de programação de aplicações (API) do Amazon Elastic Kubernetes Service (Amazon EKS). Recebi a mensagem “error: You must be logged in to the server (Unauthorized)” (erro: você deve estar registrado no servidor [não autorizado]).
Breve descrição
Você recebe esse erro quando a entidade do AWS Identity and Access Management (IAM) configurada no kubectl não é autenticada pelo Amazon EKS.
Você está autenticado e autorizado a acessar seu cluster do Amazon EKS com base na entidade do IAM (usuário ou perfil) que você usa. Portanto, certifique-se do seguinte:
- Você configurou a ferramenta kubectl para usar seu usuário ou perfil do IAM.
- Sua entidade do IAM é mapeada para o aws-auth ConfigMap.
Para resolver esse problema, você deve concluir as etapas em uma das seções a seguir com base no seu caso de uso:
- Você é o criador do cluster
- Você não é o criador do cluster
Resolução
Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), confirme se você está executando uma versão recente da AWS CLI.
Você é o criador do cluster
Você é o criador do cluster se a sua entidade do IAM foi usada para criar o cluster do Amazon EKS.
1. Execute a seguinte consulta no Amazon CloudWatch Log Insights para identificar o ARN do criador do cluster:
Primeiro, selecione o grupo de logs para seu cluster do Amazon EKS (exemplo: /aws/eks/my-cluster/cluster). Depois, execute a seguinte consulta:
fields @logstream, @timestamp, @message | sort @timestamp desc | filter @logStream like /authenticator/ | filter @message like "username=kubernetes-admin" | limit 50
Observação: certifique-se de ter habilitado os logs do autenticador do Amazon EKS.
Essa consulta retorna a entidade do IAM que é mapeada como a criadora do cluster:
@message time="2022-05-26T18:55:30Z" level=info msg="access granted" arn="arn:aws:iam::123456789000:user/testuser" client="127.0.0.1:57586" groups="[system:masters]" method=POST path=/authenticate uid="aws-iam-authenticator:123456789000:AROAFFXXXXXXXXXX" username=kubernetes-admin
2. Certifique-se de ter configurado a AWS CLI com a entidade do IAM criadora do cluster. Para ver se a entidade do IAM está configurada para a AWS CLI em seu ambiente de shell, execute o seguinte comando:
$ aws sts get-caller-identity
Você também pode executar esse comando usando um perfil específico:
$ aws sts get-caller-identity --profile MY-PROFILE
A saída retorna o nome do recurso da Amazon (ARN) da entidade do IAM que está configurada para a AWS CLI.
Exemplo:
{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }
Confirme se a entidade do IAM retornada corresponde à entidade do IAM criadora do cluster. Se a entidade do IAM retornada não for a criadora do cluster, atualize a configuração da AWS CLI para usar a entidade do IAM criadora do cluster.
3. Atualize ou gere o arquivo kubeconfig usando um dos seguintes comandos:
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region
Observação:
- Substitua eks-cluster-name pelo nome do seu cluster.
- Substitua aws-region pelo nome da sua região da AWS.
Para especificar um perfil da AWS CLI, execute o seguinte comando:
$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile
Observação:
- Substitua eks-cluster-name pelo nome do seu cluster.
- Substitua aws-region pelo nome da sua região.
- Substitua my-profile pelo nome do seu perfil.
4. Para confirmar se o arquivo kubeconfig está atualizado, execute o seguinte comando:
$ kubectl config view --minify
5. Para confirmar se a sua entidade do IAM está autenticada e se você pode acessar seu cluster do EKS, 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
Você não é o criador do cluster se a sua entidade do IAM não foi usada para criar o cluster. Nesse caso, você deve mapear sua entidade do IAM para o aws-auth ConfigMap para permitir o acesso ao cluster.
1. Certifique-se de ter configurado a AWS CLI com sua entidade do IAM. Para ver a entidade do IAM que está configurada para a AWS CLI em seu ambiente de shell, execute o seguinte comando:
$ aws sts get-caller-identity
Você também pode executar esse comando usando um perfil específico:
$ aws sts get-caller-identity --profile my-profile
A saída retorna o ARN da entidade do IAM que está configurada para a AWS CLI.
Exemplo:
{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }
Confirme se a entidade do IAM retornada é sua entidade do IAM. Se a entidade do IAM retornada não for a usada para interagir com seu cluster, primeiro atualize a configuração da AWS CLI para usar a entidade correta do IAM. Em seguida, tente acessar novamente seu cluster usando kubectl. Se o problema persistir, continue com a etapa 2.
2. Se a entidade do IAM retornada não for a criadora do cluster, adicione sua entidade do IAM ao aws-auth ConfigMap. Isso permite que a entidade do IAM acesse o cluster.
Somente o administrador do cluster pode modificar o aws-auth ConfigMap. Portanto, execute um dos seguintes procedimentos:
- Use as instruções na seção You're cluster creator (Você é o criador do cluster) para acessar o cluster usando a entidade do IAM do criador do cluster.
- Peça ao administrador do cluster que execute essa ação.
Verifique se sua entidade do IAM está no aws-auth ConfigMap executando o seguinte comando:
eksctl get iamidentitymapping --cluster cluster-name
ou
kubectl describe configmap aws-auth -n kube-system
Se a sua entidade do IAM estiver no aws-auth ConfigMap, você poderá pular para a etapa 3.
Mapeie sua entidade do IAM automaticamente executando o seguinte comando:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \ --group system:masters \ --no-duplicate-arns \ --username admin-user1
Ou você pode mapear sua entidade do IAM manualmente editando o aws-auth ConfigMap:
$ kubectl edit configmap aws-auth --namespace kube-system
Para adicionar um usuário do IAM, adicione o ARN do usuário do IAM ao mapUsers.
Exemplo:
mapUsers: | - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser username: testuser groups: - system:masters
Para adicionar um perfil do IAM, adicione o ARN do perfil do IAM ao mapRoles.
Exemplo:
mapRoles: | - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole groups: - system:masters
Importante:
- 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 does not grant access to the cluster (aws-auth ConfigMap não concede acesso ao cluster) em Troubleshooting IAM (Solução de problemas do IAM).
- Para especificar rolearn para um perfil do Centro de Identidade do AWS IAM (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 obrigatórias.
3. Atualize ou gere o arquivo kubeconfig ao executar um dos seguintes comandos. Certifique-se de que a AWS CLI esteja configurada com sua entidade do IAM que é retornada na etapa 1.
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region
Observação:
- Substitua eks-cluster-name pelo nome do seu cluster.
- Substitua aws-region pelo nome da sua região da AWS.
Você também pode executar esse comando usando um perfil específico:
$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile
Observação:
- Substitua eks-cluster-name pelo nome do seu cluster.
- Substitua aws-region pelo nome da sua região da AWS.
- Substitua my-profile pelo nome do seu perfil.
4. Para confirmar se o arquivo kubeconfig está atualizado, execute o seguinte comando:
$ kubectl config view --minify
5. Para confirmar se o seu usuário ou perfil do IAM está autenticado, tente acessar o cluster novamente. Por exemplo, você pode executar o comando a seguir para confirmar que o erro foi resolvido:
$ 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
Dicas de solução de problemas adicionais
Se o erro persistir, use as dicas de solução de problemas a seguir para identificar o problema.
Quando você executa um comando kubectl, uma solicitação é enviada ao servidor da API do cluster do Amazon EKS. Em seguida, o autenticador do Amazon EKS tenta autenticar essa solicitação. Portanto, verifique os logs do autenticador do EKS no CloudWatch para identificar o problema.
1. Certifique-se de ter habilitado o registro em log no seu cluster do Amazon EKS.
2. Abra o CloudWatch Log Insights.
3. Selecione o grupo de logs para o seu cluster. Exemplo: “/aws/eks/example-cluster/cluster”.
4. Execute a seguinte consulta:
fields @timestamp, @message | filter @logStream like /authenticator/ | sort @timestamp desc | limit 1000
Identifique as linhas de log para o mesmo intervalo de tempo em que você recebeu o erro executando os comandos kubectl. Você pode encontrar mais informações sobre a causa do erro nos logs do autenticador do Amazon EKS.
- Se o problema for causado pelo uso da entidade do IAM incorreta para kubectl, revise a configuração de kubectl kubeconfig e da AWS CLI. Verifique se você está usando a entidade correta do IAM. Por exemplo, suponha que os logs sejam semelhantes aos seguintes. Essa saída significa que a entidade do IAM usada pelo kubectl não pode ser validada. Certifique-se de que a entidade do IAM usada pelo kubectl exista no IAM e que o acesso programático da entidade esteja habilitado.
time="2022-12-26T20:46:48Z" level=warning msg="access denied" client="127.0.0.1:43440" error="sts getCallerIdentity failed: error from AWS (expected 200, got 403). Body: {\"Error\":{\"Code\":\"InvalidClientTokenId\",\"Message\":\"The security token included in the request is invalid.\",\"Type\":\"Sender\"},\"RequestId\":\"a9068247-f1ab-47ef-b1b1-cda46a27be0e\"}" method=POST path=/authenticate
- Se o problema for porque sua entidade do IAM não está mapeada no aws-auth ConfigMap ou está mapeada incorretamente, revise o aws-auth ConfigMap. Certifique-se de que a entidade do IAM esteja mapeada corretamente e atenda aos requisitos listados na seção You're not cluster creator (Você não é o criador do cluster). Nesse caso, os logs do autenticador do EKS são semelhantes aos seguintes:
time="2022-12-28T15:37:19Z" level=warning msg="access denied" arn="arn:aws:iam::XXXXXXXXXX:role/admin-test-role" client="127.0.0.1:33384" error="ARN is not mapped" method=POST path=/authenticate
- Se o aws-auth ConfigMap foi atualizado e você perdeu o acesso ao cluster, é possível acessar o cluster usando a entidade do IAM do criador do cluster. Isso ocorre porque o criador do cluster não precisa ser mapeado no aws-auth ConfigMap.
- Se a entidade do IAM do criador do cluster foi excluída, primeiro crie o mesmo usuário ou perfil do IAM novamente. Em seguida, acesse o cluster usando essa entidade do IAM seguindo as etapas na seção You're the cluster creator (Você é o criador do cluster).
- Se o criador do cluster for um perfil do IAM criado para um usuário de SSO que foi removido, você não poderá criar esse perfil do IAM novamente. Nesse caso, entre em contato com o AWS Support para obter assistência.
Informações relacionadas
Habilitar o acesso de usuário e perfil do IAM ao cluster
How do I provide access to other IAM users and roles after cluster creation in Amazon EKS? (Como conceder acesso a outros perfis e usuários do IAM após a criação de um cluster no Amazon EKS?)
Solução de problemas do Amazon EKS
Documentação do Kubernetes para Using RBAC authorization (Usar a autorização do RBAC)
Vídeos relacionados

Conteúdo relevante
- AWS OFICIALAtualizada há 4 meses
- AWS OFICIALAtualizada há 3 meses
- AWS OFICIALAtualizada há 10 meses