View a markdown version of this page

Conceda RBAC do Kubernetes adicional aos controladores gerenciados do Modo Automático do EKS - Amazon EKS

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) ou ClusterRole (em todo o cluster) que descreve a permissão adicional, e um RoleBinding/ClusterRoleBinding cujos subjects: atribuem nome ao grupo eks: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 de ClusterRole+ClusterRoleBinding (em todo o cluster).

  • Restrinja resources, resourceNames e verbs ao menor conjunto que desbloqueie seu caso de uso. Por exemplo, conceda get em um único Secret nomeado em vez de list, watch em todos os objetos Secret.

  • Exclua o Role e o RoleBinding quando 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:managed está presente nos clusters do Modo Automático do EKS cuja função vinculada ao serviço é AWSServiceRoleForAmazonEKS.

  • Uma vinculação a eks:managed se aplica a todos os controladores gerenciados do Modo Automático do EKS. Para manter o raio de explosão prático pequeno, use objetos resourceNames e Role com 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.