

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Aktifkan akses klaster untuk Amazon EMR di EKS
<a name="setting-up-cluster-access"></a>

Bagian berikut menunjukkan beberapa cara untuk mengaktifkan akses cluster. Yang pertama adalah dengan menggunakan Amazon EKS cluster access management (CAM) dan yang terakhir menunjukkan cara mengambil langkah-langkah manual untuk mengaktifkan akses cluster.

## Aktifkan akses cluster menggunakan EKS Access Entry (disarankan)
<a name="setting-up-cluster-access-cam-integration"></a>

**catatan**  
`aws-auth` ConfigMap Itu sudah usang. [Metode yang disarankan untuk mengelola akses ke Kubernetes APIs adalah Access Entries.](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)

Amazon EMR terintegrasi dengan [Amazon EKS cluster access management (CAM)](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html), sehingga Anda dapat mengotomatiskan konfigurasi kebijakan AuthN dan AuthZ yang diperlukan untuk menjalankan pekerjaan Amazon EMR Spark di ruang nama cluster Amazon EKS. Saat Anda membuat klaster virtual dari namespace klaster Amazon EKS, Amazon EMR secara otomatis mengonfigurasi semua izin yang diperlukan, sehingga Anda tidak perlu menambahkan langkah tambahan apa pun ke alur kerja Anda saat ini.

**catatan**  
Integrasi Amazon EMR dengan Amazon EKS CAM hanya didukung untuk EMR Amazon baru di kluster virtual EKS. Anda tidak dapat memigrasi klaster virtual yang ada untuk menggunakan integrasi ini.

### Prasyarat
<a name="setting-up-cluster-access-cam-integration-prereqs"></a>
+ Pastikan Anda menjalankan versi 2.15.3 atau lebih tinggi AWS CLI
+ Cluster Amazon EKS Anda harus menggunakan versi 1.23 atau lebih tinggi.

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

