Perfis do IAM para contas de serviço - Amazon EKS

Perfis do IAM para contas de serviço

Aplicações nos contêineres de um Pod podem usar um AWS SDK ou AWS CLI para fazer solicitações de API aos Serviços da AWS usando permissões do AWS Identity and Access Management (IAM). As aplicações devem assinar suas solicitações de API da AWS com as credenciais da AWS. As funções do IAM para contas de serviço fornecem a capacidade de gerenciar credenciais para suas aplicações, semelhante à maneira como os perfis de instância do Amazon EC2 fornecem credenciais para instâncias do Amazon EC2. Em vez de criar e distribuir suas credenciais da AWS aos contêineres ou de usar o perfil da instância do Amazon EC2, você pode associar um perfil do IAM a uma conta de serviço do Kubernetes e configurar os Pods para usar a conta de serviço. Não é possível usar perfis do IAM para contas de serviço com clusters locais do Amazon EKS no AWS Outposts.

Os perfis do IAM para contas de serviço oferecem as seguintes vantagens:

  • Menor privilégio: é possível definir o escopo de permissões do IAM para uma conta de serviço, e somente os Pods que usarem essa conta de serviço terão acesso a essas permissões. Esse recurso também elimina a necessidade de soluções de terceiros, como o kiam ou o kube2iam.

  • Isolamento de credenciais: um contêiner de Pod's só pode recuperar credenciais para o perfil do IAM que esteja associada à conta de serviço que o contêiner use. Um contêiner nunca tem acesso a credenciais usadas por outros contêineres em outros Pods. Ao usar perfis do IAM para contas de serviço, os contêineres de Pod's também têm as permissões atribuídas ao , a menos que você bloqueie o acesso do ao PodServiço de metadados da instância do Amazon EC2 (IMDS). Para obter mais informações, consulte Restringir o acesso ao perfil da instância atribuído ao nó de processamento.

  • Auditabilidade:: o acesso e os logs de eventos estão disponíveis por meio do AWS CloudTrail para ajudar a garantir a auditoria retrospectiva.

Habilite perfis do IAM para contas de serviço concluindo os seguintes procedimentos:

  1. Criação de um provedor OIDC do IAM para seu cluster: você só conclui este procedimento uma vez para cada cluster.

    nota

    Se você habilitar o endpoint da VPC EKS, o endpoint de serviço EKS OIDC não poderá ser acessado de dentro dessa VPC. Consequentemente, suas operações, como a criação de um provedor de OIDC eksctl dentro da VPC, não funcionarão e resultarão em um tempo limite ao tentar solicitar https://oidc.eks.region.amazonaws.com. Segue um exemplo de mensagem de erro:

    ** server can't find oidc.eks.region.amazonaws.com: NXDOMAIN

    Para concluir essa etapa, você pode executar o comando fora da VPC, por exemplo, em AWS CloudShell ou em um computador conectado à Internet.

  2. Configuração de uma conta de serviço do Kubernetes para assumir um perfil do IAM: conclua este procedimento para cada conjunto exclusivo de permissões que você deseja que uma aplicação tenha.

  3. Configurar Pods para usar uma conta de serviço do Kubernetes: conclua este procedimento para cada Pod que precisa acessar Serviços da AWS.

  4. Usar o AWS SDK compatível: confirme se a workload usa um AWS SDK de uma versão compatível e se a workload usa a cadeia de credenciais padrão.

Informações básicas do IAM, Kubernetes e OpenID Connect (OIDC)

Em 2014, o AWS Identity and Access Management adicionou suporte para identidades federadas usando o OpenID Connect (OIDC). Esse recurso permite que você autentique chamadas de API da AWS com provedores de identidade compatíveis e receba um token de Web JSON OIDC válido (JWT). É possível passar esse token para a operação da API AssumeRoleWithWebIdentity do AWS STS e receber credenciais temporárias da função do IAM. É possível usar essas credenciais para interagir com qualquer AWS service (Serviço da AWS), incluindo o Amazon S3 e o DynamoDB.

Cada token JWT é assinado por um par de chaves de assinatura. As chaves são servidas no provedor OIDC gerenciado pelo Amazon EKS e a chave privada é trocada a cada 7 dias. O Amazon EKS mantém as chaves públicas até a sua expiração. Se você conectar clientes OIDC externos, esteja ciente de que precisará atualizar as chaves de assinatura antes que a chave pública expire. Aprenda como Buscar chaves de assinatura.

O Kubernetes há muito tempo usa contas de serviço como seu próprio sistema de identidade interno. Os Pods podem se autenticar com o servidor de API do Kubernetes usando um token montado automaticamente (que não era OIDC JWT) que apenas o servidor de API do Kubernetes pode validar. Esses tokens de conta de serviço legados não expiram, e a rotação da chave de assinatura é um processo difícil. Na versão 1.12 do Kubernetes, foi adicionado suporte para um novo recurso ProjectedServiceAccountToken. Esse recurso é um token da Web JSON OIDC que também contém a identidade da conta de serviço e oferece suporte a um público configurável.

O Amazon EKS hospeda um endpoint público de descoberta de OIDC em cada cluster que contém as chaves de assinatura para os tokens de Web JSON ProjectedServiceAccountToken, de modo que sistemas externos, como o IAM, possam validar e aceitar os tokens de OIDC emitidos pelo Kubernetes.