Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Configurar uma conta de serviço do Kubernetes para assumir um perfil do IAM
Este tópico aborda como configurar uma conta de serviço do Kubernetes para assumir um perfil do AWS Identity and Access Management (IAM). Todos os Pods configurados para usar a conta de serviço podem então acessar quaisquer AWS service (Serviço da AWS) para os quais a função tenha permissões de acesso.
Pré-requisitos
-
Um cluster existente. Se você não tiver, poderá criar um, seguindo um dos guias Conceitos básicos do Amazon EKS.
-
Um provedor de OpenID Connect (OIDC) do IAM existente para o cluster. Para saber se você já tem um ou como criar um, consulte Criar um provedor OIDC do IAM para o cluster.
-
A versão
2.12.3
ou superior ou a versão1.27.160
ou superior da AWS Command Line Interface (AWS CLI) instalada e configurada em seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use
. Gerenciadores de pacotes, comoaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,apt-get
ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte Instalar, atualizar e desinstalar a AWS CLI e Configuração rápida com o aws configure no Guia do usuário da AWS Command Line Interface. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-la, consulte Instalar a AWS CLI no diretório inicial no Guia do usuário do AWS CloudShell. -
A ferramenta da linha de comando
kubectl
está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser idêntica ou até uma versão secundária anterior ou posterior à versão Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a1.29
, você poderá usar okubectl
versão1.28
,1.29
ou1.30
com ele. Para instalar ou atualizar okubectl
, consulte Instalar ou atualizar o kubectl. -
Um arquivo
kubectl
config
existente que contém a configuração do seu cluster. Para criar um arquivokubectl
config
, consulte Criar ou atualizar um arquivo kubeconfig para um cluster do Amazon EKS.
Para associar um perfil do IAM a uma conta de serviço do Kubernetes.
-
Se você quiser associar uma política do IAM existente ao seu perfil do IAM, vá para a próxima etapa.
Crie uma política do IAM. É possível criar a sua própria política ou copiar uma política gerenciada da AWS que já conceda algumas das permissões de que você precisa e a personalizar de acordo com seus requisitos específicos. Para obter mais informações, consulte Criar políticas do IAM no Guia do usuário do IAM.
-
Crie um arquivo que inclua as permissões para os Serviços da AWS que você deseja que seus Pods acessem. Para obter uma lista de todas as ações para todos os Serviços da AWS, consulte a Referência de autorização do serviço.
É possível executar o comando a seguir para criar um arquivo de política de exemplo que permita acesso somente leitura a um bucket do Amazon S3. É possível, opcionalmente, armazenar informações de configuração ou um script de bootstrap nesse bucket, e os contêineres no Pod podem ler o arquivo do bucket e carregá-lo na aplicação. Se você quiser criar esse exemplo de política, copie o conteúdo a seguir para o seu dispositivo. Substitua
my-pod-secrets-bucket
pelo nome do seu bucket e execute o comando.cat >
my-policy.json
<<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket
" } ] } EOF -
Crie a política do IAM.
aws iam create-policy --policy-name
my-policy
--policy-document file://my-policy.json
-
-
Crie um perfil do IAM e associe-o a uma conta de serviço do Kubernetes. Você pode usar o
eksctl
ou a AWS CLI. -
Confirme se o perfil e a conta de serviço estão configuradas corretamente.
-
Confirme se a política de confiança do perfil do IAM está configurada corretamente.
aws iam get-role --role-name
my-role
--query Role.AssumeRolePolicyDocumentVeja um exemplo de saída abaixo.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::
111122223333
:oidc-provider/oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:sub": "system:serviceaccount:default:my-service-account
", "oidc.eks.region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com" } } } ] } -
Confirme se a política que você anexou ao seu perfil em uma etapa anterior está vinculada ao perfil.
aws iam list-attached-role-policies --role-name
my-role
--query AttachedPolicies[].PolicyArn --output textVeja um exemplo de saída abaixo.
arn:aws:iam::
111122223333
:policy/my-policy
-
Defina uma variável para armazenar o nome do recurso da Amazon (ARN) da política que deseja usar. Substitua
my-policy
pelo nome da política para a qual deseja confirmar permissões.export policy_arn=arn:aws:iam::
111122223333
:policy/my-policy
-
Visualize a versão padrão da política.
aws iam get-policy --policy-arn $policy_arn
Veja um exemplo de saída abaixo.
{ "Policy": { "PolicyName": "
my-policy
", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE
", "Arn": "arn:aws:iam::111122223333
:policy/my-policy
", "Path": "/", "DefaultVersionId": "v1
", [...] } } -
Revise o conteúdo da política para garantir que ela inclua todas as permissões de que seu Pod precisa. Se necessário, substitua
1
no comando a seguir pela versão retornada na saída anterior.aws iam get-policy-version --policy-arn $policy_arn --version-id v
1
Veja um exemplo de saída abaixo.
{ "Version": "2012-10-17", "Statement": [
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" }
] }Se você criou a política de exemplo em uma etapa anterior, sua saída será a mesma. Se você criou uma política diferente, então o
exemplo
de conteúdo é diferente. -
Confirme que a conta do serviço do Kubernetes esteja anotada com o perfil.
kubectl describe serviceaccount
my-service-account
-ndefault
Veja um exemplo de saída abaixo.
Name:
my-service-account
Namespace:default
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333
:role/my-role
Image pull secrets: <none> Mountable secrets:my-service-account
-token-qqjfl
Tokens:my-service-account
-token-qqjfl
[...]
-
-
(Opcional) Configurar o endpoint do AWS Security Token Service para uma conta de serviço. A AWS recomenda usar um endpoint AWS STS regional em vez do endpoint global. Isso reduz a latência, fornece redundância integrada e aumenta a validade do token da sessão.
Próxima etapa
Para configurar Pods para usar uma conta de serviço do Kubernetes