Untuk mengatur integrasi antara Amazon EMR dan operasi AccessEntry API dari Amazon EKS, pastikan Anda telah menyelesaikan item berikut:
+ Pastikan `authenticationMode` klaster Amazon EKS Anda disetel ke`API_AND_CONFIG_MAP`.

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

  Jika belum, atur `authenticationMode` ke`API_AND_CONFIG_MAP`.

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

  Untuk informasi selengkapnya tentang mode autentikasi, lihat Mode [otentikasi klaster](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html#authentication-modes).
+ Pastikan bahwa [peran IAM](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-iam.html) yang Anda gunakan untuk menjalankan operasi `CreateVirtualCluster` dan `DeleteVirtualCluster` API juga memiliki izin berikut:

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

### Konsep dan terminologi
<a name="setting-up-cluster-access-cam-integration-concepts"></a>

Berikut ini adalah daftar terminologi dan konsep yang terkait dengan Amazon EKS CAM.
+ Virtual cluster (VC) — representasi logis dari namespace yang dibuat di Amazon EKS. Ini adalah tautan 1:1 ke namespace cluster Amazon EKS. Anda dapat menggunakannya untuk menjalankan beban kerja Amazon EMR di klaster Amazon EKS dalam namespace yang ditentukan.
+ Namespace — mekanisme untuk mengisolasi kelompok sumber daya dalam satu kluster EKS.
+ Kebijakan akses — izin yang memberikan akses dan tindakan ke peran IAM dalam klaster EKS.
+ Akses entri — entri yang dibuat dengan peran arn. Anda dapat menautkan entri akses ke kebijakan akses untuk menetapkan izin tertentu di klaster Amazon EKS.
+ Kluster virtual terintegrasi entri akses EKS — cluster virtual yang dibuat menggunakan [operasi API entri akses](https://docs.aws.amazon.com/eks/latest/APIReference/API_Operations_Amazon_Elastic_Kubernetes_Service.html) dari Amazon EKS.

## Aktifkan akses cluster menggunakan `aws-auth`
<a name="setting-up-cluster-access-aws-auth"></a>

Anda harus mengizinkan akses Amazon EMR di EKS ke namespace tertentu di klaster Anda dengan mengambil tindakan berikut: membuat peran Kubernetes, mengikat peran ke pengguna Kubernetes, dan memetakan pengguna Kubernetes dengan peran terkait layanan [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). Tindakan ini diotomatiskan di `eksctl` ketika perintah pemetaan identitas IAM digunakan dengan `emr-containers` sebagai nama layanan. Anda dapat melakukan operasi ini dengan mudah menggunakan perintah berikut.

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

Ganti *my\$1eks\$1cluster* dengan nama cluster Amazon EKS Anda dan ganti *kubernetes\$1namespace* dengan namespace Kubernetes yang dibuat untuk menjalankan beban kerja Amazon EMR. 

**penting**  
Anda harus mengunduh eksctl terbaru menggunakan langkah sebelumnya [Mengatur kubectl dan eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) untuk menggunakan fungsi ini. 

### Langkah manual untuk mengaktifkan akses klaster untuk Amazon EMR di EKS
<a name="setting-up-cluster-access-manual"></a>

Anda juga dapat menggunakan langkah manual berikut untuk mengaktifkan akses klaster untuk Amazon EMR di EKS.

1. **Buat peran Kubernetes di namespace tertentu**

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

   Dengan Amazon EKS 1.22 - 1.29, jalankan perintah berikut untuk membuat peran Kubernetes dalam namespace tertentu. Peran ini memberikan izin RBAC yang diperlukan untuk Amazon EMR di 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 ]

   Dengan Amazon EKS 1.21 dan di bawahnya, jalankan perintah berikut untuk membuat peran Kubernetes di namespace tertentu. Peran ini memberikan izin RBAC yang diperlukan untuk Amazon EMR di 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. **Buat ikatan peran Kubernetes yang dicakup ke namespace**

   Jalankan perintah berikut untuk membuat peran mengikat Kubernetes mengikat di namespace yang diberikan. Pengikatan peran ini memberikan izin yang ditetapkan dalam peran yang dibuat di langkah sebelumnya ke pengguna bernama `emr-containers`. Pengguna ini mengidentifikasi [peran terkait layanan untuk Amazon EMR di EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/using-service-linked-roles.html) dan dengan demikian memungkinkan Amazon EMR di EKS untuk melakukan tindakan seperti yang didefinisikan oleh peran yang Anda buat.

   ```
   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. **Perbarui peta konfigurasi Kubernetes `aws-auth`**

   Anda dapat menggunakan salah satu opsi berikut untuk memetakan Amazon EMR di EKS peran terkait layanan dengan pengguna `emr-containers` yang terikat dengan peran Kubernetes pada langkah sebelumnya.

   **Opsi 1: Menggunakan `eksctl`**

   Jalankan perintah `eksctl` berikut untuk memetakan peran terkait layanan EMR Amazon di EKS dengan pengguna `emr-containers`.

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

   **Opsi 2: Tanpa menggunakan eksctl**

   1. Jalankan perintah berikut untuk membuka peta konfigurasi `aws-auth` dalam editor teks. 

      ```
      kubectl edit -n kube-system configmap/aws-auth
      ```
**catatan**  
Jika Anda menerima kesalahan yang menyatakan`Error from server (NotFound): configmaps "aws-auth" not found`, lihat langkah-langkah dalam [Menambahkan peran pengguna](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) di Panduan Pengguna Amazon EKS untuk menerapkan stok ConfigMap. 

   1. Tambahkan detail peran terkait Amazon EMR di EKS ke bagian `mapRoles` dari `ConfigMap`, di bawah `data`. Tambahkan bagian ini jika belum ada dalam file. Bagian `mapRoles` yang diperbarui di bawah data terlihat seperti contoh berikut.

      ```
      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. Simpan file , dan tutup editor teks Anda.