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

8 minuto de leitura
0

Quando uso os comandos kubectl para acessar um cluster do Amazon Elastic Kubernetes Service (Amazon EKS), recebo a mensagem de erro “erro: Você deve estar conectado ao servidor (não autorizado)”.

Breve descrição

Se o usuário ou o perfil do AWS Identity and Access Management (AWS IAM) criar um cluster do Amazon EKS diferente do cluster usado por aws-iam-authenticator, você receberá a mensagem de erro Não autorizado. Para resolver esse problema, configure o controle de acesso baseado em funções (RBAC) do cluster Amazon EKS para autorizar a entidade do IAM. Para mais informações sobre RBAC, consulte Uso da autorização do RBAC, no site do Kubernetes.

Somente o criador do cluster do Amazon EKS tem permissões system:masters para configurar o cluster. Há duas maneiras de estender as permissões system:masters para outros usuários e perfis do IAM:

  • Considere as credenciais do criador do cluster. Em seguida, adicione o perfil do IAM na seção mapRoles do aws-auth ConfigMap.
  • Use entradas de acesso EKS.

Importante: é uma prática recomendada não adicionar cluster\ _creator ao ConfigMap. Se você configurar incorretamente o ConfigMap, todos os usuários e perfis do IAM, incluindo o cluster\ _creator, poderão perder permanentemente o acesso ao cluster Amazon EKS. Por padrão, o cluster\ _creator tem acesso de administrador ao cluster que ele criou, então você não precisa adicionar o cluster\ _creater ao aws-auth ConfigMap.

Observação: na resolução a seguir, cluster\ _creator é a entidade do IAM que cria o cluster no Amazon EKS. O usuário ao qual você está concedendo acesso é designated_user.

Resolução

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

Identifique o usuário ou perfil do IAM do criador do cluster

Identifique a entidade do IAM do criador do cluster que tem acesso primário para configurar seu cluster do Amazon EKS. Para identificar o criador do cluster, pesquise a chamada de API CreateCluster no AWS CloudTrail e verifique a seção userIdentity da chamada de API.

Em seguida, identifique a entidade do IAM para a qual você está concedendo autorização depois de criar o cluster.

Use aws-auth ConfigMap para conceder acesso ao cluster quando cluster\ _creator for um usuário do IAM

Conclua as seguintes etapas:

  1. Instale o kubectl na sua máquina host local. Ou, se tiver uma instância dedicada do Amazon Elastic Compute Cloud (Amazon EC2) com um pacote kubectl instalado, use SSH para se conectar à instância.

  2. Na máquina host em que o kubectl está instalado, configure a AWS CLI com as credenciais designated_user:

    aws configure
  3. Execute o comando get-caller-identity da AWS CLI:

    aws sts get-caller-identity

    A saída retorna os detalhes do usuário do IAM para designated_user:

    {  
        "UserId": "#####################",  
        "Account": "############",  
        "Arn": "arn:aws:iam::############:user/designated_user"  
    }
  4. Liste os pods que estão sendo executados no cluster do namespace padrão:

    kubectl get pods --namespace default

    A saída mostra a mensagem de erro Não autorizado porque designated_user não tem autorização para acessar o cluster Amazon EKS.

  5. Configure o ID da chave de acesso da AWS e a chave de acesso secreta da AWS do cluster_creator.
    Se você usou o console do Amazon EKS para criar o cluster, em sua máquina host local, configure o usuário ou o perfil do IAM cluster_creator na AWS CLI:

    aws configure

    Se você usou eksctl para criar o cluster, use as credenciais de perfil especificadas da AWS CLI para configurar a AWS CLI para executar comandos kubectl.

  6. Verifique se cluster_creator tem acesso ao cluster:

    kubectl get pods

    Você não recebe a mensagem de erro Não autorizado, e a saída lista todos os pods que estão sendo executados no namespace padrão. Se a saída não mostrar nenhum recurso, então nenhum pod está sendo executado no namespace padrão.

  7. Para dar acesso ao cluster para designated_user, adicione a seção mapUsers ao seu arquivo aws-auth.yaml. Para mais informações, consulte Adicionar princípios do IAM ao cluster do Amazon EKS.

  8. Adicione designated_user à seção mapUsers do arquivo aws-auth.yaml e salve esse arquivo.

  9. Aplique o novo ConfigMap à configuração de RBAC do cluster:

    kubectl apply -f aws-auth.yaml
  10. Altere novamente a configuração da AWS CLI para usar as credenciais do designated_user:

aws configure
  1. Verifique se designated_user tem acesso ao cluster:
kubectl get pods

Você não recebe a mensagem de erro Não autorizado, e a saída lista todos os pods que estão sendo executados no namespace padrão. Se a saída não mostrar nenhum recurso, então nenhum pod está sendo executado no namespace padrão.

Use aws-auth ConfigMap para conceder acesso ao cluster quando o cluster\ _creator for um perfil do IAM

Se um perfil do IAM tiver criado o cluster em vez de um usuário do IAM, então não é possível usar as credenciais. Em vez disso, você deve assumir o perfil do IAM que criou o cluster para fornecer acesso a designated_user.

Conclua as seguintes etapas:

  1. Execute o comando get-caller-identity da AWS CLI para obter os detalhes do usuário do IAM de assume\ _role\ _user:

    aws sts get-caller-identity
  2. Confirme se assume_role_user tem acesso ao cluster:

    kubectl get pods

    A saída mostra a mensagem de erro Não autorizado porque designated_user não tem autorização para acessar o cluster Amazon EKS.

  3. Permita que assume_role_user assuma o perfil do cluster_creator:

    aws sts assume-role --role-arn arn:aws:iam:11122223333:role/cluster_creator --role-session-name test

    A saída mostra as credenciais temporárias do IAM para assume_role_user.

  4. Use as credenciais temporárias do IAM para definir as variáveis de ambiente AWS_ACCESS_KEY_ID, AWS_SESSION_TOKEN e AWS_SECRET_ACCESS_KEY:

    export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE  
    export AWS_SESSION_TOKEN=EXAMPLETOKEN  
    export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

    A AWS CLI classifica as credenciais definidas nas variáveis de ambiente e as usa para fazer chamadas para os serviços da AWS.

  5. Verifique se a AWS CLI está usando o perfil assumido para cluster_creator:

    aws sts get-caller-identity
  6. Para dar acesso ao cluster para designated_user, adicione a seção mapUsers ao seu arquivo aws-auth.yaml.

  7. Adicione designated_user à seção mapUsers do arquivo aws-auth.yaml e salve esse arquivo.

  8. Aplique a nova configuração à configuração de RBAC do cluster do Amazon EKS:

    kubectl apply -f aws-auth.yaml
  9. Remova a definição das seguintes variáveis de ambiente:

    unset AWS_ACCESS_KEY_ID  
    unset AWS_SESSION_TOKEN  
    unset AWS_SECRET_ACCESS_KEY
  10. Execute o comando get-caller-identity da AWS CLI para obter os detalhes do usuário do IAM de designated_user:

aws sts get-caller-identity
  1. Confirme se designated_user tem acesso ao cluster:
kubectl get pods

Você não recebe a mensagem de erro Não autorizado, e a saída lista todos os pods que estão sendo executados no namespace padrão. Se a saída não mostrar nenhum recurso, então nenhum pod está sendo executado no namespace padrão.

Observação: se você usa eksctl, consulte Gerenciar usuários e perfis do IAM no site eksctl para obter mais informações.

Use entradas de acesso do EKS para conceder acesso ao cluster a usuários e perfis do IAM

O Amazon EKS oferece suporte a três modos de autenticação para entradas de acesso:

  • CONFIG\ _MAP para usar somente aws-auth configMap.
  • API\ _AND\ _CONFIG\ _MAP para usar as APIs de entrada de acesso do EKS e aws-auth ConfigMap. Esse modo prioriza a autenticação por meio de entradas de acesso do EKS e é útil quando você precisa migrar permissões de aws-auth para entradas de acesso do EKS.
  • API para usar somente APIs de entrada de acesso do EKS.

Para mais informações, consulte Conceder aos usuários e perfis do IAM acesso às APIs do Kubernetes.

Para configurar o cluster com entradas de acesso, defina o modo de autenticação do cluster como EKS API ou EKS API e ConfigMap.

Para verificar o modo de autenticação atual do cluster, conclua as seguintes etapas:

  1. Abra o console do Amazon EKS.
  2. Escolha a guia Acesso.
  3. Em Configuração de acesso, verifique o rótulo de Modo de autenticação.

Ou execute o comando describe-cluster:

aws eks describe-cluster --name example-cluster --query 'cluster.accessConfig.authenticationMode' --region exampleRegion

Se o modo de autenticação do cluster for EKS API ou EKS API and ConfigMap, você poderá configurar o cluster para usar entradas de acesso. Caso contrário, consulte Alterar o modo de autenticação para usar as entradas de acesso.

Observação: você pode alternar do modo de autenticação CONFIG_MAP para o modo API, mas não pode alternar do modo API ou API\ _AND\ _CONFIG\ _MAP para o modo CONFIG_MAP. Para mais informações, consulte Gerenciador de acesso ao cluster no site do GitHub.

Informações relacionadas

Usar um perfil do IAM na AWS CLI

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

Migração de entradas do aws-auth ConfigMap para entradas de acesso

Como posso usar a API de entrada de acesso do Amazon EKS para recuperar o acesso a um cluster do EKS?

AWS OFICIAL
AWS OFICIALAtualizada há 5 meses