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 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. Esse erro geralmente é causado por uma das seguintes configurações:

  • 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, conclua as etapas em uma das seções a seguir com base no seu caso de uso:

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se está usando a versão mais recente da AWS CLI.

Você é o criador do cluster

Se sua entidade do IAM foi usada para criar o cluster do Amazon EKS, você é o criador do cluster. Para resolver o erro como criador do cluster, conclua as seguintes etapas:

  1. No Amazon CloudWatch Log Insights, selecione o grupo de logs para seu cluster do Amazon EKS. Por 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: ative os logs do autenticador do Amazon EKS.
    A consulta retorna a entidade do IAM que está mapeada como criadora do cluster:

    @messagetime="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. Analise a entidade do IAM do criador do cluster para a AWS CLI. 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

    Você também pode usar um perfil específico para executar este comando:

    $ 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. Para atualizar ou gerar o arquivo kubeconfig, execute 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 para o arquivo kubeconfig, 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

Se sua entidade do IAM não foi usada para criar o cluster, você não é o criador do cluster. Nesse caso, conclua as etapas a seguir para mapear sua entidade do IAM para o aws-auth ConfigMap para permitir o acesso ao cluster:

  1. Analise a entidade do IAM do criador do cluster para a AWS CLI. 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

    Você também pode usar um perfil específico para executar este comando:

    $ 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 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. Em seguida, use kubectl para tentar acessar seu cluster novamente. Se o problema persistir, continue com a próxima etapa.

  2. Se a entidade do IAM retornada não for a criadora do cluster, adicione sua entidade ao aws-auth ConfigMap para permitir que a entidade acesse o cluster. Como somente o administrador do cluster pode modificar o aws-auth ConfigMap, conclua uma das seguintes tarefas:
    Para usar a entidade do IAM criadora do cluster para acessar o cluster, conclua as etapas na seção Você é o criador do cluster.
    Peça ao administrador do cluster que execute essa ação.

  3. 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, continue com a próxima etapa. Se sua entidade do IAM não estiver no aws-auth ConfigMap, execute o seguinte comando para mapear automaticamente sua entidade do IAM:

    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 edite o aws-auth ConfigMap para mapear manualmente sua entidade do IAM:

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

    Para adicionar uma entidade do IAM ao aws-auth ConfigMap, adicione o ARN do usuário ou perfil do IAM ao mapUsers.
    Exemplo de usuário do IAM:

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

    Exemplo de perfil do IAM:

    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 obter mais informações sobre os requisitos do caminho rolearn, consulte a seção O aws-auth ConfigMap não concede acesso ao cluster.
    Para especificar rolearn para um perfil do IAM do AWS IAM Identity Center, 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 Default roles and role bindings no site do Kubernetes. Para restringir o acesso desse usuário, crie um perfil do Amazon EKS e um recurso de vinculação de perfis. Para obter mais informações, consulte Permissões obrigatórias.

  4. Execute o comando a seguir para atualizar ou gerar o arquivo kubeconfig. Certifique-se de que a AWS CLI esteja configurada com sua entidade do IAM.

    $ 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.
    Você também pode usar um perfil específico para executar este 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.

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

    $ kubectl config view --minify
  6. 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

Use entradas de acesso para recuperar o acesso ao cluster

Use a API CreateAccessEntry para fornecer ou restaurar o acesso ao seu cluster do Amazon EKS. Para obter mais informações, consulte How can I use the Amazon EKS access entry API to recover access to an EKS cluster?

Resolução de problemas

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. Se o autenticador do Amazon EKS não conseguir autenticar a solicitação, verifique os logs do autenticador EKS no CloudWatch. Use as dicas de solução de problemas a seguir para identificar o problema.

Acesse seus logs do autenticador EKS

  1. Ative o registro em log para seu cluster do 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.

Revise seus logs do autenticador EKS

Com base na causa do erro, conclua as seguintes tarefas:

  • Se o problema for causado pelo uso de uma entidade do IAM incorreta para kubectl, revise o kubectl kubeconfig e a configuração da AWS CLI. Certifique-se de usar a entidade do IAM correta. No exemplo de saída a seguir, a entidade do IAM usada pelo kubectl não pode ser validada. Analise a entidade do IAM que o kubectl usa e verifique se a entidade existe no IAM e se o acesso programático da entidade está ativado.
    Exemplo de saída:

    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 ou está mapeada incorretamente no aws-auth ConfigMap, revise 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. Para entidades do IAM mapeadas incorretamente ou ausentes, os registros do autenticador EKS são semelhantes ao seguinte exemplo de saída:

    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, use a entidade do IAM criadora do cluster para acessar o cluster. Como o criador do cluster não precisa ser mapeado no aws-auth ConfigMap, use essa entidade do IAM para acessar o cluster.

  • Se a entidade do IAM do criador do cluster tiver sido excluída, recrie a mesma entidade do IAM com a mesma convenção de nomenclatura. Então, essa entidade da IAM criadora de cluster recriada pode ter o mesmo ARN da entidade do IAM. Em seguida, conclua as etapas na seção Você é o criador do cluster para usar a entidade do IAM para acessar o 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

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

Uso da autorização RBAC no site do Kubernetes

Conceder aos usuários do IAM acesso ao Kubernetes com entradas de acesso ao EKS

Entradas de acesso do EKS no site eksctl

AWS OFICIAL
AWS OFICIALAtualizada há 5 meses