Opção 1: habilitar a Identidade de Pods do EKS no cluster do EKS
As associações de Identidade de Pods do Amazon EKS permitem gerenciar credenciais para suas aplicações de forma semelhante a como os perfis de instância do Amazon EC2 fornecem credenciais para instâncias do Amazon EC2. A Identidade de Pods do Amazon EKS fornece credenciais para suas workloads com uma API EKS Auth adicional e um pod de atendente executado em cada nó.
O Amazon EMR no EKS começa a oferecer suporte à identidade de pods do EKS desde o lançamento do emr-7.3.0 para o modelo de envio StartJobRun.
Para obter mais informações sobre identidades de pods do EKS, consulte Como funciona a Identidade de Pods do EKS.
Por que trabalhar com Identidades de pods do EKS?
Como parte da configuração do EMR, o perfil de execução de tarefas precisa estabelecer limites de confiança entre o perfil do IAM e contas de serviço em um namespace específico (de clusters virtuais do EMR). Com o IRSA, isso foi alcançado através da atualização da política de confiança do Perfil de execução de trabalho do EMR. No entanto, devido ao limite rígido de 4096 caracteres no comprimento da política de confiança do IAM, havia uma restrição para compartilhar um único perfil do IAM de execução de trabalho em um máximo de doze (12) clusters do EKS.
Com o suporte do EMR para identidades de pods, o limite de confiança entre perfis do IAM e contas de serviço agora está sendo gerenciado pela equipe do EKS por meio das APIs de associação de perfis de pods do EKS.
nota
A fronteira de segurança para identidade de pods do EKS ainda está no nível da conta de serviço, e não no nível do pod.
Considerações sobre Identidade de Pods
Para obter informações sobre as Limitações de identidade de pods, consulte Considerações sobre Identidade de pods do EKS.
Preparar a identidade de pods do EKS no cluster do EKS
Verifique se a permissão necessária existe em NodeInstanceRole
O perfil de nó NodeInstanceRole precisa de permissão o agente realizar a ação AssumeRoleForPodIdentity na API de autenticação do EKS. Você pode adicionar o seguinte a AmazonEKSWorkerNodePolicy, definida no Guia do usuário do Amazon EKS, ou usar uma política personalizada.
Se o seu cluster do EKS tiver sido criado com uma versão eksctl superior a 0.181.0, AmazonEKSWorkerNodePolicy, incluindo a permissão AssumeRoleForPodIdentity necessária, será anexada automaticamente ao perfil de nó. Se a permissão não estiver presente, adicione manualmente a seguinte permissão a AmazonEKSWorkerNodePolicy, que permite assumir um perfil para a identidade de pods. Essa permissão é necessária pelo agente de identidade de pods do EKS para recuperar credenciais para pods.
Criar complemento do agente de identidade do pod do EKS
Use o comando a seguir para criar o complemento Agente de identidade de pods do EKS com a versão mais recente:
aws eks create-addon --cluster-name cluster-name --addon-name eks-pod-identity-agent kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
Use as etapas a seguir para criar o complemento Agente de identidade de pods do EKS no console do Amazon EKS:
Abra o console do Amazon EKS: Console do Amazon EKS
. No painel de navegação esquerdo, selecione Clusters e depois o nome do cluster para o qual você deseja configurar o complemento do atendente de Identidade de Pods do EKS.
Escolha a guia Add-ons (Complementos).
Escolha Obter mais complementos.
Selecione a caixa no canto superior direito da caixa do complemento do atentente de Identidade de Pods do EKS e escolha Editar.
Na página Configurar complementos selecionados, selecione qualquer versão na lista suspensa Versão.
(Opcional) Expanda Configurações opcionais para inserir configurações adicionais. Por exemplo, é possível indicar um local alternativo para a imagem do contêiner e
ImagePullSecrets. O esquema JSON com chaves aceitas é mostrado no Esquema de configuração do complemento.Insira as chaves e os valores de configuração em Valores de configuração.
Escolha Próximo.
Confirme se os pods do agente estão em execução no seu cluster por meio da CLI.
kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
Veja a seguir um exemplo de saída:
NAME READY STATUS RESTARTS AGE eks-pod-identity-agent-gmqp7 1/1 Running 1 (24h ago) 24h eks-pod-identity-agent-prnsh 1/1 Running 1 (24h ago) 24h
Isso configura um novo DaemonSet no namespace kube-system. O Agente de identidade de pods do Amazon EKS, executado em cada nó EKS, usa a ação AssumeRoleForPodIdentity para recuperar credenciais temporárias da API de autenticação do EKS. Essas credenciais são então disponibilizadas para os AWS SDKs que você executa dentro dos seus contêineres.
Para obter mais informações, verifique o pré-requisito no documento público: Configurar o Agente de identidade de pods do EKS.
Criar um perfil de execução de trabalho
Criar ou atualizar o perfil de execução de trabalhos que permite a Identidade de Pods do EKS
Para executar workloads no Amazon EMR no EKS, você precisa criar um perfil do IAM. Referimo-nos a esse perfil como perfil de execução de trabalho nesta documentação. Para obter mais informações sobre como criar o perfil do IAM, consulte Criação de perfis do IAM no Guia do usuário.
Além disso, você deve criar uma política do IAM que especifique as permissões necessárias para o perfil de execução de trabalho e, em seguida, anexar essa política ao perfil para habilitar a Identidade de Pods do EKS.
Por exemplo, você tem o seguinte perfil de execução de trabalho. Para obter mais informações, consulte Criar um perfil de execução de trabalho.
arn:aws:iam::111122223333:role/PodIdentityJobExecutionRole
Importante
O Amazon EMR no EKS cria contas de serviço do Kubernetes automaticamente, com base no nome do perfil de execução do trabalho. Certifique-se de que o nome do perfil não seja muito longo, pois seu trabalho poderá falhar se a combinação de cluster_name, pod_name, service_account_name e exceder o limite de comprimento.
Configuração do perfil de execução de trabalho: certifique-se de que o perfil de execução de trabalho seja criado com a permissão de confiança abaixo para a Identidade de Pods do EKS. Para atualizar um perfil de execução de trabalho existente, configure-o para confiar na seguinte entidade principal de serviço do EKS como uma permissão adicional na política de confiança. Essa permissão de confiança pode coexistir com as políticas de confiança do IRSA existentes.
cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } EOF
Permissão do usuário: os usuários necessitam da permissão iam:PassRole para executar chamadas de API StartJobRun ou enviar trabalhos. Essa permissão permite que os usuários passem o perfil de execução de trabalho ao EMR no EKS. Os administradores de trabalhos devem ter a permissão por padrão.
Abaixo está a permissão necessária para um usuário:
{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::111122223333:role/PodIdentityJobExecutionRole", "Condition": { "StringEquals": { "iam:PassedToService": "pods.eks.amazonaws.com" } } }
Para restringir ainda mais o acesso do usuário a clusters do EKS específicos, adicione o filtro de atributo AssociatedResourceArn à política do IAM. Limita a atribuição de perfis a clusters do EKS autorizados, reforçando os controles de segurança no nível dos recursos.
"Condition": { "ArnLike": { "iam:AssociatedResourceARN": [ "arn:aws:eks:us-west-2:111122223333:cluster/*" ] }
Configurar associações de identidade de pods do EKS
Pré-requisito
Certifique-se de que a identidade do IAM que cria a associação de identidade de pods, como um usuário administrador do EKS, tenha a permissão eks:CreatePodIdentityAssociation e iam:PassRole.
Criar associações para o perfil e a conta de serviço do EMR
Depois de concluir todas as etapas necessárias para a Identidade de Pods do EKS, você pode pular as etapas a seguir para a configuração do IRSA:
É possível avançar diretamente para a etapa seguinte: Conceder aos usuários acesso ao Amazon EMR no EKS
Excluir associações de perfil
Sempre que você excluir um cluster virtual ou um perfil de execução de trabalho e não quiser mais conceder acesso ao EMR às suas contas de serviço, você deverá excluir as associações do perfil. Isso ocorre porque o EKS permite associações com recursos inexistentes (namespace e conta de serviço). O Amazon EMR no EKS recomenda excluir as associações se o namespace for excluído ou se o perfil não estiver mais em uso, para liberar espaço para outras associações.
nota
As associações persistentes podem afetar sua capacidade de escalar se você não as excluir, pois o EKS tem limitações no número de associações que você pode criar (limite flexível: 1000 associações por cluster). Você pode listar as associações de identidades de pods em um determinado namespace para verificar se há alguma associação remanescente que precisa ser limpa:
aws eks list-pod-identity-associations --cluster-name mycluster --namespace mynamespace
Com o AWS CLI (versão 2.24.0 ou superior), execute o seguinte comando emr-containers para excluir associações de perfil do EMR:
aws emr-containers delete-role-associations \ --cluster-name mycluster \ --namespace mynamespace \ --role-name JobExecutionRoleIRSAv2
Migrar automaticamente o IRSA existente para a Identidade de Pods
Você pode usar a ferramenta eksctl para migrar perfis do IAM existentes para contas de serviço (IRSA) para associações de identidade de pods:
eksctl utils migrate-to-pod-identity \ --cluster mycluster \ --remove-oidc-provider-trust-relationship \ --approve
A execução do comando sem o sinalizador --approve produzirá apenas um plano que reflete as etapas da migração, e nenhuma migração real ocorrerá.
Solução de problemas
Meu trabalho falhou com a exceção NoClassDefinitionFound ou ClassNotFound para o provedor de credenciais, ou falhou ao obter o provedor de credenciais.
A Identidade de Pods do EKS usa o Provedor de credenciais de contêiner para recuperar as credenciais necessárias. Se você especificou um provedor de credenciais personalizado, verifique se ele está funcionando corretamente. Como alternativa, certifique-se de estar usando uma versão correta do AWS SDK que suporte a Identidade de Pods do EKS. Para obter mais informações, consulte Conceitos básicos do Amazon EKS.
O trabalho falhou com o erro “Falha ao recuperar credenciais devido ao limite de tamanho [x]” exibido no log eks-pod-identity-agent.
O EMR no EKS cria contas de serviço do Kubernetes com base no nome do perfil de execução do trabalho. Se o nome do perfil for muito longo, o EKS Auth não conseguirá recuperar as credenciais porque a combinação de cluster_name, pod_name e service_account_name excede o limite de comprimento. Identifique qual componente está ocupando mais espaço e ajuste o tamanho de acordo.
O trabalho falhou com o erro “Falha ao recuperar credenciais xxx” exibido no log Identidade de Pods do EKS.
Uma possível causa para esse problema pode ser que o cluster do EKS está configurado em sub-redes privadas sem a configuração correta do PrivateLink para o cluster. Verifique se seu cluster está em uma rede privada e configure o AWS PrivateLink para resolver o problema. Para obter instruções detalhadas, consulte Comece a usar o Amazon EKS.