Como resolvo o erro “Seu usuário ou função atual não tem acesso aos objetos do Kubernetes neste cluster EKS” no Amazon EKS?

8 minuto de leitura
0

Eu recebo o seguinte erro no Amazon Elastic Kubernetes Service (Amazon EKS): “Seu usuário ou função atual não tem acesso aos objetos Kubernetes neste cluster EKS.”

Breve descrição

Você pode receber esse erro ao usar o AWS Management Console com um usuário ou função do AWS Identity and Access Management (IAM). O erro indica que o usuário ou a função do IAM não tem as permissões RBAC (do site do Kubernetes) necessárias para acessar a API Kubernetes. Para visualizar os recursos do Kubernetes no AWS Management Console, seu usuário ou função do AWS IAM deve ser mapeado para aws-auth ConfigMap em seu cluster Amazon EKS.

Ao criar um cluster Amazon EKS, seu usuário ou função do IAM recebe automaticamente as permissões system:masters na configuração RBAC do cluster. Isso permite que visualizar os recursos do Kubernetes por meio do console do Amazon EKS. Ele também permite que você edite o aws-auth ConfigMap no Kubernetes e conceda a usuários ou funções adicionais da AWS a capacidade de interagir com o cluster.

Dois sistemas de autorização diferentes estão em uso. O AWS Management Console usa o IAM. O cluster EKS usa o sistema Kubernetes RBAC (do site do Kubernetes). O aws-auth ConfigMap do cluster associa identidades do IAM (usuários ou funções) às identidades RBAC do cluster. Isso significa que o aws-auth ConfigMap associa identidades do IAM às identidades do Kubernetes.

Resolução

Pré-requisitos

Antes de começar, colete as seguintes informações.

Usuário ou função não administrativa

Se você não for um usuário ou função do IAM de administrador de cluster e precisar de visibilidade no console do Amazon EKS, conclua as seguintes etapas:

1.    Obtenha a identidade do IAM Amazon Resource Name (ARN) do usuário do AWS Management Console.

Se for uma função do IAM, use o seguinte formato ARN:

arn:aws:iam::111122223333:role/example

Importante: não use o seguinte formato:

arn:aws:iam::111122223333:role/my-team/developers/example

2.    Forneça o ARN ao administrador do cluster e solicite que o administrador adicione você ao aws-auth ConfigMap.

Observação: consulte a seção Identificar o ARN de identidade do IAM do usuário do AWS Management Console para ver as etapas sobre como acessar seu ARN.

Criador do cluster ou usuário ou função de administrador do cluster

Se você for o criador ou administrador do cluster, use a ferramenta kubectl ou a ferramenta eksctl para gerenciar o aws-auth ConfigMap.

Observação: por padrão, o grupo system:masters está vinculado ao clusterrole chamado cluster-admin. Esse clusterrole usa o curinga (“*”) para recursos e verbos em sua PolicyRule. Isso significa que qualquer usuário atribuído ao grupo system:masters tem acesso total a todos os recursos do Kubernetes dentro do cluster.

Consulte a seção Identificar o criador do cluster para obter etapas detalhadas sobre como os criadores e administradores do cluster podem identificar seu status de administrador.

Identifique o ARN de identidade do IAM do usuário do AWS Management Console

Identifique o usuário ou a função do IAM que você está usando para acessar o console. Isso pode ser diferente da identidade que usa com a AWS Command Line Interface (AWS CLI). Confirme se o usuário ou função do IAM identificado tem permissões para visualizar nós e cargas de trabalho de todos os clusters no AWS Management Console. Em seguida, obtenha o ARN da identidade do IAM. Use uma das opções a seguir para acessar o ARN.

Use a AWS CLI

Se você tiver acesso à AWS CLI ao usuário ou à função do IAM, execute o seguinte comando:

aws sts get-caller-identity --query Arn

Inicie o CloudShell

Se você não tiver acesso à AWS CLI, execute o seguinte comando:

aws sts get-caller-identity --query Arn

A saída é semelhante à seguinte:

"arn:aws:iam::111122223333:role/testrole"

-ou-

"arn:aws:iam::111122223333:user/testuser"

Observação:

  • se for um ARN de função do IAM, certifique-se de que o formato seja semelhante ao formato ARN obtido na seção Pré-requisitos.
  • Se o ARN incluir a função assumida, você deverá obter o ARN da função. Por exemplo, a função ARN de arn:aws:sts::123456:assumed-role/MyRole/aadams está associada à função ARN arn:aws:sts::123456:role/MyRole. Você pode verificar esse valor no console do IAM.

