

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Abilitare l'accesso ai cluster per Amazon EMR su EKS
<a name="setting-up-cluster-access"></a>

Le sezioni seguenti mostrano un paio di modi per abilitare l'accesso al cluster. La prima consiste nell'utilizzare la gestione degli accessi al cluster Amazon EKS (CAM) e la seconda mostra come eseguire passaggi manuali per abilitare l'accesso al cluster.

## Abilita l'accesso al cluster utilizzando EKS Access Entry (consigliato)
<a name="setting-up-cluster-access-cam-integration"></a>

**Nota**  
La funzionalità `aws-auth` ConfigMap è obsoleta. [Il metodo consigliato per gestire l'accesso a Kubernetes APIs è Access Entries.](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)

Amazon EMR è integrato con [Amazon EKS Cluster Access Management (CAM)](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html), quindi puoi automatizzare la configurazione delle policy AuthN e AuthZ necessarie per eseguire i job Amazon EMR Spark nei namespace dei cluster Amazon EKS. Quando crei un cluster virtuale da uno spazio dei nomi del cluster Amazon EKS, Amazon EMR configura automaticamente tutte le autorizzazioni necessarie, quindi non è necessario aggiungere passaggi aggiuntivi ai flussi di lavoro correnti.

**Nota**  
L'integrazione di Amazon EMR con Amazon EKS CAM è supportata solo per i nuovi Amazon EMR su cluster virtuali EKS. Non puoi migrare i cluster virtuali esistenti per utilizzare questa integrazione.

### Prerequisiti
<a name="setting-up-cluster-access-cam-integration-prereqs"></a>
+ Assicurati di utilizzare la versione 2.15.3 o successiva di AWS CLI
+ Il tuo cluster Amazon EKS deve avere la versione 1.23 o successiva.

### Configurazione
<a name="setting-up-cluster-access-cam-integration-setup"></a>

Per configurare l'integrazione tra Amazon EMR e le operazioni AccessEntry API di Amazon EKS, assicurati di aver completato i seguenti elementi:
+ Assicurati che quello `authenticationMode` del tuo cluster Amazon EKS sia impostato su`API_AND_CONFIG_MAP`.

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

  Se non lo è già, imposta `authenticationMode` su`API_AND_CONFIG_MAP`.

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

  Per ulteriori informazioni sulle modalità di autenticazione, vedere [Modalità di autenticazione del cluster](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html#authentication-modes).
+ Assicurati che il [ruolo IAM](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-iam.html) che stai utilizzando per eseguire le operazioni `CreateVirtualCluster` e `DeleteVirtualCluster` API disponga anche delle seguenti autorizzazioni:

  ```
  {
    "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/*"
  }
  ```

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

Di seguito è riportato un elenco di terminologie e concetti relativi ad Amazon EKS CAM.
+ Cluster virtuale (VC): rappresentazione logica dello spazio dei nomi creato in Amazon EKS. È un collegamento 1:1 a uno spazio dei nomi del cluster Amazon EKS. Puoi usarlo per eseguire carichi di lavoro Amazon EMR su un cluster Amazon EKS all'interno dello spazio dei nomi specificato.
+ Namespace: meccanismo per isolare gruppi di risorse all'interno di un singolo cluster EKS.
+ Politica di accesso: autorizzazioni che garantiscono l'accesso e le azioni a un ruolo IAM all'interno di un cluster EKS.
+ Accesso: una voce creata con un ruolo arn. Puoi collegare la voce di accesso a una policy di accesso per assegnare autorizzazioni specifiche nel cluster Amazon EKS.
+ Cluster virtuale integrato con accesso EKS: il cluster virtuale creato utilizzando [le operazioni API di accesso](https://docs.aws.amazon.com/eks/latest/APIReference/API_Operations_Amazon_Elastic_Kubernetes_Service.html) di Amazon EKS.

## Abilita l'accesso al cluster utilizzando `aws-auth`
<a name="setting-up-cluster-access-aws-auth"></a>

È necessario consentire ad Amazon EMR su EKS l'accesso a uno spazio dei nomi specifico nel cluster mediante le seguenti operazioni: creazione di un ruolo Kubernetes, associazione del ruolo a un utente Kubernetes e mappatura dell'utente Kubernetes con il ruolo collegato al servizio [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). Queste operazioni sono automatizzate in `eksctl` quando il comando di mappatura di identità IAM viene utilizzato con `emr-containers` come nome di servizio. È possibile eseguire facilmente queste operazioni utilizzando il comando seguente.

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

Sostituiscilo *my\$1eks\$1cluster* con il nome del tuo cluster Amazon EKS e sostituiscilo *kubernetes\$1namespace* con lo spazio dei nomi Kubernetes creato per eseguire carichi di lavoro Amazon EMR. 

**Importante**  
È necessario scaricare la versione più recente di eksctl utilizzando il passaggio precedente. [Configurare](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) kubectl ed eksctl per utilizzare questa funzionalità. 

### Procedure manuali per abilitare l'accesso al cluster per Amazon EMR su EKS
<a name="setting-up-cluster-access-manual"></a>

È anche possibile utilizzare la seguente procedura manuale per abilitare l'accesso cluster per Amazon EMR su EKS.

1. **Creazione di un ruolo Kubernetes in uno spazio dei nomi specifico**

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

   Con Amazon EKS 1.22 - 1.29, esegui il comando seguente per creare un ruolo Kubernetes in uno spazio dei nomi specifico. Questo ruolo concede le necessarie autorizzazioni RBAC ad Amazon EMR su 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 ]

   Con Amazon EKS 1.21 e versioni precedenti, esegui il comando seguente per creare un ruolo Kubernetes in uno spazio dei nomi specifico. Questo ruolo concede le necessarie autorizzazioni RBAC ad Amazon EMR su 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. **Creazione dell'associazione di un ruolo Kubernetes allo spazio dei nomi**

   Esegui questo comando per creare l'associazione di un ruolo Kubernetes a uno spazio dei nomi specifico. Questa associazione di ruolo concede le autorizzazioni definite nel ruolo creato nel passaggio precedente a un utente denominato `emr-containers`. Questo utente identifica i [ruoli collegati ai servizi di Amazon EMR su EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/using-service-linked-roles.html) e, di conseguenza, consente ad Amazon EMR su EKS di eseguire le operazioni definite dal ruolo che hai creato.

   ```
   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. **Aggiornamento della mappa di configurazione `aws-auth` di Kubernetes**

   Puoi utilizzare una delle seguenti opzioni per mappare il ruolo collegato ai servizi di Amazon EMR su EKS con l'utente `emr-containers` associato al ruolo Kubernetes nella fase precedente.

   **Opzione 1: usando `eksctl`**

   Esegui il comando `eksctl` seguente per mappare il ruolo collegato ai servizi di Amazon EMR su EKS con l'utente `emr-containers`.

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

   **Opzione 2: Senza utilizzare eksctl**

   1. Esegui il seguente comando per aprire la mappa di configurazione `aws-auth` nell'editor di testo. 

      ```
      kubectl edit -n kube-system configmap/aws-auth
      ```
**Nota**  
Se ricevi un messaggio di errore`Error from server (NotFound): configmaps "aws-auth" not found`, consulta la procedura in [Aggiungere ruoli utente](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) nella Guida per l'utente di Amazon EKS per applicare lo stock ConfigMap. 

   1. Aggiungi i dettagli del ruolo collegato ai servizi di Amazon EMR su EKS alla sezione `mapRoles` di `ConfigMap`, in `data`. Aggiungi questa sezione se non esiste già nel file. La sezione `mapRoles` aggiornata in dati ha l'aspetto seguente.

      ```
      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. Salva il file ed esci dall’editor di testo.