Como resolvo o erro "Você deve estar conectado ao servidor (não autorizado)" quando me conecto ao servidor da API do Amazon EKS?

10 minuto de leitura
0

Estou usando comandos kubectl para me conectar ao servidor de interface de programação de aplicações (API) do Amazon Elastic Kubernetes Service (Amazon EKS). Recebi a mensagem "error: Você deve estar conectado ao servidor (não autorizado)".

Breve descrição

Esse erro é recebido quando a entidade do AWS Identity and Access Management (IAM) configurada no kubectl não é autenticada pelo Amazon EKS.

Você é autenticado e autorizado a acessar um 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, é preciso 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 está executando uma versão recente da AWS CLI.

Você é o criador do cluster

Você é o criador do cluster se 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 do cluster do Amazon EKS (exemplo: /aws/eks/my-cluster/cluster). 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 ativado os logs do autenticador do Amazon EKS.

Essa consulta retorna a entidade do IAM que está mapeada como 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 do criador do cluster. Para conferir se a entidade do IAM está configurada para a AWS CLI no seu ambiente de shell, execute o seguinte comando:

$ aws sts get-caller-identity

Também é possível 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 do criador 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 do criador do cluster.

3.Atualize ou gere o arquivo kubeconfig usando o seguinte comando:

$ 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 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 sua entidade do IAM não foi usada para criar o cluster. Nesse caso, é preciso 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 no seu ambiente shell, execute o seguinte comando:

$ aws sts get-caller-identity

Também é possível 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 aquela usada para interagir com seu cluster, primeiro atualize a configuração da AWS CLI para usar a entidade do IAM correta. Em seguida, tente acessar seu cluster novamente usando kubectl. Se o problema persistir, prossiga 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 uma das seguintes ações:

  • Use as instruções na seção 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.

Execute o comando a seguir para verificar se sua entidade do IAM está no aws-auth ConfigMap:

eksctl get iamidentitymapping --cluster cluster-name

-ou-

kubectl describe configmap aws-auth -n kube-system

Se sua entidade do IAM estiver no aws-auth ConfigMap, avance para a etapa 3.

Execute o comando a seguir para mapear sua entidade do IAM automaticamente:

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 rolearn, expanda a seção 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 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á autorizá-lo como um usuário válido.
  • O grupo system:masters permite acesso do superusuário para realizar qualquer ação em qualquer recurso. Para obter mais informações, consulte Funções padrão e associações de funções. Para restringir o acesso desse usuário, é possível criar um perfil do Amazon EKS e um recurso de vinculação de perfis. 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.Execute o comando a seguir para atualizar ou gerar o arquivo kubeconfig. Certifique-se de que a AWS CLI esteja configurada com a entidade do IAM 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.

Também é possível 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 usuário ou perfil do IAM está autenticado, tente acessar o cluster novamente. Por exemplo, você pode executar o comando a seguir para confirmar se 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 adicionais para solução de problemas

Se o erro persistir, use as dicas para 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 Amazon EKS.

2.Abra o CloudWatch Log Insights.

3.Selecione o grupo de logs do 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

Execute os comandos kubectl para identificar as linhas de log do intervalo de tempo em que você recebeu o erro. É possível 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, examine a configuração de kubectl kubeconfig e da AWS CLI. Certifique-se de estar usando a entidade do IAM correta. 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. Verifique se a entidade do IAM usada pelo kubectl existe no IAM e se o acesso programático da entidade está 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 ocorrer porque sua entidade do IAM não está mapeada no aws-auth ConfigMap ou está mapeada incorretamente, examine o aws-auth ConfigMap. Certifique-se de que a entidade do IAM esteja mapeada corretamente e atenda aos requisitos listados na seção 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 tiver sido 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 ** 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

Como conceder acesso a outros usuários e perfis do IAM após a criação de um cluster no Amazon EKS?

Solução de problemas do Amazon EKS

Uso da autorização RBAC no site do Kubernetes

AWS OFICIAL
AWS OFICIALAtualizada há um ano