Acessar Recursos da AWS usando os perfis do IAM de destino da Identidade de Pods 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.

Acessar Recursos da AWS usando os perfis do IAM de destino da Identidade de Pods do EKS

Ao executar aplicações no Amazon Elastic Kubernetes Service (Amazon EKS), talvez você precise acessar recursos da AWS que existem na mesma conta ou em diferentes contas da AWS. Este guia mostra como configurar o acesso entre essas contas usando a Identidade de Pods do EKS, que permite que seus pods do Kubernetes acessem outros recursos da AWS.

Pré-requisitos

Antes de começar, certifique-se de ter concluído as seguintes etapas:

Como funciona

A Identidade de Pods permite que as aplicações em seu cluster do EKS acessem recursos da AWS em várias contas por meio de um processo chamado encadeamento de perfis. Ao criar uma associação da Identidade de Pods, você pode fornecer dois perfis do IAM: um perfil da Identidade de Pods do EKS na mesma conta do cluster do EKS e um perfil do IAM de destino da conta que contém os recursos da AWS (como buckets do S3 ou tabelas do DynamoDB). O perfil da Identidade de Pods do EKS deve estar na conta do cluster do EKS devido aos requisitos do IAM PassRole, enquanto o perfil do IAM de destino pode estar em qualquer conta da AWS. O PassRole permite que uma entidade da AWS delegue a suposição de perfil a outro serviço. A Identidade de Pods do EKS usa o PassRole para conectar um perfil a uma conta de serviço do Kubernetes, exigindo que o perfil e a identidade que a transmitem estejam na mesma conta da AWS que o cluster do EKS. Quando o pod da aplicação precisa acessar os recursos da AWS, ele solicita as credenciais da Identidade de Pods. Em seguida, a Identidade de Pods executa automaticamente duas suposições de perfil em sequência: primeiro, assumindo o perfil da Identidade de Pods do EKS e, em seguida, usando essas credenciais para assumir o perfil do IAM de destino. Esse processo fornece ao seu pod credenciais temporárias que têm as permissões definidas no perfil de destino, permitindo acesso seguro aos recursos em outras contas da AWS.

Considerações sobre armazenamento em cache

Devido aos mecanismos de armazenamento em cache, as atualizações de um perfil do IAM em uma associação existente da Identidade de Pods podem não entrar em vigor imediatamente nos pods em execução no cluster do EKS. O agente da Identidade de Pods armazena em cache as credenciais do IAM com base na configuração da associação no momento em que as credenciais são obtidas. Se a associação incluir apenas um ARN do perfil da Identidade de Pods do EKS e nenhum perfil do IAM de destino, as credenciais em cache vão durar seis horas. Se a associação incluir o ARN do perfil da Identidade de Pods do EKS e um perfil do IAM de destino, as credenciais em cache vão durar 59 minutos. Modificar uma associação existente, como atualizar o ARN do perfil da Identidade de Pods do EKS ou adicionar um perfil do IAM de destino, não redefine o cache existente. Como resultado, o agente não reconhecerá as atualizações até que as credenciais em cache sejam atualizadas. Para aplicar as alterações antes, você pode recriar os pods existentes; caso contrário, você precisará esperar que o cache expire.

Etapa 1: criar e associar um perfil do IAM de destino

Nesta etapa, você estabelecerá uma cadeia de confiança segura criando e configurando um perfil do IAM de destino. Para fins de demonstração, criaremos um novo perfil do IAM de destino para estabelecer uma cadeia de confiança entre duas contas da AWS: o perfil da Identidade de Pods do EKS (por exemplo, eks-pod-identity-primary-role) na conta da AWS do cluster do EKS ganha permissão para assumir o perfil do IAM de destino (por exemplo, eks-pod-identity-aws-resources) em sua conta de destino, permitindo o acesso a recursos da AWS como buckets do Amazon S3.

Criar perfil do IAM de destino

  1. Abra o console do Amazon IAM.

  2. Na barra de navegação superior, verifique se você fez login na conta que contém os recursos da AWS (como buckets do S3 ou tabelas do DynamoDB) para o perfil do IAM de destino.

  3. No painel de navegação à esquerda, selecione Perfis.

  4. Escolha o botão Criar perfil e, em seguida, Conta da AWS em “Tipo de entidade confiável”.

  5. Escolha Outra conta da AWS, insira o número da sua conta da AWS (a conta em que seu perfil da Identidade de Pods do EKS existe) e escolha Avançar.

  6. Adicione as políticas de permissão que você gostaria de associar ao perfil (por exemplo, AmazonS3FullAccess) e escolha Avançar.

  7. Insira um nome de perfil, como MyCustomIAMTargetRole, e escolha Criar perfil.

Atualizar a política de confiança de um perfil do IAM de destino

  1. Depois de criar o perfil, você retornará à lista de Perfis. Encontre e selecione o novo perfil que você criou na etapa anterior (por exemplo, MyCustomIAMTargetRole).

  2. Selecione a guia Relações de confiança.

  3. Clique em Editar política de confiança no lado direito.

  4. No editor de políticas, substitua a política JSON padrão pela sua política de confiança. Substitua os valores do espaço reservado pelo nome do perfil e 111122223333 no ARN do perfil do IAM pelo ID da conta da AWS que hospeda o cluster do EKS. Por exemplo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole", }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }

Atualizar a política de permissão para o perfil da Identidade de Pods do EKS

Nesta etapa, você atualizará a política de permissão do perfil da Identidade de Pods do EKS associada ao cluster do Amazon EKS adicionando o ARN do perfil do IAM de destino como um recurso.

  1. Abra o console do Amazon EKS.

  2. No painel de navegação à esquerda, selecione Clusters e depois o nome do seu cluster do EKS.

  3. Escolha a guia Acesso.

  4. Em Associações da Identidade de Pods, selecione seu perfil da Identidade de Pods do EKS.

  5. Escolha Permissões, Adicionar permissões e Criar política em linha.

  6. Escolha JSON no lado direito.

  7. No editor de políticas, substitua a política JSON padrão pela sua política de permissão. Substitua o valor do espaço reservado pelo nome do perfil e 222233334444 no ARN do perfil do IAM pelo perfil do IAM de destino. Por exemplo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "arn:aws:iam::222233334444:role/eks-pod-identity-aws-resources" } ] }

Etapa 2: associar o perfil do IAM de destino a uma conta de serviço do Kubernetes

Nesta etapa, você criará uma associação entre o perfil do IAM de destino e a conta de serviço do Kubernetes no cluster do EKS.

  1. Abra o console do Amazon EKS.

  2. No painel de navegação à esquerda, selecione Clusters e depois o nome do cluster para o qual você deseja adicionar a associação.

  3. Escolha a guia Acesso.

  4. Nas Associações do Pod Identity, escolha Criar.

  5. Escolha o perfil da Identidade de Pods do EKS em Perfil do IAM para que suas workloads assumam.

  6. Escolha o perfil do IAM de destino em Perfil do IAM de destino que será assumido pelo perfil da Identidade de Pods do EKS.

  7. No campo Namespace do Kubernetes, insira o nome do namespace em que você deseja criar a associação (por exemplo, my-app-namespace). Isso definirá onde a conta de serviço vai residir.

  8. No campo Conta de serviço do Kubernetes, insira o nome da conta de serviço (por exemplo, my-service-account) que usará as credenciais do IAM. Isso vinculará o perfil do IAM à conta de serviço.

  9. Escolha Criar para criar a associação.

(Opcional) Etapa 3: adicionar permissões externas a um perfil do IAM de destino

Às vezes, poderá ser necessário conceder acesso aos recursos da AWS a terceiros (delegar acesso). Por exemplo, você decide contratar uma empresa terceirizada chamada Example Corp para monitorar sua conta da AWS e ajudar a otimizar os custos. Para rastrear seus gastos diários, a Example Corp precisa de acesso aos seus recursos da AWS. Nesse caso, recomendamos adicionar um ExternalId à política de confiança do perfil do IAM de destino para evitar possíveis problemas de Confused Deputy.

Editar a política de confiança

  1. Depois de criar o perfil, você retornará à lista de Perfis. Localize e clique no novo perfil que você criou na etapa anterior (por exemplo, MyCustomIAMTargetRole).

  2. Selecione a guia Relações de confiança.

  3. Clique em Editar política de confiança no lado direito.

  4. No editor de políticas, substitua a política JSON padrão pela sua política de confiança. Substitua o valor do espaço reservado ExternalId por aws-region/other-account/cluster-name/namespace/service-account-name, em que “região” é a região da AWS do cluster, “111122223333” é o ID da outra conta da AWS, “cluster-name” é o nome do cluster do EKS, “namespace” é o namespace do Kubernetes e “service-account-name” é o nome da conta de serviço do Kubernetes. Por exemplo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name" } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }