Como resolvo erros de “erro: você deve estar conectado ao servidor (não autorizado)” ao me conectar a um cluster do Amazon EKS a partir do CodeBuild?

Data da última atualização: 04/11/2021

Estou tentando me conectar a um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) do AWS CodeBuild usando a função de serviço CodeBuild. Por que meus comandos kubectl estão retornando erros de “erro: você deve estar logado no servidor (não autorizado)” e como soluciono o problema?

Breve descrição

O AWS Identity and Access Management (IAM) Authenticator não permite um caminho na função Amazon Resource Name (ARN) usada no mapa de configuração. Se a função ARN (rolearn) no seu aws-auth ConfigMap incluir um caminho, o Amazon EKS retornará o seguinte erro:

"erro: Você deve estar logado no servidor (não autorizado)"

A função de serviço do CodeBuild ARN inclui o seguinte caminho: /service-role. Ao especificar o valor rolearn em seu aws-auth ConfigMap, você deve remover o caminho /service-role — ou qualquer outro caminho, se estiver usando outra função. Para obter mais informações, consulte Gerenciando usuários ou funções do IAM para o seu cluster.

Se você receber erros após remover qualquer caminho da função ARN em seu aws-auth ConfigMap, siga as instruções no seguinte artigo: Como resolvo um erro de não autorizado a entrar no servidor ao me conectar ao servidor de API do Amazon EKS?

Resolução

Identifique o ARN da função de serviço do CodeBuild e remova o caminho /service-role

1.    Abra o console CodeBuild.

2.    No painel de navegação esquerdo, escolha Criar. Em seguida, escolha Criar projetos.

3.    Selecione o nome do projeto. Em seguida, escolha Detalhes da criação.

4.    Na seção Ambiente, no painel Detalhes da criação, copie o ARN da função de serviço do CodeBuild.

5.    Em um editor de texto, cole o ARN da função de serviço CodeBuild e remova o caminho /service-role. Em seguida, copie o ARN editado.

Exemplo de função de serviço do CodeBuild ARN

arn:aws:iam::123456789012:role/service-role/codebuild-project-service-role

Exemplo de função de serviço do CodeBuild ARN com o caminho /service-role removido

arn:aws:iam::123456789012:role/codebuild-project-service-role

Adicione o ARN da função de serviço CodeBuild editado ao seu aws-auth ConfigMap

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

Observação: você pode executar o comando do seu computador local ou de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) que tenha acesso ao cluster EKS. O usuário que criou o cluster tem acesso ao cluster por padrão.

$ kubectl edit -n kube-system cm aws-auth

O ConfigMap aws-auth abre no editor vi.

Observação: se você receber um erro do servidor (NotFound): configmaps “aws-auth” não encontrado, use o exemplo ConfigMap aws-auth fornecido no seguinte artigo: Gerenciando usuários ou funções do IAM para o seu cluster.

2.    No editor vi, adicione o ARN da função de serviço CodeBuild editada ao ConfigMap aws-auth fazendo o seguinte:
Ative o modo de inserção pressionando i.
Na instrução mapRoles, em system:masters, para o valor rolearn, insira o ARN da função de serviço CodeBuild editada.
Ative o modo de comando pressionando Esc. Em seguida, salve e feche o arquivo inserindo :wq.

Exemplo de instrução mapRoles que inclui um ARN de função de serviço CodeBuild formatado corretamente

```
mapRoles: |
   - groups:
     - system:masters
     rolearn: arn:aws:iam::123456789012:role/codebuild-project-service-role
     username: codebuild-project-service-role
```