Aktifkan Lake Formation dengan 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 Lake Formation dengan Amazon EMR di EKS

Dengan Amazon EMR rilis 7.7 dan yang lebih tinggi, Anda dapat memanfaatkan AWS Lake Formation untuk menerapkan kontrol akses berbutir halus pada tabel Katalog Data yang didukung oleh Amazon S3. Kemampuan ini memungkinkan Anda mengonfigurasi kontrol akses tingkat tabel, baris, kolom, dan sel untuk kueri baca dalam EMR Amazon Anda di EKS Spark Jobs.

Bagian ini mencakup cara membuat konfigurasi keamanan dan mengatur Lake Formation agar berfungsi dengan Amazon EMR. Ini juga menjelaskan cara membuat cluster virtual dengan Konfigurasi Keamanan yang Anda buat untuk Lake Formation. Bagian-bagian ini dimaksudkan untuk diselesaikan secara berurutan.

Langkah 1: Siapkan izin kolom, baris, atau tingkat sel berbasis Lake Formation

Pertama, untuk menerapkan izin tingkat baris dan kolom dengan Lake Formation, administrator danau data untuk Lake Formation harus mengatur Tag LakeFormationAuthorizedCallerSesi. Lake Formation menggunakan tag sesi ini untuk mengotorisasi penelepon dan menyediakan akses ke danau data.

Arahkan ke konsol AWS Lake Formation dan pilih opsi Pengaturan integrasi aplikasi dari bagian Administrasi di sidebar. Kemudian, centang kotak Izinkan mesin eksternal memfilter data di lokasi Amazon S3 yang terdaftar di Lake Formation. Tambahkan AWS Akun IDs tempat Spark Jobs akan berjalan, dan tag Session Values.

Pengaturan integrasi aplikasi

Perhatikan bahwa Tag LakeFormationAuthorizedCallerSesi yang diteruskan di sini diteruskan SecurityConfigurationnanti saat Anda mengatur peran IAM, di bagian 3.

Langkah 2: Siapkan izin EKS RBAC

Kedua, Anda mengatur izin untuk kontrol akses berbasis peran.

Berikan Izin Kluster EKS ke EMR Amazon di layanan EKS

EMR Amazon di Layanan EKS harus memiliki izin Peran Kluster EKS sehingga dapat membuat izin namespace silang untuk Driver Sistem untuk memutar pelaksana Pengguna di namespace Pengguna.

Buat Peran Cluster

Contoh ini mendefinisikan izin untuk kumpulan sumber daya.

vim emr-containers-cluster-role.yaml --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: emr-containers 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: ["clusterroles","clusterrolebindings","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"] ---
kubectl apply -f emr-containers-cluster-role.yaml

Buat Binding Peran Cluster

vim emr-containers-cluster-role-binding.yaml --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: emr-containers subjects: - kind: User name: emr-containers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: emr-containers apiGroup: rbac.authorization.k8s.io ---
kubectl apply -f emr-containers-cluster-role-binding.yaml

Menyediakan akses Namespace ke EMR Amazon pada layanan EKS

Buat dua ruang nama Kubernetes, satu untuk driver Pengguna dan pelaksana, dan satu lagi untuk driver & pelaksana Sistem, dan aktifkan Amazon EMR pada akses layanan EKS untuk mengirimkan Pekerjaan di Ruang Nama Pengguna dan Sistem. Ikuti panduan yang ada untuk menyediakan akses untuk setiap namespace, yang tersedia di Aktifkan akses cluster menggunakan. aws-auth

Langkah 3: Siapkan Peran IAM untuk komponen profil pengguna dan sistem

Ketiga, Anda mengatur peran untuk komponen tertentu. Spark Job yang mendukung Lake Formation memiliki dua komponen, User dan System. Driver Pengguna dan pelaksana berjalan di namespace Pengguna, dan terikat dengan yang diteruskan di JobExecutionRole API. StartJobRun Driver dan pelaksana Sistem berjalan di namespace Sistem, dan terikat pada peran. QueryEngine

Konfigurasikan peran Query Engine

QueryEngine Peran terkait dengan Komponen Ruang Sistem, dan akan memiliki izin untuk mengasumsikan tag JobExecutionRolewith LakeFormationAuthorizedCallerSession. Kebijakan Izin IAM untuk peran Mesin Kueri adalah sebagai berikut:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeJobRoleWithSessionTagAccessForSystemDriver", "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "arn:aws:iam::Account:role/JobExecutionRole", "Condition": { "StringLike": { "aws:RequestTag/LakeFormationAuthorizedCaller": "EMR on EKS Engine" } } }, { "Sid": "AssumeJobRoleWithSessionTagAccessForSystemExecutor", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::Account:role/JobExecutionRole", }, { "Sid": "CreateCertificateAccessForTLS", "Effect": "Allow", "Action": "emr-containers:CreateCertificate", "Resource": "*" } ] }

Konfigurasikan kebijakan Trust dari peran Query Engine untuk mempercayai namespace Sistem Kubernetes.

aws emr-containers update-role-trust-policy \ --cluster-name eks cluster \ --namespace eks system namespace \ --role-name query_engine_iam_role_name

Untuk informasi selengkapnya, lihat Memperbarui kebijakan kepercayaan peran.

Konfigurasikan Peran Eksekusi Job

Izin Lake Formation mengontrol akses ke sumber daya Katalog Data AWS Glue, lokasi Amazon S3, dan data dasar di lokasi tersebut. Izin IAM mengontrol akses ke Lake Formation dan AWS Glue APIs dan sumber daya. Meskipun Anda mungkin memiliki izin Lake Formation untuk mengakses tabel di Katalog Data (SELECT), operasi Anda gagal jika Anda tidak memiliki izin IAM pada operasi glue:Get* API.

Kebijakan Izin IAM dari JobExecutionRole: JobExecutionPeran harus memiliki Pernyataan Kebijakan dalam Kebijakan Izinnya.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": ["*"] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": ["*"] }, { "Sid": "CreateCertificateAccessForTLS", "Effect": "Allow", "Action": "emr-containers:CreateCertificate", "Resource": "*" } ] }

Kebijakan Kepercayaan IAM untuk JobExecutionRole:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TrustQueryEngineRoleForSystemDriver", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your_account:role/QueryExecutionRole" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Condition": { "StringLike": { "aws:RequestTag/LakeFormationAuthorizedCaller": "EMR on EKS Engine" } } }, { "Sid": "TrustQueryEngineRoleForSystemExecutor", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your_account:role/QueryEngineRole" }, "Action": "sts:AssumeRole" } ] }

Konfigurasikan Kebijakan Kepercayaan Peran eksekusi Job untuk mempercayai namespace pengguna Kubernetes:

aws emr-containers update-role-trust-policy \ --cluster-name eks cluster \ --namespace eks User namespace \ --role-name job_execution_role_name

Untuk informasi selengkapnya, lihat Memperbarui kebijakan kepercayaan peran pelaksanaan pekerjaan.

Langkah 4: Pengaturan konfigurasi keamanan

Untuk menjalankan pekerjaan yang mendukung Lake Formation, Anda harus membuat konfigurasi keamanan.

aws emr-containers create-security-configuration \ --name 'security-configuration-name' \ --security-configuration '{ "authorizationConfiguration": { "lakeFormationConfiguration": { "authorizedSessionTagValue": "SessionTag configured in LakeFormation", "secureNamespaceInfo": { "clusterId": "eks-cluster-name", "namespace": "system-namespace-name" }, "queryEngineRoleArn": "query-engine-IAM-role-ARN" } } }'

Pastikan bahwa Tag Sesi yang diteruskan di bidang authorizedSessionTagNilai dapat mengotorisasi Lake Formation. Tetapkan nilainya ke nilai yang dikonfigurasi di Lake Formation, diLangkah 1: Siapkan izin kolom, baris, atau tingkat sel berbasis Lake Formation.

Langkah 5: Buat cluster virtual

Buat EMR Amazon di kluster virtual EKS dengan konfigurasi keamanan.

aws emr-containers create-virtual-cluster \ --name my-lf-enabled-vc \ --container-provider '{ "id": "eks-cluster", "type": "EKS", "info": { "eksInfo": { "namespace": "user-namespace" } } }' \ --security-configuration-id SecurityConfiguraionId

Pastikan SecurityConfigurationId dari langkah sebelumnya diteruskan, sehingga konfigurasi otorisasi Lake Formation diterapkan ke semua Pekerjaan yang berjalan di cluster virtual. Untuk informasi selengkapnya, lihat Mendaftarkan klaster Amazon EKS dengan Amazon EMR.

Langkah 6: Kirim Job di FGAC Enabled VirtualCluster

Process for Job Submission sama untuk pekerjaan non Lake Formation dan Lake Formation. Untuk informasi selengkapnya, lihat Mengirimkan pekerjaan yang dijalankan dengan StartJobRun.

Spark Driver, Executor, dan Event Logs dari Driver Sistem disimpan di Bucket S3 Akun AWS Layanan untuk debugging. Sebaiknya konfigurasi Kunci KMS yang dikelola pelanggan di Job Run untuk mengenkripsi semua log yang disimpan dalam bucket layanan. AWS Untuk informasi selengkapnya tentang mengaktifkan enkripsi log, lihat Mengenkripsi EMR Amazon di log EKS.