Aktifkan akses cluster untuk Amazon EMR di EKS - Amazon EMR

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

Aktifkan akses cluster untuk Amazon EMR di EKS

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)

Amazon EMR terintegrasi dengan manajemen akses EKS klaster Amazon (CAM), sehingga Anda dapat mengotomatiskan konfigurasi kebijakan AuthN dan AuthZ yang diperlukan untuk menjalankan pekerjaan EMR Amazon Spark di ruang nama cluster Amazon. EKS Saat Anda membuat klaster virtual dari namespace EKS klaster Amazon, 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

EMRIntegrasi Amazon dengan Amazon hanya EKS CAM didukung untuk Amazon baru EMR di cluster EKS virtual. Anda tidak dapat memigrasi klaster virtual yang ada untuk menggunakan integrasi ini.

Prasyarat

  • Pastikan Anda menjalankan versi 2.15.3 atau lebih tinggi AWS CLI

  • EKSCluster Amazon Anda harus menggunakan versi 1.23 atau lebih tinggi.

Pengaturan

Untuk mengatur integrasi antara Amazon EMR dan AccessEntry API operasi dari AmazonEKS, pastikan Anda telah menyelesaikan item berikut:

  • Pastikan authenticationMode EKS klaster Amazon Anda disetel keAPI_AND_CONFIG_MAP.

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

    Jika belum, atur authenticationMode keAPI_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.

  • Pastikan bahwa IAMperan yang Anda gunakan untuk menjalankan CreateVirtualCluster dan DeleteVirtualCluster API operasi 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

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 EKS cluster Amazon. Anda dapat menggunakannya untuk menjalankan EMR beban kerja Amazon di EKS klaster Amazon dalam namespace yang ditentukan.

  • Namespace — mekanisme untuk mengisolasi kelompok sumber daya dalam satu cluster. EKS

  • Kebijakan akses — izin yang memberikan akses dan tindakan ke IAM peran dalam EKS klaster.

  • Akses entri — entri yang dibuat dengan peran arn. Anda dapat menautkan entri akses ke kebijakan akses untuk menetapkan izin tertentu di klaster AmazonEKS.

  • EKSakses entri cluster virtual terintegrasi - cluster virtual yang dibuat menggunakan APIoperasi entri akses dari AmazonEKS.

Aktifkan akses cluster menggunakan aws-auth

Anda harus mengizinkan Amazon EMR EKS mengakses namespace tertentu di klaster Anda dengan mengambil tindakan berikut: membuat peran Kubernetes, mengikat peran tersebut ke pengguna Kubernetes, dan memetakan pengguna Kubernetes dengan peran terkait layanan. AWSServiceRoleForAmazonEMRContainers Tindakan ini otomatis eksctl ketika perintah pemetaan IAM identitas digunakan 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_eks_cluster dengan nama EKS cluster Amazon Anda dan ganti kubernetes_namespace dengan namespace Kubernetes yang dibuat untuk menjalankan beban kerja Amazon. EMR

penting

Anda harus mengunduh eksctl terbaru menggunakan langkah sebelumnya Mengatur kubectl dan eksctl untuk menggunakan fungsi ini.

Langkah-langkah manual untuk mengaktifkan akses klaster untuk EMR Amazon EKS

Anda juga dapat menggunakan langkah-langkah manual berikut untuk mengaktifkan akses klaster untuk EMR AmazonEKS.

  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 RBAC izin yang diperlukan ke 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 RBAC izin yang diperlukan ke 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
  2. 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 EKS dan dengan EMR demikian memungkinkan EMR Amazon EKS untuk melakukan tindakan sebagaimana ditentukan 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
  3. Perbarui peta konfigurasi Kubernetes aws-auth

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

    Opsi 1: Menggunakan eksctl

    Jalankan eksctl perintah berikut untuk memetakan Amazon EMR pada peran EKS terkait layanan 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 menyatakanError from server (NotFound): configmaps "aws-auth" not found, lihat langkah-langkah dalam Menambahkan peran pengguna di Panduan EKS Pengguna Amazon untuk menerapkan stok ConfigMap.

    2. Tambahkan Amazon EMR pada detail peran EKS terkait layanan ke mapRoles bagianConfigMap, 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>.
    3. Simpan file , dan tutup editor teks Anda.