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.
Conceda RBAC do Kubernetes adicional aos controladores gerenciados do Modo Automático do EKS
O Modo Automático do Amazon EKS gerencia os controladores a seguir em seu nome: balanceamento de carga, rede, computação, armazenamento em blocos e insights de cluster. Esses controladores são executados no ambiente de gerenciamento do EKS. Eles se autenticam no seu cluster como a função AWSServiceRoleForAmazonEKS vinculada ao serviço, e suas permissões no cluster vêm das políticas de acesso gerenciado da AWS anexadas a essa entrada de acesso.
Você mesmo pode estender o RBAC do Kubernetes de um controlador gerenciado. Isso é útil quando a política gerenciada ainda não concede a permissão necessária, por exemplo, get em um Secret específico.
Nos clusters do Modo Automático do Amazon EKS, a entrada de acesso criada automaticamente para AWSServiceRoleForAmazonEKS também declara o grupo do Kubernetes eks:managed. O RBAC do Kubernetes é aditivo. Um RoleBinding (ou ClusterRoleBinding) cujo nome de subjects: o grupo eks:managed concede aos controladores gerenciados permissões extras além das políticas de acesso gerenciado.
Como funciona
-
Os controladores gerenciados do Modo Automático do EKS se conectam ao seu cluster como a função vinculada ao serviço
AWSServiceRoleForAmazonEKS. -
A entrada de acesso criada automaticamente para essa função declara
kubernetesGroups: ["eks:managed"]. -
Você cria um
Role(com namespace) ouClusterRole(em todo o cluster) que descreve a permissão adicional, e umRoleBinding/ClusterRoleBindingcujossubjects:atribuem nome ao grupoeks:managed. -
O RBAC do Kubernetes combina sua vinculação com as políticas de acesso gerenciado, para que os controladores gerenciados recebam os dois conjuntos de permissões.
Para confirmar se o grupo está presente, execute:
CLUSTER=<your-cluster> REGION=<your-region> ACCT=$(aws sts get-caller-identity --query Account --output text) aws eks describe-access-entry \ --cluster-name "$CLUSTER" --region "$REGION" \ --principal-arn "arn:aws:iam::${ACCT}:role/aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS" \ --query 'accessEntry.kubernetesGroups'
Saída esperada:
[ "eks:managed" ]
Defina o escopo da concessão de forma restrita
O grupo eks:managed se aplica a todos os controladores gerenciados do Modo Automático do EKS. Defina o escopo da concessão extra de forma tão restrita quanto seu caso de uso permitir, para que você exponha exatamente o que um controlador gerenciado precisa:
-
Prefira
Role+RoleBinding(com namespace) em vez deClusterRole+ClusterRoleBinding(em todo o cluster). -
Restrinja
resources,resourceNameseverbsao menor conjunto que desbloqueie seu caso de uso. Por exemplo, concedagetem um únicoSecretnomeado em vez delist, watchem todos os objetosSecret. -
Exclua o
Rolee oRoleBindingquando eles não forem mais necessários.
Considerações sobre o Modo automático do Amazon EKS
-
Esse mecanismo estende apenas o RBAC do Kubernetes dos controladores gerenciados do Modo Automático do EKS. Isso não altera as permissões do AWS IAM concedidas pelas políticas de acesso gerenciado.
-
O grupo
eks:managedestá presente nos clusters do Modo Automático do EKS cuja função vinculada ao serviço éAWSServiceRoleForAmazonEKS. -
Uma vinculação a
eks:managedse aplica a todos os controladores gerenciados do Modo Automático do EKS. Para manter o raio de explosão prático pequeno, use objetosresourceNameseRolecom namespace. Isso expõe somente os recursos que você nomeia e somente por meio dos verbos que você concede. -
Esse é um padrão de ponte destinado aos casos em que uma política de acesso gerenciado ainda não cobre a permissão de que você precisa. Quando uma política gerenciada da AWS já cobre a permissão, use a política gerenciada em vez disso.
Exemplo
Para uma explicação passo a passo que concede ao controlador do balanceador de carga do Modo Automático do EKS get em um Secret OIDC nomeado, desbloqueando a anotação alb.ingress.kubernetes.io/auth-type: oidc em um ALB Ingress, consulte Conceda ao controlador do balanceador de carga do Modo Automático do EKS acesso a um segredo específico.