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

Perfis do IAM para contas de serviço

Aplicações em uma conta de serviço Pod’s containers can use an AWS SDK or the AWS CLI to make API requests to AWS services using AWS Identity and Access Management (IAM) permissions. Applications must sign their AWS API requests with AWS credentials. IAM roles for service accounts provide the ability to manage credentials for your applications, similar to the way that Amazon EC2 instance profiles provide credentials to Amazon EC2 instances. Instead of creating and distributing your AWS credentials to the containers or using the Amazon EC2 instance’s role, you associate an IAM role with a [.noloc]`Kubernetes e configure seu Pods para usar a conta de serviço. Não é possível usar perfis IAM para contas de serviço com clusters locais Crie clusters locais do Amazon EKS em AWS Outposts para alta disponibilidadepara o Amazon EKS em 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 Pod’s também têm as permissões atribuídas ao perfil do IAM do nó do Perfil do IAM em nós do Amazon EKSAmazon EKS, a menos que você bloqueie o acesso do Pod ao Serviço de metadados de 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 log de acesso e de eventos está disponível no AWS CloudTrail para ajudar a garantir a auditoria retrospectiva.

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

  1. Criar um provedor OIDC do IAM para o clusterCrie um provedor IAM OIDC para o seu cluster - Você só deve concluir esse procedimento uma vez para cada cluster.

    nota

    Se você habilitou o endpoint da VPC do EKS, o endpoint de serviço de OIDC do EKS 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 cant find oidc.eks.region.amazonaws.com: NXDOMAIN

Para concluir essa etapa, você pode executar o comando fora da VPC, por exemplo, no AWS CloudShell ou em um computador conectado à Internet. Como alternativa, você pode criar um resolvedor condicional de horizonte segmentado na VPC, como o Route 53 Resolver, para usar um resolvedor diferente para o URL do emissor do OIDC e não usar o DNS da VPC para ela. Para ver um exemplo de encaminhamento condicional em CoreDNS, consulte a Solicitação de recurso do Amazon EKS no GitHub. Atribuir perfis do IAM às contas de serviço do KubernetesAtribuir perfis de IAM a contas de serviço do Kubernetes - Conclua este procedimento para cada conjunto exclusivo de permissões que você deseja que uma aplicação tenha. . Para configurar Pods para usar uma conta de serviço do KubernetesConfigurar pods para usar uma conta de serviço do Kubernetes: conclua este procedimento para cada Pod que precisa de acesso aos serviços da AWS. Usar o IRSA com o AWS SDKUse IRSA com o SDK AWS - Confirme que a workload usa um SDK AWS de uma versão compatível e que 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). Você pode passar esse token para a operação da API AWS STS AssumeRoleWithWebIdentity e receber credenciais de perfil temporária do IAM. Você pode usar essas credenciais para interagir com qualquer serviço do AWS, inclusive 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. Saiba como Obter as chaves de assinatura para validar os tokens OIDCBuscar chaves de assinatura para validar tokens OIDC.

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.