Identifique o criador do cluster

Para encontrar o criador do cluster ou a função de administrador com permissões primárias para configurar seu cluster, pesquise a chamada da API CreateCluster no AWS CloudTrail. Em seguida, verifique a seção userIdentity da chamada de API.

Dica: se você encontrar o nome do criador do cluster no CloudTrail, mas ele estiver excluído, recrie um novo usuário ou função do IAM com o mesmo nome. Como essa nova entidade IAM tem o mesmo ARN do criador original do cluster, ela herda o mesmo acesso de administrador ao cluster.

Observação: o CloudTrail fornece apenas 90 dias de histórico.

Adicione um novo usuário ou função do IAM ao RBAC do Kubernetes usando kubectl ou eksctl

Antes de escolher a ferramenta kubectl ou eksctl para editar o aws-auth ConfigMap, certifique-se de concluir a etapa 1. Em seguida, siga as etapas 2 a 4 para editar com kubectl. Para editar com eksctl, vá para a etapa 5.

1.    Depois de identificar o criador ou administrador do cluster, configure a AWS CLI para usar o IAM do criador do cluster. Consulte Noções básicas de configuração para obter mais informações.

Para verificar se a AWS CLI está configurada corretamente com a entidade IAM, execute o seguinte comando:

$ aws sts get-caller-identity

A saída retorna o ARN do usuário ou da função do IAM. Por exemplo:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

Observação: se houver algum erro ao executar comandos da CLI, verifique se você está usando a versão mais recente da AWS CLI.

2.     Para modificar o aws-auth ConfigMap com kubectl, você deve ter acesso ao cluster. Execute o seguinte comando kubectl:

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

O console mostra o ConfigMap atual.

Se você não conseguir se conectar ao cluster, tente atualizar seu arquivo kubeconfig. Execute o arquivo com uma identidade do IAM que tenha acesso ao cluster. A identidade que criou o cluster sempre tem acesso ao cluster.

aws eks update-kubeconfig --region region_code --name my_cluster

Observação: substitua region\ _code pelo código de região da AWS do cluster EKS e my\ _cluster pelo nome do cluster EKS.

Os comandos kubectl devem se conectar ao endpoint do servidor EKS. Se o endpoint do servidor de API for público, você deverá ter acesso à Internet para se conectar ao endpoint. Se o endpoint do servidor API for privado, você deverá se conectar ao endpoint do servidor EKS de dentro da VPC em que o cluster EKS está sendo executado.

3.    Para editar o aws-auth ConfigMap no editor de texto como criador ou administrador do cluster, execute o seguinte comando:

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

4.   Adicione um usuário ou uma função do IAM:

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

-ou-

Adicione a função do IAM ao mapRoles. Por exemplo:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole    
    groups:
    - system:bootstrappers
    - system:nodes

Considere as informações a seguir:

  • O system:masters permite acesso do superusuário para realizar qualquer ação em qualquer recurso. Essa não é uma prática recomendada para ambientes de produção.
  • É uma prática recomendada minimizar as permissões concedidas. Considere criar uma função com acesso somente a um namespace específico. Para obter mais informações, consulte Using RBAC authorization no site do Kubernetes. Além disso, consulte Permissões necessárias e consulte a seção Visualizar recursos do Kubernetes em um namespace específico para ver um exemplo sobre o acesso restrito do console Amazon EKS.

5.    A ferramenta eksctl permite que você atualize o aws-auth ConfigMap com o seguinte comando:

eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>

Observação: substitua your_cluster_Name pelo seu nome do cluster EKS, your_region pela sua Região do cluster EKS e YOUR_IAM_ARN pelo seu perfil do IAM ou ARN de usuário.

Verifique o acesso ao seu cluster Amazon EKS

1.    Abra o console do Amazon EKS.

2.    Na seção Amazon EKS do painel de navegação, escolha Clusters.

3.    Escolha seu cluster.

4.    Verifique se há erros nas guias Visão geral e Cargas de trabalho.

Se você configurou um namespace específico, verá a seguinte mensagem de erro no console do Amazon EKS:

Error loading Deployments
deployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"

O erro não aparece para o namespace específico.

Para solucionar mensagens de erro, consulte Não consigo ver os nós na guia Computação ou qualquer coisa na guia Recursos e você receberá um erro no AWS Management Console.


AWS OFICIAL
AWS OFICIALAtualizada há um ano