Ajudar a melhorar esta página
Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.
Conceder aos usuários do IAM acesso ao Kubernetes com um ConfigMap
Importante
O aws-auth ConfigMap está obsoleto. Para conhecer o método recomendado para gerenciar o acesso a APIs do Kubernetes, consulte Conceder aos usuários do IAM acesso ao Kubernetes com entradas de acesso ao EKS.
O acesso ao seu cluster usando entidades principais do IAM é ativado pelo AWS IAM Authenticator for KubernetesConfigMap aws-auth. Para todas as configurações do ConfigMap aws-auth, consulte Formato de configuração completo
Adicione um usuário do IAM ao cluster do Amazon EKS
Quando você cria um cluster do Amazon EKS, a entidade principal do IAM que cria o cluster, recebe automaticamente permissões system:masters na configuração de controle de acesso baseado em perfil (RBAC) no ambiente de gerenciamento do Amazon EKS. Como essa entidade principal não é exibida em nenhuma configuração visível, mantenha o controle de qual entidade principal criou o cluster originalmente. Para conceder a outras entidades principais do IAM a capacidade de interagir com o cluster, edite o aws-auth ConfigMap no Kubernetes e crie um rolebinding ou clusterrolebinding do Kubernetes com o nome de um group especificado no aws-auth ConfigMap.
nota
Para obter mais informações sobre a configuração de controle de acesso baseado em perfil (RBAC) do Kubernetes, consulte Using RBAC Authorization
-
Determine quais credenciais o
kubectlestá usando para acessar o cluster. Em seu computador, você pode ver quais credenciais okubectlusa com o comando a seguir. Substitua~/.kube/configpelo caminho do arquivokubeconfigse você não usar o caminho padrão.cat ~/.kube/configVeja um exemplo de saída abaixo.
[...] contexts: - context: cluster: my-cluster.region-code.eksctl.io user: admin@my-cluster.region-code.eksctl.io name: admin@my-cluster.region-code.eksctl.io current-context: admin@my-cluster.region-code.eksctl.io [...]No exemplo de saída anterior, as credenciais de um usuário chamado
adminsão configuradas para um cluster chamadomy-cluster. Se for o usuário que criou o cluster, ele já terá acesso ao cluster. Se não for o usuário que criou o cluster, será necessário concluir as etapas restantes para habilitar o acesso ao cluster para os outras entidades principais do IAM. As melhores práticas do IAM recomendam que você conceda permissões para perfis e não para usuários. É possível ver quais outras entidades principais atualmente têm acesso ao cluster com o seguinte comando:kubectl describe -n kube-system configmap/aws-authVeja um exemplo de saída abaixo.
Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-node-role username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>
O exemplo anterior é um
aws-authConfigMappadrão. Apenas a função de instância de nó tem acesso ao cluster. -
Verifique se você já tem
roleserolebindingsouclusterroleseclusterrolebindingsdo Kubernetes para os quais é possível mapear as entidades principais do IAM. Para saber mais sobre esses recursos, consulte Usar a autorização de RBAC, na documentação do Kubernetes. -
Visualize suas
rolesouclusterrolesexistentes do Kubernetes.Rolestêm o escopo definido para umnamespace, masclusterrolestêm o escopo definido para o cluster.kubectl get roles -Akubectl get clusterroles -
Visualize os detalhes de qualquer
roleouclusterroleretornada no resultado anterior e confirme que ela tem as permissões (rules) que você quer que as entidades principais do IAM tenham no cluster.Substitua
role-namepor um nome deroleretornado na saída do comando anterior. Substituakube-systempelo namespace darole.kubectl describe role role-name -n kube-systemSubstitua
cluster-role-namepor um nome declusterroleretornado na saída do comando anterior.kubectl describe clusterrole cluster-role-name -
Visualize suas
rolebindingsouclusterrolebindingsexistentes do Kubernetes.Rolebindingstêm o escopo definido para umnamespace, masclusterrolebindingstêm o escopo definido para o cluster.kubectl get rolebindings -Akubectl get clusterrolebindings -
Visualize os detalhes de qualquer
rolebindingouclusterrolebindinge confirme que ele tem umaroleouclusterroleda etapa anterior listada comoroleRefe um nome de grupo listado parasubjects.Substitua
role-binding-namepor um nome derolebindingretornado na saída do comando anterior. Substituakube-systempelonamespacedarolebinding.kubectl describe rolebinding role-binding-name -n kube-systemVeja um exemplo de saída abaixo.
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-console-dashboard-restricted-access-role-binding namespace: default subjects: - kind: Group name: eks-console-dashboard-restricted-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-console-dashboard-restricted-access-role apiGroup: rbac.authorization.k8s.ioSubstitua
cluster-role-binding-namepor um nome declusterrolebindingretornado na saída do comando anterior.kubectl describe clusterrolebinding cluster-role-binding-nameVeja um exemplo de saída abaixo.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-console-dashboard-full-access-binding subjects: - kind: Group name: eks-console-dashboard-full-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-console-dashboard-full-access-clusterrole apiGroup: rbac.authorization.k8s.io
-
-
Edite o
ConfigMapaws-auth. É possível usar uma ferramenta como oeksctlpara atualizar oConfigMap, ou você pode atualizá-lo manualmente via edição.Importante
Convém usar
eksctlou outra ferramenta para editar oConfigMap. Para obter informações sobre outras ferramentas que você pode usar, consulte Usar ferramentas para fazer alterações no aws-authConfigMapnos guias de práticas recomendadas do Amazon EKS. Um aws-authConfigMapformatado incorretamente pode fazer com que você perca o acesso ao cluster.-
Veja as etapas para editar o configmap com eksctl.
-
Veja as etapas para editar o configmap manualmente.
-
Editar o configmap com eksctl
-
Você precisa da versão
0.212.0ou posterior da ferramenta de linha de comando daeksctlinstalada no seu dispositivo ou AWS CloudShell. Para instalar ou atualizar oeksctl, consulte Instalaçãona documentação do eksctl. -
Visualize os mapeamentos atuais no
ConfigMap. Substituamy-clusterpelo nome do cluster. Substituaregion-codepela região da AWS em que seu cluster se encontra.eksctl get iamidentitymapping --cluster my-cluster --region=region-codeVeja um exemplo de saída abaixo.
ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes -
Adicione um mapeamento referente a uma função. Substitua
my-rolepelo nome da sua função. Substituaeks-console-dashboard-full-access-grouppelo nome do grupo especificado no objetoRoleBindingouClusterRoleBindingdo Kubernetes. Substitua111122223333pelo ID da sua conta. Você pode substituiradminpor qualquer nome que escolher.eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws:iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \ --no-duplicate-arnsImportante
O ARN da função não pode incluir um caminho, como
role/my-team/developers/my-role. O formato do ARN deve serarn:aws:iam::. Neste exemplo,111122223333:role/my-rolemy-team/developers/precisa ser removido.Veja um exemplo de saída abaixo.
[...] 2022-05-09 14:51:20 [ℹ] adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap -
Adicione um mapeamento referente a um usuário. As melhores práticas do IAM recomendam que você conceda permissões para perfis e não para usuários. Substitua
my-userpelo seu nome de usuário. Substituaeks-console-dashboard-restricted-access-grouppelo nome do grupo especificado naRoleBindingouClusterRoleBindingdo Kubernetes. Substitua111122223333pelo ID da sua conta. Você pode substituirmy-userpor qualquer nome que escolher.eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws:iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \ --no-duplicate-arnsVeja um exemplo de saída abaixo.
[...] 2022-05-09 14:53:48 [ℹ] adding identity "arn:aws:iam::111122223333:user/my-user" to auth ConfigMap -
Visualize os mapeamentos no
ConfigMapnovamente.eksctl get iamidentitymapping --cluster my-cluster --region=region-codeVeja um exemplo de saída abaixo.
ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws:iam::111122223333:role/admin my-role eks-console-dashboard-full-access-group arn:aws:iam::111122223333:user/my-user my-user eks-console-dashboard-restricted-access-group
Editar o configmap manualmente
-
Abra o
ConfigMappara edição.kubectl edit -n kube-system configmap/aws-authnota
Se você receber um erro informando "
Error from server (NotFound): configmaps "aws-auth" not found", use o procedimento em Aplicar o ConfigMap aws-auth ao seu cluster para aplicar o estoqueConfigMap. -
Adicione as entidades principais do IAM ao
ConfigMap. Um grupo do IAM não é uma entidade principal do IAM, portanto, não pode ser adicionado aoConfigMap.-
Para adicionar uma função do IAM (por exemplo, para usuários federados): adicione os detalhes da função à seção
mapRolesdoConfigMapemdata. Adicione essa seção se ela ainda não existir no arquivo. Cada entrada oferece suporte aos seguintes parâmetros:-
rolearn: o ARN da função do IAM a ser adicionada. Esse valor não pode incluir um caminho. Por exemplo, não é possível especificar um ARN como
arn:aws:iam::. O ARN precisa ser111122223333:role/my-team/developers/role-namearn:aws:iam::.111122223333:role/role-name -
username: o nome do usuário no Kubernetes a ser mapeado para a função do IAM.
-
groups: o grupo ou a lista de grupos do Kubernetes para o qual mapear a função. O grupo pode ser padrão ou um grupo especificado em um
clusterrolebindingourolebinding. Para obter mais informações, consulte Default roles and role bindingsna documentação do Kubernetes.
-
-
Para adicionar um usuário do IAM: as melhores práticas do IAM recomendam que você conceda permissões para perfis e não para usuários. Adicione os detalhes do usuário à seção
mapUsersdoConfigMapemdata. Adicione essa seção se ela ainda não existir no arquivo. Cada entrada oferece suporte aos seguintes parâmetros:-
userarn: o ARN do usuário do IAM a ser adicionado.
-
username: o nome do usuário no Kubernetes a ser mapeado para o usuário do IAM.
-
groups: o grupo, ou a lista de grupos, do Kubernetes para o qual mapear o usuário. O grupo pode ser padrão ou um grupo especificado em um
clusterrolebindingourolebinding. Para obter mais informações, consulte Default roles and role bindingsna documentação do Kubernetes.
-
-
-
Por exemplo, o seguinte bloco YAML contém:
-
Uma seção
mapRolesque mapeia a instância do nó do IAM para grupos do Kubernetes, para que os nós possam se registrar no cluster e o perfil do IAMmy-console-viewer-roleque é mapeado para um grupo do Kubernetes que pode visualizar todos os recursos do Kubernetes para todos os clusters. Para acessar uma lista das permissões de grupos do IAM e do Kubernetes necessárias para o perfil do IAMmy-console-viewer-role, consulte Permissões obrigatórias. -
Uma seção
mapUsersque mapeia o usuário do IAMadminda conta da AWS padrão para o grupo do Kubernetessystem:masterse o usuáriomy-userde uma conta da AWS diferente mapeada para um grupo do Kubernetes que pode visualizar recursos do Kubernetes de um namespace específico. Para acessar uma lista das permissões de grupos do IAM e do Kubernetes necessárias para o usuário do IAMmy-user, consulte Permissões obrigatórias.Adicione ou remova linhas conforme necessário e substitua todos os
valores de exemplopor seus próprios valores.# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/my-role username: system:node:{{EC2PrivateDNSName}} - groups: - eks-console-dashboard-full-access-group rolearn: arn:aws:iam::111122223333:role/my-console-viewer-role username: my-console-viewer-role mapUsers: | - groups: - system:masters userarn: arn:aws:iam::111122223333:user/admin username: admin - groups: - eks-console-dashboard-restricted-access-group userarn: arn:aws:iam::444455556666:user/my-user username: my-user
-
-
Salve o arquivo e saia do seu editor de texto.
Como aplicar o ConfigMapaws-auth ao seu cluster
O ConfigMap aws-auth é criado e aplicado automaticamente ao cluster ao criar um grupo de nós gerenciados ou ao criar um grupo de nós usando eksctl. Ele é criado inicialmente para permitir que os nós ingressem no cluster, mas você também pode usar esse ConfigMap para adicionar acesso com controle de acesso baseado em função (RBAC) às entidades principais do IAM. Se já tiver iniciado os nós autogerenciados, mas ainda não tiver aplicado o ConfigMap aws-auth ao seu cluster, você poderá fazer isso usando o procedimento a seguir.
-
Verifique se você já aplicou o
ConfigMapaws-auth.kubectl describe configmap -n kube-system aws-authSe você receber um erro informando "
Error from server (NotFound): configmaps "aws-auth" not found", prossiga com as etapas a seguir para aplicar o estoqueConfigMap. -
Faça download, edite e aplique o mapa de configuração do autenticador da AWS.
-
Faça download do mapa de configuração.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml -
No arquivo
aws-auth-cm.yaml, defina orolearncomo o nome de recurso da Amazon (ARN) da função do IAM associada aos seus nós. Você pode fazer isso com um editor de texto ou substituindomy-node-instance-rolee executando o seguinte comando:sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yamlNão modifique outras linhas do arquivo.
Importante
O ARN da função não pode incluir um caminho, como
role/my-team/developers/my-role. O formato do ARN deve serarn:aws:iam::. Neste exemplo,111122223333:role/my-rolemy-team/developers/precisa ser removido.Você pode inspecionar as saídas da pilha do AWS CloudFormation para seus grupos de nós e procurar os seguintes valores:
-
InstanceRoleARN: para grupos de nós que foram criados com
eksctl -
NodeInstanceRole - Para grupos de nós que foram criados com os modelos do Amazon EKS fornecidos pelo AWS CloudFormation no AWS Management Console
-
-
Aplique a configuração. Esse comando pode demorar alguns minutos para ser concluído.
kubectl apply -f aws-auth-cm.yamlnota
Se você receber qualquer erro de autorização ou de tipo de recurso, consulte Acesso negado ou não autorizado (kubectl) no tópico de solução de problemas.
-
-
Observe o status de seus nós e aguarde até que eles atinjam o status
Ready.kubectl get nodes --watchInsira
Ctrl+Cpara retornar a um prompt de shell.