

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Habilitação do acesso ao cluster para o Amazon EMR no EKS
<a name="setting-up-cluster-access"></a>

As seções a seguir mostram algumas maneiras de habilitar o acesso ao cluster. A primeira é usando o gerenciamento de acesso ao cluster (CAM) do Amazon EKS e a segunda mostra como executar etapas manuais para habilitar o acesso ao cluster.

## Como habilitar o acesso ao cluster usando a entrada de acesso do EKS (recomendado)
<a name="setting-up-cluster-access-cam-integration"></a>

**nota**  
O `aws-auth` ConfigMap está obsoleto. [O método recomendado para gerenciar o acesso ao Kubernetes APIs é o Access Entries.](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)

O Amazon EMR é integrado ao [gerenciamento de acesso ao cluster (CAM) do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html), para que você possa automatizar a configuração das políticas AuthN e AuthZ necessárias para executar trabalhos Spark do Amazon EMR em namespaces de clusters do Amazon EKS. Quando você cria um cluster virtual usando um namespace de cluster do Amazon EKS, o Amazon EMR configura automaticamente todas as permissões necessárias, para que você não precise adicionar nenhuma etapa extra aos fluxos de trabalho atuais.

**nota**  
A integração do Amazon EMR com o CAM do Amazon EKS é compatível somente com novos clusters virtuais do Amazon EMR no EKS. Não é possível migrar clusters virtuais existentes para usar essa integração.

### Pré-requisitos
<a name="setting-up-cluster-access-cam-integration-prereqs"></a>
+ Verifique se você está executando a versão 2.15.3 ou superior do AWS CLI
+ O cluster do Amazon EKS deve estar na versão 1.23 ou posterior.

### Configuração
<a name="setting-up-cluster-access-cam-integration-setup"></a>

