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 em diferentes contas da AWS. Este guia mostra como configurar o acesso entre contas usando a Identidade de Pods do EKS, que permite que seus pods do Kubernetes acessem outros recursos da AWS usando perfis de destino.
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 de 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, é possível fornecer dois perfis do IAM: um perfil da Identidade de Pods do EKS na mesma conta do cluster de EKS e um perfil do IAM de destino da conta que contém os recursos da AWS (como buckets do S3 ou bancos de dados RDS). O perfil da Identidade de Pods do EKS deve estar na conta do cluster de 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 de 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 de 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 perfil da Identidade de Pods do EKS e nenhum perfil do IAM de destino, a duração das credenciais em cache será de 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 de 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
-
Abra o console do Amazon IAM
. -
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.
-
No painel de navegação à esquerda, selecione Perfis.
-
Escolha o botão Criar perfil e, em seguida, Conta da AWS em "Tipo de entidade confiável".
-
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.
-
Adicione as políticas de permissão que você gostaria de associar ao perfil (por exemplo, AmazonS3FullAccess) e escolha Avançar.
-
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
-
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
). -
Selecione a guia Relações de confiança.
-
Clique em Editar política de confiança no lado direito.
-
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 de EKS. Opcionalmente, você também pode usar PrincipalTags na política de confiança do perfil para autorizar somente contas de serviço específicas de um determinado cluster e namespace a assumir seu perfil de destino. Por exemplo:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Condition": { "StringEquals": { "aws:PrincipalTag/eks-cluster-arn": "arn:aws:eks:us-east-1:111122223333:cluster/example-cluster", "aws:PrincipalTag/kubernetes-namespace": "ExampleNameSpace", "aws:PrincipalTag/kubernetes-service-account": "ExampleServiceAccountName" }, "ArnEquals": { "aws:PrincipalARN": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" } } } ] }
A política acima permite que o perfil eks-pod-identeity-primary-role
da conta da AWS 111122223333 com as tags de sessão de Identidade de Pods do EKS relevantes assumam esse perfil.
Se você desativou as tags de sessão na sua Identidade de Pods do EKS, a Identidade de Pods do EKS também define sts:ExternalId
com informações sobre o cluster, namespace e conta de serviço de um pod ao assumir um perfil de destino.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name" }, "ArnEquals": { "aws:PrincipalARN": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:TagSession" } ] }
A política acima ajuda a garantir que somente o cluster, namespace e conta de serviço esperados possam assumir o perfil de destino.
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 de Amazon EKS adicionando o ARN do perfil do IAM de destino como um recurso.
-
Abra o console do Amazon EKS
. -
No painel de navegação à esquerda, selecione Clusters e depois o nome do seu cluster de EKS.
-
Escolha a guia Acesso.
-
Em Associações da Identidade de Pods, selecione seu perfil da Identidade de Pods do EKS.
-
Escolha Permissões, Adicionar permissões e Criar política em linha.
-
Escolha JSON no lado direito.
-
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 de EKS.
-
Abra o console do Amazon EKS
. -
No painel de navegação à esquerda, selecione Clusters e depois o nome do cluster para o qual você deseja adicionar a associação.
-
Escolha a guia Acesso.
-
Nas Associações do Pod Identity, escolha Criar.
-
Escolha o perfil da Identidade de Pods do EKS em Perfil do IAM para que suas workloads assumam.
-
Escolha o perfil do IAM de destino em Perfil do IAM de destino que será assumido pelo perfil da Identidade de Pods do EKS.
-
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. -
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. -
Escolha Criar para criar a associação.