Como soluciono problemas de RBAC com o Amazon EKS?

9 minuto de leitura
0

Quando uso meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS), quero solucionar erros, como Acesso negado, Não autorizado e Proibido.

Breve descrição

O AWS Identity and Access Management (IAM) fornece autenticação para o cluster e conta com o controle de acesso baseado em perfl (RBAC) nativo do Kubernetes para autorização. Quando um usuário ou perfil do IAM cria um cluster do Amazon EKS, a entidade do IAM é adicionada à tabela de autorização do RBAC do Kubernetes com as permissões system:masters.

Para adicionar usuários com acesso de administrador a um cluster do Amazon EKS, conclua as seguintes etapas:

  1. Conceda as permissões de console do IAM necessárias para os usuários do IAM associados para que eles possam realizar as operações de cluster necessárias.
  2. Atualize o aws-auth ConfigMap para fornecer aos usuários adicionais do IAM o perfil do cluster e as associações do perfil. Para obter mais informações, consulte Adicione usuários ou perfis do IAM ao cluster do Amazon EKS.

Observação: o aws-auth ConfigMap não é compatível com curingas. É uma prática recomendada usar eksctl para editar o ConfigMap. Entradas malformadas podem levar ao bloqueio.

Execute o seguinte comando kubectl auth can-i para verificar se as permissões de RBAC estão definidas corretamente:

kubectl auth can-i list secrets --namespace dev --as dave

Quando você executa o comando kubectl, o mecanismo de autenticação conclui as seguintes etapas principais:

  • O kubectl lê a configuração do contexto de ~/.kube/config.
  • O comando da AWS Command Line Interface (AWS CLI) aws eks get-token é executado para obter credenciais, conforme definido em .kube/config.
  • A solicitação k8s api é enviada e assinada com o token anterior.

Observação: você não pode modificar a expiração de 15 minutos do token obtido por meio do aws eks get-token.

Resolução

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

Problemas de autenticação

Erro: "The cluster is inaccessible due to the cluster creator IAM user being deleted" (O cluster está inacessível devido à exclusão do usuário do IAM criador do cluster)

Se você receber o erro anterior, deverá recriar o usuário do IAM criador do cluster com o mesmo nome do cluster. Para fazer isso, localize informações sobre o administrador e o criador do cluster.

Se você criou o cluster nos últimos 90 dias, poderá pesquisar no AWS CloudTrail por chamadas de API CreateCluster. As permissões do criador do cluster são idênticas às permissões system:masters. Caso tenha outros usuários com permissões system:masters, então você não dependerá do criador do cluster. Se você se autenticou anteriormente com o cluster do Amazon EKS, poderá revisar os logs do autenticador anteriores no grupo de logs do Amazon CloudWatch. Use a seguinte consulta do CloudWatch Logs Insights para verificar os detalhes do perfil e do usuário administrador do cluster:

fields @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "system:masters"

Para recriar o perfil e o usuário do IAM do criador do cluster, execute os seguintes comandos:

Importante: verifique todos os comandos da AWS CLI fornecidos e substitua todas as instâncias de strings de exemplo pelos seus valores necessários. Por exemplo, substitua EXAMPLE-USER pelo seu nome de usuário.

aws iam create-user --user-name <EXAMPLE-USER>
aws iam create-role --role-name <EXAMPLE-ROLE>

Erro: "Could not be assumed because it does not exist or the trusted entity is not correct or an error occurred when calling the AssumeRole operation" (Não foi possível supor porque não existe ou a entidade confiável não está correta ou ocorreu um erro ao chamar a operação AssumeRole)

Se você receber o erro anterior, verifique se a política de confiança concede corretamente as permissões de suposição ao usuário. Para mais informações, consulte Tutorial do IAM: delegar acesso entre contas da AWS usando perfis do IAM.

Para identificar usuários locais que implantem o cluster do Amazon EKS por padrão, execute o seguinte comando:

kubectl get clusterroles -l kubernetes.io/bootstrapping=rbac-defaults

Desative o acesso anônimo para ações de API. Usuários anônimos têm o assunto definido como name: system:unauthenticated. Para identificar usuários anônimos, execute o seguinte comando:

kubectl get clusterrolebindings.rbac.authorization.k8s.io -o json | jq '.items[] | select(.subjects[]?.name=="system:unauthenticated")'

Para obter mais informações, consulte os Guias de práticas recomendadas do Amazon EKS.

Problemas de autorização

Erro: "Couldn't get current server API group list" (Não foi possível obter a lista atual de grupos de API do servidor)

Para solucionar o erro anterior, consulte Acesso negado ou não autorizado (kubectl).

Erro: "You must be logged in to the server (Unauthorized)" (Você deve estar logado no servidor [não autorizado])

Para solucionar o erro anterior, consulte Como resolvo o erro “You must be logged in to the server (Unauthorized)” (Você deve estar logado no servidor [não autorizado])?

Erro: "You must be logged in to the server (the server has asked for the client to provide credentials)" (Você deve estar logado no servidor [o servidor solicitou que o cliente forneça as credenciais])

O erro anterior ocorre quando você usa uma entidade do IAM para fazer chamadas de API e não mapeou corretamente a entidade do IAM. Você deve mapear a entidade do IAM para um perfil do Amazon EKS no aws-auth ConfigMap do cluster. Para obter mais informações, consulte Habilitar o acesso de usuário e perfil do IAM ao cluster.