Para configurar a integração entre o Amazon EMR e as operações de AccessEntry API do Amazon EKS, certifique-se de ter concluído os seguintes itens:
+ Verifique se `authenticationMode` do cluster do Amazon EKS está configurado como `API_AND_CONFIG_MAP`.

  ```
  aws eks describe-cluster --name <eks-cluster-name>
  ```

  Se ainda não estiver, defina `authenticationMode` como `API_AND_CONFIG_MAP`.

  ```
  aws eks update-cluster-config 
      --name <eks-cluster-name> 
      --access-config authenticationMode=API_AND_CONFIG_MAP
  ```

  Para obter mais informações sobre modos de autenticação, consulte [Cluster authentication modes](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html#authentication-modes).
+ Certifique-se de que o [perfil do IAM](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-iam.html) que você está usando para executar `CreateVirtualCluster` e as operações da API `DeleteVirtualCluster` também tenha as seguintes permissões:

  ```
  {
    "Effect": "Allow",
    "Action": [
      "eks:CreateAccessEntry"
    ],
    "Resource": "arn:<AWS_PARTITION>:eks:<AWS_REGION>:<AWS_ACCOUNT_ID>:cluster/<EKS_CLUSTER_NAME>"
  }, 
  {
    "Effect": "Allow",
    "Action": [
      "eks:DescribeAccessEntry",
      "eks:DeleteAccessEntry",
      "eks:ListAssociatedAccessPolicies",
      "eks:AssociateAccessPolicy",
      "eks:DisassociateAccessPolicy"
    ],
    "Resource": "arn:<AWS_PARTITION>:eks:<AWS_REGION>:<AWS_ACCOUNT_ID>:access-entry/<EKS_CLUSTER_NAME>/role/<AWS_ACCOUNT_ID>/AWSServiceRoleForAmazonEMRContainers/*"
  }
  ```

### Conceitos e terminologia
<a name="setting-up-cluster-access-cam-integration-concepts"></a>

A seguir está uma lista de terminologias e conceitos relacionados ao CAM do Amazon EKS.
+ Cluster virtual (VC): representação lógica do namespace criado no Amazon EKS. É um link 1:1 para um namespace de cluster do Amazon EKS. Você pode usá-lo para executar workloads do Amazon EMR em um cluster do Amazon EKS dentro do namespace especificado.
+ Namespace: mecanismo para isolar grupos de recursos em um único cluster do EKS.
+ Política de acesso: permissões que concedem acesso e ações a um perfil do IAM em um cluster do EKS.
+ Entrada de acesso: uma entrada criada com um ARN de perfil. Você pode vincular a entrada de acesso a uma política de acesso para atribuir permissões específicas no cluster do Amazon EKS.
+ Cluster virtual integrado de entrada de acesso do EKS: o cluster virtual criado usando [operações de API de entrada de acesso](https://docs.aws.amazon.com/eks/latest/APIReference/API_Operations_Amazon_Elastic_Kubernetes_Service.html) do Amazon EKS.

## Como habilitar o acesso ao cluster usando `aws-auth`
<a name="setting-up-cluster-access-aws-auth"></a>

Você deve permitir o acesso do Amazon EMR no EKS a um namespace específico em seu cluster ao executar as seguintes ações: criar um perfil do Kubernetes, associar o perfil a um usuário do Kubernetes e mapear o usuário do Kubernetes com o perfil vinculado ao serviço [https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/using-service-linked-roles.html](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/using-service-linked-roles.html). Essas ações são automatizadas em `eksctl` quando o comando de mapeamento de identidade do IAM é usado com `emr-containers` como nome do serviço. Você pode executar essas operações facilmente ao usar o comando apresentado a seguir.

```
eksctl create iamidentitymapping \
    --cluster my_eks_cluster \
    --namespace kubernetes_namespace \
    --service-name "emr-containers"
```

*my\$1eks\$1cluster*Substitua pelo nome do seu cluster Amazon EKS e *kubernetes\$1namespace* substitua pelo namespace Kubernetes criado para executar cargas de trabalho do Amazon EMR. 

**Importante**  
Você deve fazer o download do eksctl mais recente usando a etapa anterior [Configuração do kubectl e eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) para usar esta funcionalidade. 

### Etapas manuais para habilitar o acesso ao cluster para o Amazon EMR no EKS
<a name="setting-up-cluster-access-manual"></a>

Você também pode usar as etapas manuais apresentadas a seguir para habilitar o acesso ao cluster para o Amazon EMR no EKS.

1. **Crie um perfil do Kubernetes em um namespace específico**

------
#### [ Amazon EKS 1.22 - 1.29 ]

   Com o Amazon EKS, versões 1.22 a 1.29, execute o comando a seguir para criar um perfil do Kubernetes em um namespace específico. Esse perfil concede as permissões de RBAC obrigatórias ao Amazon EMR no EKS.

   ```
   namespace=my-namespace
   cat - >>EOF | kubectl apply -f - >>namespace "${namespace}"
   apiVersion: rbac.authorization.k8s.io/v1
   kind: Role
   metadata:
     name: emr-containers
     namespace: ${namespace}
   rules:
     - apiGroups: [""]
       resources: ["namespaces"]
       verbs: ["get"]
     - apiGroups: [""]
       resources: ["serviceaccounts", "services", "configmaps", "events", "pods", "pods/log"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"]
     - apiGroups: [""]
       resources: ["secrets"]
       verbs: ["create", "patch", "delete", "watch"]
     - apiGroups: ["apps"]
       resources: ["statefulsets", "deployments"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"]
     - apiGroups: ["batch"]
       resources: ["jobs"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"]
     - apiGroups: ["extensions", "networking.k8s.io"]
       resources: ["ingresses"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"]
     - apiGroups: ["rbac.authorization.k8s.io"]
       resources: ["roles", "rolebindings"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"]
     - apiGroups: [""]
       resources: ["persistentvolumeclaims"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete",  "deletecollection", "annotate", "patch", "label"]
   EOF
   ```

------
#### [ Amazon EKS 1.21 and below ]

   Com o Amazon EKS, versões 1.21 e anteriores, execute o comando a seguir para criar um perfil do Kubernetes em um namespace específico. Esse perfil concede as permissões de RBAC obrigatórias ao Amazon EMR no EKS.

   ```
   namespace=my-namespace
   cat - >>EOF | kubectl apply -f - >>namespace "${namespace}"
   apiVersion: rbac.authorization.k8s.io/v1
   kind: Role
   metadata:
     name: emr-containers
     namespace: ${namespace}
   rules:
     - apiGroups: [""]
       resources: ["namespaces"]
       verbs: ["get"]
     - apiGroups: [""]
       resources: ["serviceaccounts", "services", "configmaps", "events", "pods", "pods/log"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"]
     - apiGroups: [""]
       resources: ["secrets"]
       verbs: ["create", "patch", "delete", "watch"]
     - apiGroups: ["apps"]
       resources: ["statefulsets", "deployments"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"]
     - apiGroups: ["batch"]
       resources: ["jobs"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"]
     - apiGroups: ["extensions"]
       resources: ["ingresses"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"]
     - apiGroups: ["rbac.authorization.k8s.io"]
       resources: ["roles", "rolebindings"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"]
     - apiGroups: [""]
       resources: ["persistentvolumeclaims"]
       verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"]
   EOF
   ```

------

1. **Crie uma associação de perfil do Kubernetes com escopo definido para o namespace**

   Execute o comando apresentado a seguir para criar uma associação de perfil do Kubernetes no namespace especificado. Essa associação de perfil concede as permissões definidas no perfil criado na etapa anterior a um usuário chamado `emr-containers`. Esse usuário identifica [perfis vinculados ao serviço para o Amazon EMR no EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/using-service-linked-roles.html) e, dessa forma, permite que o Amazon EMR no EKS execute ações conforme definido pelo perfil criado.

   ```
   namespace=my-namespace
   
   cat - <<EOF | kubectl apply -f - --namespace "${namespace}"
   apiVersion: rbac.authorization.k8s.io/v1
   kind: RoleBinding
   metadata:
     name: emr-containers
     namespace: ${namespace}
   subjects:
   - kind: User
     name: emr-containers
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: Role
     name: emr-containers
     apiGroup: rbac.authorization.k8s.io
   EOF
   ```

1. **Atualize mapa de configuração `aws-auth` do Kubernetes**

   Você pode usar uma das opções apresentadas a seguir para mapear o perfil vinculado ao serviço do Amazon EMR no EKS com o usuário `emr-containers` que foi associado ao perfil do Kubernetes na etapa anterior.

   **Opção 1: usar o `eksctl`**

   Execute o comando `eksctl` apresentado a seguir para mapear o perfil vinculado ao serviço do Amazon EMR no EKS com o usuário `emr-containers`.

   ```
   eksctl create iamidentitymapping \
       --cluster my-cluster-name \
       --arn "arn:aws:iam::my-account-id:role/AWSServiceRoleForAmazonEMRContainers" \
       --username emr-containers
   ```

   **Opção 2: sem usar o eksctl**

   1. Execute o comando apresentado a seguir para abrir o mapa de configuração `aws-auth` no editor de texto. 

      ```
      kubectl edit -n kube-system configmap/aws-auth
      ```
**nota**  
Se você receber um erro informando`Error from server (NotFound): configmaps "aws-auth" not found`, consulte as etapas em [Adicionar funções de usuário](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) no Guia do usuário do Amazon EKS para aplicar o estoque ConfigMap. 

   1. Adicione detalhes do perfil vinculado ao serviço do Amazon EMR no EKS à seção `mapRoles` do `ConfigMap`, em `data`. Adicione essa seção se ela ainda não existir no arquivo. A seção `mapRoles` atualizada em dados deve ser semelhante ao exemplo a seguir.

      ```
      apiVersion: v1
      data:
        mapRoles: |
          - rolearn: arn:aws:iam::<your-account-id>:role/AWSServiceRoleForAmazonEMRContainers
            username: emr-containers
          - ... <other previously existing role entries, if there's any>.
      ```

   1. Salve o arquivo e saia do seu editor de texto.