

 **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.

# Configurar o plug-in CNI da Amazon VPC para usar IRSA
<a name="cni-iam-role"></a>

O [plug-in CNI da Amazon VPC para Kubernetes](https://github.com/aws/amazon-vpc-cni-k8s) é o plug-in de rede para redes de pods nos clusters do Amazon EKS. O plug-in é responsável por alocar endereços IP da VPC para pods do Kubernetes e configurar as redes necessárias para pods em cada nó.

**nota**  
O plug-in da CNI da Amazon VPC também é compatível com as Identidades de Pods do Amazon EKS. Para obter mais informações, consulte [Atribuir um perfil do IAM a uma conta de serviço do Kubernetes](pod-id-association.md).

O plugin:
+ Requer permissões do AWS Identity and Access Management (IAM). Se o seu cluster usar a família `IPv4`, as permissões serão especificadas na política [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html) gerenciada pela AWS. Se o seu cluster usar a família `IPv6`, as permissões deverão ser adicionadas a um política do IAM que você mesmo cria. Para obter as instruções, consulte [Criar uma política do IAM para clusters que usam a família `IPv6`](#cni-iam-role-create-ipv6-policy). É possível anexar a política a Amazon EKS node IAM role ou a uma função do IAM separada. Para obter instruções sobre como anexar a política ao perfil do IAM do nó do Amazon EKS, consulte [Perfil do IAM em nós do Amazon EKS](create-node-role.md). Recomendamos atribuir a uma função separada, conforme detalhado neste tópico.
+ Cria e está configurado para usar uma conta de serviço do Kubernetes denominada `aws-node` quando for implantado. A conta de serviço está vinculada a um `clusterrole` do Kubernetes chamado `aws-node`, ao qual são atribuídas as permissões necessárias do Kubernetes.

**nota**  
Os pods para o plug-in CNI da Amazon VPC para Kubernetes têm acesso às permissões atribuídas ao [perfil do IAM do nó do Amazon EKS](create-node-role.md), a menos que você bloqueie o acesso ao IMDS. Para obter mais informações, consulte [Restringir o acesso ao perfil de instância atribuído ao nó de processamento](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node).
+ Requer um cluster existente do Amazon EKS. Para implantar, consulte [Começar a usar o Amazon EKS](getting-started.md).
+ Requer um provedor OpenID Connect (OIDC) do AWS Identity and Access Management (IAM) para o cluster. Para determinar se você tem ou para criar uma, consulte [Criar um provedor de identidade OIDC do IAM para o cluster](enable-iam-roles-for-service-accounts.md).

## Etapa 1: criar o perfil do IAM do plug-in CNI da Amazon VPC para Kubernetes
<a name="cni-iam-role-create-role"></a>

1. Determine a família de IP do seu cluster.

   ```
   aws eks describe-cluster --name my-cluster | grep ipFamily
   ```

   Veja um exemplo de saída abaixo.

   ```
   "ipFamily": "ipv4"
   ```

   Em vez disso, a saída pode retornar `ipv6`.

1. Crie o perfil do IAM. Você pode usar `eksctl` ou `kubectl` e a CLI AWS para criar seu perfil do IAM.  
eksctl  
   + Crie um perfil do IAM e anexe a política do IAM a esse perfil por meio do comando que corresponde à família de IP do cluster. O comando cria e implementa uma pilha do AWS CloudFormation que cria um perfil do IAM, anexa a política que você especifica a ela e anota a conta de serviço `aws-node` existente do Kubernetes com o ARN do perfil do IAM criado.
     +  `IPv4` 

       Substitua *my-cluster* pelo seu próprio valor.

       ```
       eksctl create iamserviceaccount \
           --name aws-node \
           --namespace kube-system \
           --cluster my-cluster \
           --role-name AmazonEKSVPCCNIRole \
           --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \
           --override-existing-serviceaccounts \
           --approve
       ```
     +  `IPv6` 

       Substitua *my-cluster* pelo seu próprio valor. Substitua *111122223333* pelo ID da sua conta e substitua *AmazonEKS\$1CNI\$1IPv6\$1Policy* pelo nome da sua política `IPv6`. Se não tiver uma política `IPv6`, consulte [Criar uma política do IAM para clusters que usam a família `IPv6`](#cni-iam-role-create-ipv6-policy) para criá-la. Para utilizar `IPv6` com seu cluster, este deve atender a vários requisitos. Para obter mais informações, consulte [Saiba mais sobre endereços IPv6 para clusters, pods e serviços](cni-ipv6.md).

       ```
       eksctl create iamserviceaccount \
           --name aws-node \
           --namespace kube-system \
           --cluster my-cluster \
           --role-name AmazonEKSVPCCNIRole \
           --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \
           --override-existing-serviceaccounts \
           --approve
       ```  
kubectl e a AWS CLI  

   1. Exiba a URL do provedor OIDC do cluster.

      ```
      aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
      ```

      Veja abaixo um exemplo de saída.

      ```
      https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
      ```

      Se nenhum resultado for retornado, você deverá [criar um provedor OIDC do IAM do seu cluster](enable-iam-roles-for-service-accounts.md).

   1. Copie o conteúdo a seguir em um arquivo chamado *vpc-cni-trust-policy.json*. Substitua *111122223333* pelo ID de sua conta e *EXAMPLED539D4633E53DE1B71EXAMPLE* pelo resultado retornado na etapa anterior. Substitua *region-code* pela região da AWS em que seu cluster se encontra.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node"
                      }
                  }
              }
          ]
      }
      ```

   1. Crie a função. Você pode substituir *AmazonEKSVPCCNIRole* por qualquer nome que desejar.

      ```
      aws iam create-role \
        --role-name AmazonEKSVPCCNIRole \
        --assume-role-policy-document file://"vpc-cni-trust-policy.json"
      ```

   1. Anexe a política do IAM necessária à função. Execute o comando que corresponde à família de IP do seu cluster.
      +  `IPv4` 

        ```
        aws iam attach-role-policy \
          --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \
          --role-name AmazonEKSVPCCNIRole
        ```
      +  `IPv6` 

        Substitua *111122223333* pelo ID da sua conta e *AmazonEKS\$1CNI\$1IPv6\$1Policy* pelo nome da sua política `IPv6`. Se não tiver uma política `IPv6`, consulte [Criar uma política do IAM para clusters que usam a família `IPv6`](#cni-iam-role-create-ipv6-policy) para criá-la. Para utilizar `IPv6` com seu cluster, este deve atender a vários requisitos. Para obter mais informações, consulte [Saiba mais sobre endereços IPv6 para clusters, pods e serviços](cni-ipv6.md).

        ```
        aws iam attach-role-policy \
          --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \
          --role-name AmazonEKSVPCCNIRole
        ```

   1. Execute o seguinte comando para anotar a conta de serviço `aws-node` com o ARN do perfil do IAM criado por você anteriormente: Substitua os valores de exemplo por seus próprios valores.

      ```
      kubectl annotate serviceaccount \
          -n kube-system aws-node \
          eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
      ```

1. (Opcional) Configure o tipo de endpoint do AWS Security Token Service usado por sua conta de serviço do Kubernetes. Para obter mais informações, consulte [Configurar o endpoint do AWS Security Token Service para uma conta de serviço](configure-sts-endpoint.md).

## Etapa 2: reimplantar os pods do plug-in CNI da Amazon VPC para Kubernetes
<a name="cni-iam-role-redeploy-pods"></a>

1. Exclua e recrie os pods existentes associados à conta de serviço para aplicar as variáveis de credenciais do ambiente. A anotação não é aplicada a pods que estejam sendo executados sem a anotação. O comando a seguir exclui os pods do DaemonSet `aws-node` existentes e implanta-os com a anotação da conta de serviço.

   ```
   kubectl delete Pods -n kube-system -l k8s-app=aws-node
   ```

1. Verifique se todos os pods foram reiniciados.

   ```
   kubectl get pods -n kube-system -l k8s-app=aws-node
   ```

1. Descreva um dos pods e verifique se as variáveis de ambiente `AWS_WEB_IDENTITY_TOKEN_FILE` e `AWS_ROLE_ARN` existem. Substitua *cpjw7* pelo nome de um dos pods retornados no resultado da etapa anterior.

   ```
   kubectl describe pod -n kube-system aws-node-cpjw7 | grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'
   ```

   Veja abaixo um exemplo de saída.

   ```
   AWS_ROLE_ARN:                 arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
         AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token
         AWS_ROLE_ARN:                           arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
         AWS_WEB_IDENTITY_TOKEN_FILE:            /var/run/secrets/eks.amazonaws.com/serviceaccount/token
   ```

   Dois conjuntos de resultados duplicados são retornados porque o pod contém dois contêineres. Os dois contêineres têm os mesmos valores.

   Se o seu pod estiver usando o endpoint regional da AWS, a linha a seguir também será retornada na saída anterior.

   ```
   AWS_STS_REGIONAL_ENDPOINTS=regional
   ```

## Etapa 3: Remover a política CNI do perfil do IAM do nó
<a name="remove-cni-policy-node-iam-role"></a>

Se o [perfil do IAM para o nó do Amazon EKS](create-node-role.md) atualmente conta com a política `AmazonEKS_CNI_Policy` do IAM (`IPv4`) ou uma [política IPv6](#cni-iam-role-create-ipv6-policy) anexada a ele, e você criou um perfil do IAM separado, anexou a política a esse novo perfil e a atribuiu à conta de serviço do Kubernetes, chamada `aws-node`, recomendamos que você remova a política do perfil do nó com o comando da AWS CLI correspondente à família de IPs do cluster. Substitua *AmazonEKSNodeRole* pelo nome da sua função de nó.
+  `IPv4` 

  ```
  aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
  ```
+  `IPv6` 

  Substitua *111122223333* pelo ID da sua conta e *AmazonEKS\$1CNI\$1IPv6\$1Policy* pelo nome da sua política `IPv6`.

  ```
  aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy
  ```

## Criar uma política do IAM para clusters que usam a família `IPv6`
<a name="cni-iam-role-create-ipv6-policy"></a>

Se você tiver criado um cluster que usa a família `IPv6`, e esse cluster tiver a versão `1.10.1` ou mais recente do complemento do plug-in CNI da Amazon VPC para Kubernetes configurada, será necessário criar uma política do IAM que você possa atribuir a um perfil do IAM. Se você tiver um cluster que não foi configurado com a família `IPv6` no momento da criação, será necessário criar um novo cluster para usar `IPv6`. Para obter mais informações sobre como usar o `IPv6` com o seu cluster, consulte [Saiba mais sobre endereços IPv6 para clusters, pods e serviços](cni-ipv6.md).

1. Copie o texto a seguir e salve-o em um arquivo chamado `vpc-cni-ipv6-policy.json`.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:AssignIpv6Addresses",
                   "ec2:DescribeInstances",
                   "ec2:DescribeTags",
                   "ec2:DescribeNetworkInterfaces",
                   "ec2:DescribeInstanceTypes"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateTags"
               ],
               "Resource": [
                   "arn:aws:ec2:*:*:network-interface/*"
               ]
           }
       ]
   }
   ```

1. Crie a política do IAM.

   ```
   aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
   ```