Erro: "Can't describe cluster control plane: AccessDeniedException" (Não é possível descrever o ambiente de gerenciamento do cluster: AccessDeniedException)

O erro anterior ocorre quando você atualiza o kubeconfig com um usuário e um perfil que não têm permissão para executar a ação eks:DescribeCluster.

Erro: "Current user or role does not have access to Kubernetes objects on this EKS cluster" (O usuário ou perfil atual não tem acesso aos objetos do Kubernetes neste cluster do EKS)

Para obter informações sobre o erro anterior, consulte Resolve the Kubernetes object access error in Amazon EKS (Resolver o erro de acesso ao objeto do Kubernetes no Amazon EKS).

Erro: "Changing the cluster creator IAM to another user/role" (Alterar o IAM do criador do cluster para outro usuário/perfil)

Depois de criar um cluster, você não pode alterar o IAM do criador do cluster para outro usuário porque não é possível configurar um IAM do criador do cluster.

Problemas de rede

Erro: "Unable to connect to the server: dial tcp 172.xx.xx.xx.xx:443: i/o timeout" (Não é possível se conectar ao servidor: dial tcp 172.xx.xx.xx.xx:443: i/o timeout)

Se você receber esse erro, confirme se os grupos de segurança estão permitindo o tráfego do endereço IP de origem do remetente.

Erro: "Unable to connect to the server: x509: certificate is valid for *.example.com , example.com , not https://xxx.gr7.us-east-1.eks.amazonaws.com" (Não é possível se conectar ao servidor: x509: certificate is valid for *.example.com , example.com , not https://xxx.gr7.us-east-1.eks.amazonaws.com)

Se você receber esse erro, verifique se as configurações de proxy estão corretas.

Problemas do KUBECONFIG

Erro: "The connection to the server localhost:8080 was refused" (A conexão com o servidor localhost:8080 foi recusada)

O erro anterior ocorre quando o arquivo kubeconfig está ausente. O arquivo kubeconfig está localizado em ~/.kube/config, e o kubectl requer o arquivo. Esse arquivo contém credenciais de cluster que são necessárias para se conectar ao servidor da API do cluster. Se o kubectl não conseguir encontrar esse arquivo, ele tentará se conectar ao endereço padrão (localhost:8080).

Erro: "Kubernetes configuration file is group-readable" (O arquivo de configuração do Kubernetes é legível pelo grupo)

O erro anterior ocorre quando as permissões do arquivo kubeconfig estão incorretas. Para resolver esse problema, execute o seguinte comando:

chmod o-r ~/.kube/config
chmod g-r ~/.kube/config

Problemas de configuração do Centro de Identidade do AWS IAM (sucessor do AWS Single Sign-on)

Importante: remova /aws-reserved/sso.amazonaws.com/ do URL do rolearn. Caso contrário, você não poderá ser autorizado como um usuário válido.

Atribuir grupos de usuários a uma política de permissões do IAM

1.    Abra o console o Centro de Identidade do IAM.

2.    Escolha a guia AWS Accounts (Contas da AWS) e escolha a AWS Account (Conta da AWS) para atribuir usuários.

3.    Escolha Assign users (Atribuir usuários).

4.    Pesquise os grupos de usuários e escolha Next: Permission sets (Próximo: conjuntos de permissões).

5.    Escolha Create new permission set (Criar novo conjunto de permissões) e, em seguida, escolha Create a custom permission set (Criar um conjunto de permissões personalizado).

6.    Dê um nome ao conjunto de permissões e marque a caixa de seleção Create a custom permissions policy (Criar uma política de permissões personalizada).

7.    Copie a política de permissões a seguir e cole-a na janela:

{
"Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*"
    }
  ]
}

8.    Escolha Create (Criar).

Configurar permissões de perfil com o RBAC do Kubernetes

Para configurar as permissões de perfil com o RBAC do Kubernetes, use o seguinte manifesto para criar um perfil de RBAC:

apiVersion: rbac.authorization.k8s.io/v1 
kind: Role
metadata:
    name: <example name of the RBAC group>
    namespace: <example name of namespace>
 rules:
 - apiGroups: [""]
    resources: ["services", "endpoints", "pods", "deployments", "ingress"]
    verbs: ["get", "list", "watch"]

Modificar o autenticador ConfigMap do IAM

1.    Execute o seguinte comando para capturar o perfil do IAM do grupo de usuários do Centro de Identidade do IAM que contém os dados do usuário desejado:

aws iam list-roles | grep Arn

2.    Execute o seguinte comando h para modificar o autenticador ConfigMap:

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

3.    Adicione os seguintes atributos ao ConfigMap em mapRoles:

- rolearn: <example arn of the AWS SSO IAM role> 
username: <example preferred username> 
groups:
    - <example name of the RBAC group>

Importante: remova /aws-reserved/sso.amazonaws.com/ do URL do rolearn. Caso contrário, você não poderá ser autorizado como um usuário válido.

4.    Atualize o arquivo kubeconfig executando um dos seguintes comandos.

aws eks update-kubeconfig —-name <example eks cluster>  —-region <example region>

5.    Faça login com o nome de usuário do Centro de Identidade do IAM e execute os comandos kubectl.


Informações relacionadas

Default roles and role bindings (Perfis padrão e associações de perfis) Controlling access to EKS clusters (Controlar o acesso aos clusters do EKS)

AWS OFICIAL
AWS OFICIALAtualizada há um ano