Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Conceder aos usuários do IAM acesso ao Kubernetes com um ConfigMap
Importante
O ConfigMap aws-auth
está obsoleto. O método recomendado para gerenciar o acesso às APIs do Kubernetes é Entradas de acesso.
O acesso ao cluster usando as entidades do IAM é habilitado pelo AWS IAM Authenticator para KubernetesConfigMap
aws-auth
. Para todas as configurações do ConfigMap
do aws-auth
, consulte Full Configuration Format
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 em aws-auth ConfigMap
.
nota
Para obter mais informações sobre a configuração de controle de acesso baseado em função (RBAC) do Kubernetes, consulte Using RBAC Authorization
Para adicionar uma entidade principal do IAM ao cluster do Amazon EKS
-
Determine quais credenciais o
kubectl
está usando para acessar o cluster. Em seu computador, você pode ver quais credenciais okubectl
usa com o comando a seguir. Substitua
pelo caminho para o arquivo~/.kube/config
kubeconfig
, se você não usar o caminho padrão.cat
~/.kube/config
Veja um exemplo de saída abaixo.
[...] contexts: - context: cluster:
my-cluster.
user:region-code
.eksctl.ioadmin@my-cluster.
name:region-code
.eksctl.ioadmin@my-cluster.
current-context:region-code
.eksctl.ioadmin@my-cluster.
[...]region-code
.eksctl.ioNo exemplo de saída anterior, as credenciais de um usuário denominado
são configuradas para um cluster denominadoadmin
. 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:my-cluster
kubectl describe -n kube-system configmap/aws-auth
Veja 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-auth
ConfigMap
padrão. Apenas a função de instância de nó tem acesso ao cluster. -
Verifique se você tem as
roles
erolebindings
ouclusterroles
eclusterrolebindings
existentes do Kubernetes para as quais é possível mapear as entidades principais do IAM. Para saber mais sobre esses recursos, consulte Using RBAC Authorization(Usar autorização RBAC) na documentação do Kubernetes. -
Visualize as
roles
eclusterroles
existentes do Kubernetes. AsRoles
têm o escopo definido para umnamespace
, masclusterroles
têm o escopo definido para o cluster.kubectl get roles -A
kubectl get clusterroles
-
Visualize os detalhes de qualquer
role
ouclusterrole
retornada 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
por um nome derole-name
role
retornado na saída do comando anterior. Substitua
pelo namespace dakube-system
role
.kubectl describe role
role-name
-nkube-system
Substitua
por um nome decluster-role-name
clusterrole
retornado na saída do comando anterior.kubectl describe clusterrole
cluster-role-name
-
Visualize as
rolebindings
eclusterrolebindings
existentes do Kubernetes. AsRolebindings
têm o escopo definido para umnamespace
, masclusterrolebindings
têm o escopo definido para o cluster.kubectl get rolebindings -A
kubectl get clusterrolebindings
-
Visualize os detalhes de qualquer
rolebinding
ouclusterrolebinding
e confirme que ele tem umarole
ouclusterrole
da etapa anterior listada comoroleRef
e um nome de grupo listado parasubjects
.Substitua
por um nome derole-binding-name
rolebinding
retornado na saída do comando anterior. Substitua
pelokube-system
namespace
derolebinding
.kubectl describe rolebinding
role-binding-name
-nkube-system
Veja 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
por um nome decluster-role-binding-name
clusterrolebinding
retornado na saída do comando anterior.kubectl describe clusterrolebinding
cluster-role-binding-name
Veja 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
ConfigMap
aws-auth
. É possível usar uma ferramenta como oeksctl
para atualizar oConfigMap
, ou você pode atualizá-lo manualmente via edição.Importante
Convém usar
eksctl
ou outra ferramenta para editar oConfigMap
. Para saber mais sobre outras ferramentas que podem ser usadas, consulte Usar ferramentas para fazer alterações emaws-auth
ConfigMap
nos guias de práticas recomendadas do Amazon EKS. Um aws-auth
ConfigMap
formatado incorretamente pode fazer com que você perca o acesso ao cluster.
Como aplicar o ConfigMap
aws-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.
Para aplicar o ConfigMap
aws-auth
ao seu cluster
-
Verifique se você já aplicou o
ConfigMap
aws-auth
.kubectl describe configmap -n kube-system aws-auth
Se você receber um erro informando “
Error from server (NotFound): configmaps "aws-auth" not found
”, execute as etapas a seguir para aplicar oConfigMap
comum. -
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
, defina oaws-auth-cm.yaml
rolearn
como o nome de recurso da Amazon (ARN) da função do IAM associada aos seus nós. É possível fazer isso com um editor de texto ou substituindo
e executando o seguinte comando:my-node-instance-role
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-role
my-team/developers/
precisa ser removido.Você pode inspecionar as saídas de pilha do AWS CloudFormation para os grupos de nó 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 modelos do AWS CloudFormation do Amazon EKS fornecidos no AWS Management Console
-
-
Aplique a configuração. Esse comando pode demorar alguns minutos para ser concluído.
kubectl apply -f aws-auth-cm.yaml
nota
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 --watch
Insira
Ctrl
+C
para retornar a um prompt de shell.