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.
Informações relacionadas
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?