Devido a uma alteração de usuário com autenticação única (SSO) ou à exclusão ou violação do aws-auth ConfigMap, não consigo acessar meu Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Se você perder o acesso ao seu cluster do EKS, verá um erro semelhante ao seguinte ao executar os comandos kubectl:
“error: You must be logged in to the server (Unauthorized).”
Para recuperar o acesso ao seu cluster, use entradas de acesso para gerenciar as permissões das entidades principais do AWS Identity and Access Management (AWS IAM). Você faz isso de fora do seu cluster Amazon EKS.
Observação: se o criador do cluster do EKS existir, suponha que a entidade principal do IAM do criador do cluster EKS faça login e acesse o cluster. Por padrão, o criador do cluster do EKS é o administrador do cluster. O processo a seguir cria uma função de administrador que coexiste com o perfil original do IAM do criador do cluster.
Resolução
Pré-requisitos:
- Instale o kubectl.
- Instale e configure a versão mais recente da AWS Command Line Interface (AWS CLI).
- Você tem um perfil do IAM com as seguintes permissões: CreateAccessEntry, ListAccessEntries, DescribeAccessEntry, DeleteAccessEntry e UpdateAccessEntry.
Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Usar a API de entrada de acesso aws eks para gerenciar o acesso ao cluster do Amazon EKS
Observação: nos comandos a seguir, substitua o seguinte:
Substitua <ACCOUNT_ID> pelo ID da conta de origem em que o cluster do EKS existe.
Substitua <REGION> pelo nome da região da AWS.
Substitua <CLUSTER_NAME> pelo nome do cluster do EKS.
Substitua <IAM_PRINCIPAL_ARN> pelo ARN do perfil ao qual você deseja ter direitos de administrador.
Para usar uma API de entrada de acesso aws eks para gerenciar o acesso ao cluster do Amazon EKS, conclua as seguintes etapas:
-
Na máquina host que tem o kubectl instalado, assuma o perfil do IAM com as seguintes permissões:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:ListAccessEntries",
"eks:CreateAccessEntry",
"eks:DescribeCluster",
"eks:UpdateClusterConfig"
],
"Resource": [
"arn:aws:eks:<REGION>:<ACCOUNT_ID>:cluster/<CLUSTER_NAME>"
]
},
{
"Effect": "Allow",
"Action": [
"eks:DeleteAccessEntry",
"eks:ListAssociatedAccessPolicies",
"eks:DisassociateAccessPolicy",
"eks:AssociateAccessPolicy",
"eks:UpdateAccessEntry",
"eks:DescribeAccessEntry"
],
"Resource": [
"arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/*"
]
}
]
}
-
Para confirmar sua identidade, execute o seguinte comando:
aws sts get-caller-identity
Na saída do comando, anote o ARN. É semelhante ao exemplo a seguir: arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin
-
Execute o comando a seguir para validar o modo de autenticação atual do cluster do Amazon EKS:
aws eks describe-cluster --name <CLUSTER_NAME> --query 'cluster.accessConfig.authenticationMode' --region <REGION>
Se o modo de autenticação atual do cluster do Amazon EKS for API_AND_CONFIG_MAP, o cluster já tem o modo de acesso necessário. Vá para a etapa 5.
-
Execute o comando a seguir para atualizar o modo de autenticação do cluster do Amazon EKS:
aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>
Observação: é possível alternar do modo de autenticação CONFIG_MAP para o modo API, mas não voltar do modo API para o modo CONFIG_MAP.
-
Execute o comando a seguir para criar uma entrada de acesso para seu cluster e o perfil do IAM:
aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>
A saída é semelhante ao seguinte:
{
"accessEntry": {
"clusterName": "<CLUSTER_NAME>",
"principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
"kubernetesGroups": [],
"accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/user/<ACCOUNT_ID>/new-cluster-admin/26c6d1f8-4211-3fe0-f9d2-734b912dcd9a",
"createdAt": "2024-02-13T19:27:45.370000+00:00",
"modifiedAt": "2024-02-13T19:27:45.370000+00:00",
"tags": {},
"username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
"type": "STANDARD"
}
}
-
Execute o comando a seguir para associar o AmazonEKSClusterAdminPolicy ao cluster do Amazon EKS e ao perfil do IAM:
aws eks associate-access-policy --cluster-name <CLUSTER_NAME> \
--principal-arn <IAM_PRINCIPAL_ARN> \
--policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
--access-scope type=cluster \
--region <REGION>
A saída é semelhante ao seguinte:
{
"accessEntry": {
"clusterName": "<CLUSTER_NAME>",
"principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
"kubernetesGroups": [],
"accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<cluster_name>/user/<ACCOUNT_ID>/new-cluster-admin/7ec6efb3-31c8-edcf-3039-ca2b38e0d708",
"createdAt": "2024-02-25T08:34:06.002000+00:00",
"modifiedAt": "2024-02-25T08:34:06.002000+00:00",
"tags": {},
"username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin",
"type": "STANDARD"
}
}
-
Para atualizar ou gerar o arquivo kubeconfig, execute o seguinte comando para se conectar ao cluster do EKS:
aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
-
Execute o comando a seguir para verificar se o usuário pode acessar o cluster do EKS como administrador:
kubectl auth can-i '*' '*' --all-namespaces
Observação: se for possível acessar o cluster do EKS como administrador, a saída exibirá yes.
Informações relacionadas
Uma análise aprofundada dos controles simplificados de gerenciamento de acesso do Amazon EKS
Como resolvo o erro "You must be logged in to the server (Unauthorized)” (Você deve estar conectado ao servidor [não autorizado]) quando me conecto ao servidor de APIs do Amazon EKS?
Entradas de acesso do EKS no site eksctl