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

7 minuto de leitura
0

Quando tento acessar o cluster do Amazon Elastic Kubernetes Service (Amazon EKS) por meio de comandos kubectl, recebo o seguinte erro de autorização: “erro: Você deve estar conectado ao servidor (Não autorizado).”

Breve descrição

Você recebe um erro de autorização quando sua entidade do AWS Identity and Access Management (IAM) não está autorizada pela configuração de controle de acesso baseado em função (RBAC) do cluster do Amazon EKS. Isso acontece quando um usuário ou perfil do IAM cria um cluster do Amazon EKS diferente daquele usado por aws-iam-authenticator.

Inicialmente, somente o criador do cluster do Amazon EKS tem permissões system:masters para configurar o cluster. Para estender permissões system:masters a outros usuários e perfis, você deve adicionar aws-auth ConfigMap à configuração do cluster do Amazon EKS. O ConfigMap permite que outras entidades do IAM, como usuários e perfis, acessem o cluster do Amazon EKS.

Para conceder acesso a um perfil do IAM, você deve assumir as credenciais do criador do cluster. Em seguida, adicione o perfil do IAM na seção mapRoles do aws-auth ConfigMap.

Importante:

  • evite erros de sintaxe, como erros de digitação, ao atualizar o aws-auth ConfigMap. Esses erros podem afetar as permissões de todos os usuários e perfis do IAM que são atualizados no ConfigMap do cluster do Amazon EKS.
  • É uma prática recomendada evitar a adição de cluster_creator ao ConfigMap. A modificação inadequada do ConfigMap pode fazer com que todos os usuários e perfis do IAM, incluindo cluster_creator, percam permanentemente o acesso ao cluster do Amazon EKS.
  • Você não precisa adicionar cluster_creator a aws-auth ConfigMap para obter acesso de administrador ao cluster do Amazon EKS. Por padrão, cluster_creator tem acesso de administrador ao cluster do Amazon EKS que ele criou.

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

Resolução

Observação: nas etapas a seguir, o criador do cluster é cluster_creator. O usuário que atualmente não tem acesso ao cluster, mas precisa de acesso, é designated_user.

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

1.    Identifique o usuário ou perfil do IAM do criador do cluster que tem acesso primário para configurar seu cluster do Amazon EKS.

2.    Identifique o usuário do IAM ao qual o criador do cluster concederá autorização após a criação do cluster. 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.

Adicionar designated_user a ConfigMap se cluster_creator for um usuário do IAM

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 mesma máquina host em que o kubectl está instalado, configure a AWS CLI com as credenciais designated_user:

aws configure

3.    Na AWS CLI, execute o seguinte comando:

aws sts get-caller-identity

A saída deve retornar os detalhes do usuário do IAM de designated_user.

Por exemplo:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX: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 o seguinte: “erro: Você deve estar conectado ao servidor (Não autorizado).” Esse erro significa que designated_user não tem autorização para acessar o cluster do Amazon EKS.

5.    Configure o ID da chave de acesso da AWS e a chave de acesso secreta da AWS de cluster_creator.

Se o cluster foi criado usando o Console de Gerenciamento da AWS, identifique o perfil do IAM ou o usuário que criou o cluster. Na máquina host em que o kubectl está instalado, configure o usuário ou o perfil do IAM cluster_creator na AWS CLI:

aws configure

Se o eksctl foi usado para criar o cluster, use as credenciais de perfil padrão ou 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

Se tudo estiver configurado corretamente, você não receberá uma mensagem de erro Não autorizado. A saída deve listar todos os pods em execução no namespace padrão. Se a saída mostrar que nenhum recurso foi encontrado, significa que 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. Veja o exemplo do arquivo aws-auth.yaml em Habilitar o acesso de usuários e perfis do IAM ao seu cluster.

8.    Adicione designated_user à seção mapUsers do arquivo aws-auth.yaml na etapa 7 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 de designated_user:

aws configure

11.    Verifique se designated_user tem acesso ao cluster:

kubectl get pods

Se tudo estiver configurado corretamente, você não receberá uma mensagem de erro Não autorizado. A saída lista todos os pods que estão sendo executados no namespace padrão. Se a saída mostrar que nenhum recurso foi encontrado, significa que nenhum pod está sendo executado no namespace padrão.

Adicionar designated_user a ConfigMap se cluster_creator for um perfil do IAM

Nas etapas anteriores, você usou as credenciais de cluster_creator para fornecer acesso a designated_user. No entanto, se um perfil do IAM tiver criado o cluster em vez de um usuário do IAM, não há credenciais que você possa usar. Nesse caso, você deve assumir o perfil do IAM que criou o cluster para fornecer acesso a designated_user. Se o criador do cluster não for um perfil do IAM, você não precisará concluir as etapas a seguir.

Observação: nas etapas a seguir, assume_role_user é o usuário que assume o perfil cluster_creator. O usuário que atualmente não tem acesso ao cluster, mas precisa de acesso, é designated_user.

Para assumir o perfil do IAM e editar o aws-auth ConfigMap no cluster para que você possa fornecer acesso a designated_user, conclua as seguintes etapas:

1.    Mostre 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 o seguinte erro: “erro: Você deve estar conectado ao servidor (Não autorizado).” Esse erro significa que assume_role_user não tem autorização para configurar o cluster do Amazon EKS.

3.    Permita que assume_role_user assuma o perfil de 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.

Por exemplo:

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

A AWS CLI agora 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. Veja o exemplo do arquivo aws-auth.yaml em Habilitar o acesso de usuários e perfis do IAM ao seu cluster.

7.    Adicione designated_user à seção mapUsers do arquivo aws-auth.yaml na etapa 6 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.    Desmarque a definição das seguintes variáveis de ambiente:

unset AWS_ACCESS_KEY_ID
unset AWS_SESSION_TOKEN
unset AWS_SECRET_ACCESS_KEY

10.    Mostre os detalhes do usuário do IAM de designated_user:

aws sts get-caller-identity

11.    Confirme se designated_user tem acesso ao cluster:

kubectl get pods

Se tudo estiver configurado corretamente, você não receberá uma mensagem de erro Não autorizado. A saída lista todos os pods que estão sendo executados no namespace padrão. Se a saída mostrar que nenhum recurso foi encontrado, significa que nenhum pod está sendo executado no namespace padrão.

Observação: se você usa eksctl, considere a resolução em Gerenciar usuários e perfis do IAM, no site da Weaveworks.


Informações relacionadas

Usar um perfil do IAM na AWS CLI

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos