

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

# Mengintegrasikan Amazon EMR dengan Apache Ranger
<a name="emr-ranger"></a>

Dimulai dengan Amazon EMR 5.32.0, Anda dapat meluncurkan sebuah klaster yang secara alami terintegrasi dengan Apache Ranger. Apache Ranger adalah kerangka kerja sumber terbuka untuk mengaktifkan, memantau, dan mengelola keamanan data komprehensif di seluruh platform Hadoop. Untuk informasi selengkapnya, lihat [Apache Ranger](https://ranger.apache.org/). Dengan integrasi alami, Anda dapat membawa Apache Ranger Anda sendiri untuk menegakkan kendali akses data lancar di Amazon EMR.

Bagian ini memberikan gambaran umum konseptual integrasi Amazon EMR dengan Apache Ranger. Hal ini juga mencakup prasyarat dan langkah-langkah yang diperlukan untuk meluncurkan klaster Amazon EMR yang terintegrasi dengan Apache Ranger.

Secara alami mengintegrasikan Amazon EMR dengan Apache Ranger memberikan manfaat kunci sebagai berikut: 
+ Kendali akses lancar ke basis data dan tabel Metastore Hive, yang mengizinkan Anda untuk menentukan kebijakan penyaringan data pada tingkat basis data, tabel, dan kolom untuk Apache Spark dan Apache Hive aplikasi. Penyaringan masking penyarignan dan data didukung dengan aplikasi Hive.
+ Kemampuan untuk menggunakan kebijakan Hive yang ada langsung dengan Amazon EMR untuk aplikasi Hive.
+ Kendali akses ke data Amazon S3 pada prefiks dan tingkat objek, yang mengizinkan Anda untuk menentukan kebijakan penyaringan data untuk akses ke data S3 menggunakan Sistem File EMR.
+ Kemampuan untuk menggunakan CloudWatch Log untuk audit terpusat.
+ Amazon EMR menginstal dan mengelola plugin Apache Ranger atas nama Anda.

# Apache Ranger dengan Amazon EMR
<a name="emr-ranger-overview"></a>

Apache Ranger adalah kerangka kerja untuk mengaktifkan, memantau, dan mengelola keamanan data yang komprehensif di seluruh platform Hadoop.

Apache Ranger memiliki fitur-fitur berikut:
+ Administrasi keamanan terpusat untuk mengelola semua tugas terkait keamanan di UI pusat atau menggunakan REST APIs.
+ Otorisasi lancar untuk melakukan tindakan atau operasi tertentu dengan komponen Hadoop atau alat, dikelola melalui alat administrasi pusat.
+ Sebuah metode otorisasi standar di semua komponen Hadoop.
+ Support yang disempurnakan untuk berbagai metode otorisasi.
+ Audit terpusat dari akses pengguna dan tindakan administratif (keamanan terkait) di semua komponen Hadoop.

Apache Ranger menggunakan dua komponen kunci untuk otorisasi: 
+ **Server admin kebijakan Apache Ranger** - Server ini mengizinkan Anda untuk menentukan kebijakan otorisasi untuk aplikasi Hadoop. [Saat mengintegrasikan dengan Amazon EMR, Anda dapat menentukan dan menegakkan kebijakan untuk Apache Spark dan Hive untuk mengakses Hive Metastore, dan mengakses Sistem File EMR data Amazon S3 (EMRFS).](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs) Anda dapat membuat pengaturan baru atau menggunakan server admin kebijakan Apache Ranger yang ada untuk mengintegrasikan dengan Amazon EMR.
+ **Plugin Apache Ranger** - Plugin ini memvalidasi akses pengguna terhadap kebijakan otorisasi yang didefinisikan di server admin kebijakan Apache Ranger. Amazon EMR menginstal dan mengonfigurasi plugin Apache Ranger secara otomatis untuk setiap aplikasi Hadoop yang dipilih di konfigurasi Apache Ranger. 

**Topics**
+ [Arsitektur integrasi Amazon EMR dengan Apache Ranger](emr-ranger-architecture.md)
+ [Komponen Amazon EMR untuk digunakan dengan Apache Ranger](emr-ranger-components.md)

# Arsitektur integrasi Amazon EMR dengan Apache Ranger
<a name="emr-ranger-architecture"></a>

![\[Diagram arsitektur Amazon EMR dan Apache Ranger.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/emr-ranger-architecture.png)


# Komponen Amazon EMR untuk digunakan dengan Apache Ranger
<a name="emr-ranger-components"></a>

Amazon EMR mengizinkan kendali akses lancar dengan Apache Ranger melalui komponen-komponen berikut. Lihat [Diagram arsitektur](emr-ranger-architecture.md) untuk representasi visual dari komponen Amazon EMR ini dengan plugin Apache Ranger.

**Agen rahasia** – Agen rahasia secara aman menyimpan rahasia dan mendistribusikan rahasia ke komponen Amazon EMR atau aplikasi lain. Rahasia dapat mencakup kredensial pengguna sementara, kunci enkripsi, atau tiket Kerberos. Agen rahasia berjalan pada setiap simpul di klaster dan mencegat panggilan ke Layanan Metadata Instans. Untuk permintaan ke kredensial peran profil instans, Agen Rahasia menyediakan kredensialnya tergantung pada pengguna yang meminta dan sumber daya yang diminta setelah mengotorisasi permintaan dengan plugin Ranger S3 EMRFS. Agen rahasia berjalan sebagai *`emrsecretagent`*pengguna, dan menulis log ke emr/secretagent/log direktori/. Proses ini bergantung pada satu set aturan `iptables` tertentu untuk berfungsi. Penting untuk memastikan bahwa `iptables` tidak dinonaktifkan. Jika Anda menyesuaikan konfigurasi `iptables`, aturan tabel NAT harus dipertahankan dan dibiarkan tidak berubah.

**Server catatan EMR** – Server catatan menerima permintaan untuk mengakses data dari Spark. Kemudian mengotorisasi permintaan dengan meneruskan sumber daya yang diminta ke plugin Spark Ranger untuk Amazon EMR. Catatan server membaca data dari Amazon S3 dan mengembalikan data tingkat kolom bahwa pengguna diotorisasi untuk mengakses berdasarkan kebijakan Ranger. Server rekaman berjalan pada setiap node dalam cluster sebagai pengguna emr\$1record\$1server dan menulis log ke direktori/-record-server. var/log/emr

# Pertimbangan untuk menggunakan Amazon EMR dengan Apache Ranger
<a name="emr-ranger-app-support"></a>

## Aplikasi yang didukung untuk Amazon EMR dengan Apache Ranger
<a name="emr-ranger-app-support-list"></a>

Integrasi antara Amazon EMR dan Apache Ranger di mana EMR menginstal plugin Ranger saat ini mendukung aplikasi berikut:
+ Apache Spark (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Apache Hive (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Akses S3 melalui EMRFS (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)

Aplikasi berikut dapat diinstal pada klaster EMR dan mungkin perlu dikonfigurasi untuk memenuhi kebutuhan keamanan Anda:
+ Apache Hadoop (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1 termasuk YARN dan HDFS)
+ Apache Livy (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Apache Zeppelin (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Apache Hue (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Ganglia (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ HCatalog (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Mahout (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ MXNet (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ TensorFlow (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Tez (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)
+ Trino (Tersedia dengan EMR 6.7\$1)
+ ZooKeeper (Tersedia dengan EMR 5.32\$1 dan EMR 6.3\$1)

**penting**  
Aplikasi yang tercantum di atas adalah satu-satunya aplikasi yang saat ini didukung. Untuk memastikan keamanan klaster, Anda diperbolehkan untuk membuat klaster EMR dengan hanya aplikasi di daftar di atas ketika Apache Ranger diaktifkan.  
Aplikasi lain saat ini tidak didukung. Untuk memastikan keamanan klaster Anda, mencoba menginstal aplikasi lain akan menyebabkan penolakan klaster Anda.  
AWS Glue Data Catalog dan format Open table seperti Apache Hudi, Delta Lake, dan Apache Iceberg tidak didukung.

**Fitur Amazon EMR yang didukung dengan Apache Ranger**  
Fitur Amazon EMR berikut didukung saat Anda menggunakan Amazon EMR dengan Apache Ranger:
+ Enkripsi saat istirahat dan dalam transit
+ Autentikasi Kerberos (diperlukan)
+ Grup klaster, armada instans, dan instans Spot
+ Konfigurasi ulang aplikasi pada klaster berjalan
+ Server-side encryption (SSE) EMRFS

**catatan**  
Pengaturan enkripsi Amazon EMR mengatur SSE. Untuk informasi selengkapnya, lihat [Opsi Enkripsi](emr-data-encryption-options.md).

## Batasan aplikasi
<a name="emr-ranger-app-support-limitations"></a>

Ada beberapa keterbatasan yang perlu diingat ketika Anda mengintegrasikan Amazon EMR dan Apache Ranger:
+ Saat ini Anda tidak dapat menggunakan konsol untuk membuat konfigurasi keamanan yang menentukan opsi integrasi AWS Ranger di. AWS GovCloud (US) Region Konfigurasi keamanan dapat dilakukan dengan menggunakan CLI.
+ Kerberos harus diinstal pada klaster Anda.
+ Aplikasi UIs (antarmuka pengguna) seperti UI Manajer Sumber Daya YARN, UI HDFS, dan Livy NameNode UI tidak disetel dengan otentikasi secara default.
+ Izin HDFS default `umask` dikonfigurasi sehingga objek yang dibuat diatur ke `world wide readable` secara default.
+ Amazon EMR tidak mendukung mode ketersediaan tinggi (beberapa primer) dengan Apache Ranger.
+ Untuk batasan tambahan, lihat batasan untuk setiap aplikasi.

**catatan**  
Pengaturan enkripsi Amazon EMR mengatur SSE. Untuk informasi selengkapnya, lihat [Opsi Enkripsi](emr-data-encryption-options.md).

## Batasan plugin
<a name="plugin-limitations"></a>

Setiap plugin memiliki batasan khusus. Untuk batasan plugin Apache Hive, lihat Batasan plugin [Apache Hive](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ranger-hive.html#emr-ranger-hive-limitations). Untuk batasan plugin Apache Spark, lihat Batasan plugin [Apache Spark](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ranger-spark.html#emr-ranger-spark-limitations). Untuk batasan plugin EMRFS S3, lihat batasan plugin [EMRFS](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ranger-emrfs.html#emr-ranger-emrfs-limitations) S3.

# Atur Amazon EMR untuk Apache Ranger
<a name="emr-ranger-begin"></a>

Sebelum Anda menginstal Apache Ranger, tinjau informasi di bagian ini untuk memastikan bahwa Amazon EMR dikonfigurasi dengan benar.

**Topics**
+ [Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md)
+ [IAM role untuk integrasi alami dengan Apache Ranger](emr-ranger-iam.md)
+ [Buat konfigurasi keamanan EMR](emr-ranger-security-config.md)
+ [Simpan sertifikat TLS di AWS Secrets Manager](emr-ranger-tls-certificates.md)
+ [Mulai cluster EMR dengan Apache Ranger](emr-ranger-start-emr-cluster.md)
+ [Konfigurasikan Zeppelin untuk kluster EMR Amazon yang mendukung Apache Ranger](emr-ranger-configure-zeppelin.md)
+ [Masalah yang diketahui untuk integrasi EMR Amazon](emr-ranger-security-considerations.md)

# Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR
<a name="emr-ranger-admin"></a>

Untuk integrasi Amazon EMR, plugin aplikasi Apache Ranger harus berkomunikasi dengan server Admin menggunakan TLS/SSL.

**Prasyarat: Pengaktifan SSL Server Admin Ranger**

Apache Ranger di Amazon EMR membutuhkan komunikasi SSL dua arah antara plugin dan server Admin Ranger. Untuk memastikan bahwa plugin berkomunikasi dengan server Apache Ranger melalui SSL, aktifkan atribut berikut ranger-admin-site dalam.xml. pada server Admin Ranger.

```
<property>
    <name>ranger.service.https.attrib.ssl.enabled</name>
    <value>true</value>
</property>
```

Selain itu, konfigurasi berikut diperlukan.

```
<property>
    <name>ranger.https.attrib.keystore.file</name>
    <value>_<PATH_TO_KEYSTORE>_</value>
</property>

<property>
    <name>ranger.service.https.attrib.keystore.file</name>
    <value>_<PATH_TO_KEYSTORE>_</value>
</property>

<property>
    <name>ranger.service.https.attrib.keystore.pass</name>
    <value>_<KEYSTORE_PASSWORD>_</value>
</property>

<property>
    <name>ranger.service.https.attrib.keystore.keyalias</name>
    <value><PRIVATE_CERTIFICATE_KEY_ALIAS></value>
</property>

<property>
    <name>ranger.service.https.attrib.clientAuth</name>
    <value>want</value>
</property>

<property>
    <name>ranger.service.https.port</name>
    <value>6182</value>
</property>
```

# Sertifikat TLS untuk integrasi Apache Ranger dengan Amazon EMR
<a name="emr-ranger-admin-tls"></a>

Integrasi Apache Ranger dengan Amazon EMR mengharuskan lalu lintas dari simpul Amazon EMR ke server Admin Ranger dienkripsi menggunakan TLS, dan bahwa Plugin Ranger mengautentikasi ke server Apache Ranger menggunakan dua arah autentikasi TLS. Layanan Amazon EMR membutuhkan sertifikat publik dari server Admin Ranger Anda (ditentukan di contoh sebelumnya) dan sertifikat privat.

**Sertifikat plugin Apache Ranger**

Sertifikat TLS publik plugin Apache Ranger harus dapat diakses ke server Admin Apache Ranger untuk memvalidasi ketika plugin connect. Ada tiga metode berbeda untuk melakukan hal ini.

**Metode 1: Konfigurasikan truststore di server Admin Apache Ranger**

Isi konfigurasi berikut ranger-admin-site di.xml. untuk mengkonfigurasi truststore.

```
<property>
    <name>ranger.truststore.file</name>
    <value><LOCATION TO TRUSTSTORE></value>
</property>

<property>
    <name>ranger.truststore.password</name>
    <value><PASSWORD FOR TRUSTSTORE></value>
</property>
```

**Metode 2: Muat sertifikat ke Java cacerts truststore**

Jika server Admin Ranger Anda tidak menentukan truststore di pilihan JVM, maka Anda dapat menempatkan sertifikat publik plugin di penyimpanan cacerts default.

**Metode 3: Buat truststore dan tentukan sebagai bagian dari JVM Options**

Di `{RANGER_HOME_DIRECTORY}/ews/ranger-admin-services.sh`, modifikasi `JAVA_OPTS` termasuk `"-Djavax.net.ssl.trustStore=<TRUSTSTORE_LOCATION>"` dan `"-Djavax.net.ssl.trustStorePassword=<TRUSTSTORE_PASSWORD>"`. Misalnya, menambahkan baris berikut setelah JAVA\$1OPTS yang ada.

```
JAVA_OPTS=" ${JAVA_OPTS} -Djavax.net.ssl.trustStore=${RANGER_HOME}/truststore/truststore.jck -Djavax.net.ssl.trustStorePassword=changeit"
```

**catatan**  
Spesifikasi ini dapat mengekspos kata sandi truststore jika setiap pengguna dapat masuk ke server Admin Apache Ranger dan melihat proses yang berjalan, seperti ketika menggunakan perintah `ps`.

**Menggunakan Sertifikat Self-Signed**

Sertifikat bertandatangan sendiri tidak direkomendasikan sebagai sertifikat. Sertifikat yang bertandatangan sendiri mungkin tidak dicabut, dan sertifikat yang bertandatangan sendiri mungkin tidak sesuai dengan persyaratan keamanan internal.

# Instalasi definisi layanan untuk integrasi Ranger dengan Amazon EMR
<a name="emr-ranger-admin-servicedef-install"></a>

Definisi layanan yang digunakan oleh server Admin Ranger untuk mengcitrakan atribut kebijakan untuk aplikasi. Kebijakan tersebut kemudian disimpan di repositori kebijakan bagi klien untuk mengunduh. 

Untuk dapat mengonfigurasi definisi layanan, panggilan REST harus dibuat ke server Admin Ranger. Lihat [Apache Ranger Public APIsv2](https://ranger.apache.org/apidocs/resource_PublicAPIsv2.html#resource_PublicAPIsv2_createServiceDef_POST) untuk APIs keperluan di bagian berikut.

**Menginstal Definisi Layanan Apache Spark**

Untuk menginstal Definisi Layanan Apache Spark, lihat [Plugin Apache Spark untuk integrasi Ranger dengan Amazon EMR](emr-ranger-spark.md).

**Menginstal Definisi Layanan EMRFS**

Untuk menginstal definisi layanan S3 untuk Amazon EMR, lihat [Plugin EMRFS S3 untuk integrasi Ranger dengan Amazon EMR](emr-ranger-emrfs.md).

**Menggunakan Definisi Layanan Hive**

Apache Hive dapat menggunakan definisi layanan Ranger yang dikirim dengan Apache Ranger 2.0 dan versi terbaru. Untuk informasi selengkapnya, lihat [Plugin Apache Hive untuk integrasi Ranger dengan Amazon EMR](emr-ranger-hive.md).

# Aturan lalu lintas jaringan untuk mengintegrasikan dengan Amazon EMR
<a name="emr-ranger-network"></a>

Ketika Apache Ranger terintegrasi dengan klaster EMR Anda, klaster perlu berkomunikasi dengan server tambahan dan AWS.

Semua simpul Amazon EMR, termasuk simpul inti dan simpul tugas, harus mampu berkomunikasi dengan server Admin Apache Ranger untuk mengunduh kebijakan. Jika Admin Apache Ranger berjalan di Amazon EC2, Anda perlu memperbarui grup keamanan untuk dapat mengambil lalu lintas dari klaster EMR.

Selain berkomunikasi dengan server Admin Ranger, semua node harus dapat berkomunikasi dengan layanan berikut: AWS 
+ Amazon S3
+ AWS KMS (jika menggunakan EMRFS SSE-KMS)
+ Amazon CloudWatch
+ AWS STS

Jika Anda berencana untuk menjalankan klaster EMR Anda di subnet privat, konfigurasi VPC untuk dapat berkomunikasi dengan layanan ini menggunakan [AWS PrivateLink dan VPC endpoint](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html) di *Panduan Pengguna Amazon VPC* atau menggunakan [instans terjemahan alamat instans (NAT)](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html) di *Panduan Pengguna Amazon VPC*.

# IAM role untuk integrasi alami dengan Apache Ranger
<a name="emr-ranger-iam"></a>

Integrasi antara Amazon EMR dan Apache Ranger bergantung pada tiga peran kunci yang harus Anda buat sebelum Anda meluncurkan klaster Anda:
+ Profil instans Amazon EC2 kustom untuk Amazon EMR
+ IAM role untuk Mesin Apache Ranger
+ Peran IAM untuk layanan lain AWS 

Bagian ini memberikan gambaran umum peran ini dan kebijakan yang perlu Anda sertakan untuk setiap IAM role. Untuk informasi tentang membuat peran, lihat [Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md).

# Profil instans EC2 untuk Amazon EMR
<a name="emr-ranger-iam-ec2"></a>

Amazon EMR menggunakan peran layanan IAM untuk melakukan tindakan atas nama Anda untuk menyediakan dan mengelola klaster. Peran layanan untuk instans EC2 klaster, juga disebut profil instans EC2 untuk Amazon EMR, adalah tipe khusus dari peran layanan yang ditugaskan untuk setiap instans EC2 di sebuah klaster pada peluncuran.

Untuk menentukan izin interaksi klaster EMR dengan data Amazon S3 dan metastore Hive yang dilindungi oleh Apache Ranger dan layanan AWS lainnya, tentukan profil instans EC2 kustom yang akan digunakan, bukan saat Anda meluncurkan klaster. `EMR_EC2_DefaultRole`

Untuk informasi selengkapnya, lihat [Peran layanan untuk instans EC2 klaster (profil instans EC2)](emr-iam-role-for-ec2.md) dan [Sesuaikan peran IAM dengan Amazon EMR](emr-iam-roles-custom.md).

Anda perlu menambahkan pernyataan berikut ke Profil Instans EC2 default untuk Amazon EMR agar dapat menandai sesi dan mengakses yang menyimpan sertifikat AWS Secrets Manager TLS.

```
    {
      "Sid": "AllowAssumeOfRolesAndTagging",
      "Effect": "Allow",
      "Action": ["sts:TagSession", "sts:AssumeRole"],
      "Resource": [
        "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<RANGER_ENGINE-PLUGIN_DATA_ACCESS_ROLE_NAME>",
        "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<RANGER_USER_ACCESS_ROLE_NAME>"
      ]
    },
    {
        "Sid": "AllowSecretsRetrieval",
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": [
            "arn:aws:secretsmanager:<REGION>:<AWS_ACCOUNT_ID>:secret:<PLUGIN_TLS_SECRET_NAME>*",
            "arn:aws:secretsmanager:<REGION>:<AWS_ACCOUNT_ID>:secret:<ADMIN_RANGER_SERVER_TLS_SECRET_NAME>*"
        ]
    }
```

**catatan**  
Untuk izin Secrets Manager, jangan lupa wildcard ("\$1") di akhir nama rahasia atau permintaan Anda akan gagal. Wildcard adalah untuk versi rahasia.

**catatan**  
Batasi ruang lingkup AWS Secrets Manager kebijakan hanya untuk sertifikat yang diperlukan untuk penyediaan.

# IAM role untuk Apache Ranger
<a name="emr-ranger-iam-ranger"></a>

Peran ini memberikan kredensyal untuk mesin eksekusi tepercaya, seperti Apache Hive dan Amazon EMR Record Server untuk mengakses data Amazon S3. Gunakan hanya peran ini untuk mengakses data Amazon S3, termasuk kunci KMS, jika Anda menggunakan SSE-KMS S3.

Peran ini harus dibuat dengan kebijakan minimum yang dinyatakan di contoh berikut.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CloudwatchLogsPermissions",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:logs:*:123456789012:log-group:CLOUDWATCH_LOG_GROUP_NAME_IN_SECURITY_CONFIGURATION:*"
      ]
    },
    {
      "Sid": "BucketPermissionsInS3Buckets",
      "Action": [
        "s3:CreateBucket",
        "s3:DeleteBucket",
        "s3:ListAllMyBuckets",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
        "arn:aws:s3:::amzn-s3-demo-bucket2"
      ]
    },
    {
      "Sid": "ObjectPermissionsInS3Objects",
      "Action": [
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1/*",
        "arn:aws:s3:::amzn-s3-demo-bucket2/*"
      ]
    }
  ]
}
```

------

**penting**  
Tanda bintang “\$1” di akhir Sumber Daya CloudWatch Log harus disertakan untuk memberikan izin menulis ke aliran log.

**catatan**  
Jika Anda menggunakan tampilan konsistensi EMRFS atau enkripsi S3-SSE, Anda perlu menambahkan izin ke tabel DynamoDB dan kunci KMS sehingga mesin eksekusi dapat berinteraksi dengan mesin tersebut.

IAM role untuk Apache Ranger diasumsikan oleh Peran Profil Instans EC2. Gunakan contoh berikut untuk membuat kebijakan kepercayaan yang mengizinkan IAM role untuk Apache Ranger diasumsikan oleh peran profil instans EC2.

```
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<EC2 INSTANCE PROFILE ROLE NAME eg. EMR_EC2_DefaultRole>"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
```

# Peran IAM untuk AWS layanan lain untuk integrasi Amazon EMR
<a name="emr-ranger-iam-other-AWS"></a>

Peran ini memberi pengguna yang bukan mesin eksekusi tepercaya kredensyal untuk berinteraksi dengan AWS layanan, jika diperlukan. Jangan gunakan IAM role ini untuk mengizinkan akses ke data Amazon S3, kecuali itu adalah data yang harus dapat diakses oleh semua pengguna.

Peran ini akan diasumsikan oleh Peran Profil Instans EC2. Gunakan contoh berikut untuk membuat kebijakan kepercayaan yang mengizinkan IAM role untuk Apache Ranger diasumsikan oleh peran profil instans EC2.

```
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<EC2 INSTANCE PROFILE ROLE NAME eg. EMR_EC2_DefaultRole>"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
```

# Validasi izin Anda untuk integrasi Amazon EMR dengan Apache Ranger
<a name="emr-ranger-iam-validate"></a>

Lihat [Penyelesaian masalah Apache Ranger](emr-ranger-troubleshooting.md) untuk petunjuk tentang memvalidasi izin.

# Buat konfigurasi keamanan EMR
<a name="emr-ranger-security-config"></a>

**Membuat Konfigurasi Keamanan EMR Amazon untuk Apache Ranger**

Sebelum Anda meluncurkan kluster EMR Amazon yang terintegrasi dengan Apache Ranger, buat konfigurasi keamanan.

------
#### [ Console ]

**Untuk membuat konfigurasi keamanan yang menentukan opsi integrasi AWS Ranger**

1. Di konsol Amazon EMR, pilih **Konfigurasi keamanan**, kemudian **Buat**.

1. Ketik **Nama** untuk konfigurasi keamanan. Anda menggunakan nama ini untuk menentukan konfigurasi keamanan ketika Anda membuat sebuah klaster.

1. Di bawah **AWS Integrasi Ranger**, memilih **Aktifkan kendali akses lancar yang dikelola oleh Apache Ranger**.

1. Pilih **IAM role untuk Apache Ranger** untuk diterapkan. Untuk informasi selengkapnya, lihat [IAM role untuk integrasi alami dengan Apache Ranger](emr-ranger-iam.md).

1. Pilih **IAM role Anda untuk layanan AWS lain** untuk diterapkan.

1. Konfigurasikan plugin untuk terhubung ke server Admin Ranger dengan memasukkan Secrets Manager ARN untuk server Admin dan alamatnya.

1. Pilih aplikasi untuk mengkonfigurasi plugin Ranger. Masukkan Secrets Manager ARN yang berisi sertifikat TLS pribadi untuk plugin.

   Jika Anda tidak mengonfigurasi Apache Spark atau Apache Hive, dan mereka dipilih sebagai aplikasi untuk klaster Anda, permintaan gagal.

1. Mengatur opsi konfigurasi keamanan lain yang sesuai dan memilih **Buat**. Anda harus mengaktifkan autentikasi Kerberos menggunakan klaster khusus atau eksternal KDC.

**catatan**  
Saat ini Anda tidak dapat menggunakan konsol untuk membuat konfigurasi keamanan yang menentukan opsi integrasi AWS Ranger di. AWS GovCloud (US) Region Konfigurasi keamanan dapat dilakukan dengan menggunakan CLI.

------
#### [ CLI ]

**Untuk membuat konfigurasi keamanan untuk integrasi Apache Ranger**

1. Ganti `<ACCOUNT ID>` dengan ID AWS akun Anda.

1. Ganti `<REGION>` dengan Wilayah tempat sumber daya berada.

1. Tentukan nilai untuk `TicketLifetimeInHours` dalam menentukan periode untuk tiket Kerberos valid yang dikeluarkan oleh KDC.

1. Tentukan alamat pelayan Admin Ranger untuk `AdminServerURL`.

```
{
    "AuthenticationConfiguration": {
        "KerberosConfiguration": {
            "Provider": "ClusterDedicatedKdc",
            "ClusterDedicatedKdcConfiguration": {
                "TicketLifetimeInHours": 24
            }
        }
    },
    "AuthorizationConfiguration":{
      "RangerConfiguration":{
         "AdminServerURL":"https://_<RANGER ADMIN SERVER IP>_:6182",
         "RoleForRangerPluginsARN":"arn:aws:iam::_<ACCOUNT ID>_:role/_<RANGER PLUGIN DATA ACCESS ROLE NAME>_",
         "RoleForOtherAWSServicesARN":"arn:aws:iam::_<ACCOUNT ID>_:role/_<USER ACCESS ROLE NAME>_",
         "AdminServerSecretARN":"arn:aws:secretsmanager:_<REGION>_:_<ACCOUNT ID>_:secret:_<SECRET NAME THAT PROVIDES ADMIN SERVERS PUBLIC TLS CERTIFICATE WITHOUT VERSION>_",
         "RangerPluginConfigurations":[
            {
               "App":"Spark",
               "ClientSecretARN":"arn:aws:secretsmanager:_<REGION>_:_<ACCOUNT ID>_:secret:_<SECRET NAME THAT PROVIDES SPARK PLUGIN PRIVATE TLS CERTIFICATE WITHOUT VERSION>_",
               "PolicyRepositoryName":"<SPARK SERVICE NAME eg. amazon-emr-spark>"
            },
            {
               "App":"Hive",
               "ClientSecretARN":"arn:aws:secretsmanager:_<REGION>_:_<ACCOUNT ID>_:secret:_<SECRET NAME THAT PROVIDES Hive PLUGIN PRIVATE TLS CERTIFICATE WITHOUT VERSION>_",
               "PolicyRepositoryName":"<HIVE SERVICE NAME eg. Hivedev>"
            },
            {
               "App":"EMRFS-S3",
               "ClientSecretARN":"arn:aws:secretsmanager:_<REGION>_:_<ACCOUNT ID>_:secret:_<SECRET NAME THAT PROVIDES EMRFS S3 PLUGIN PRIVATE TLS CERTIFICATE WITHOUT VERSION>_",
               "PolicyRepositoryName":"<EMRFS S3 SERVICE NAME eg amazon-emr-emrfs>"
            }, 
	      {
               "App":"Trino",
               "ClientSecretARN":"arn:aws:secretsmanager:_<REGION>_:_<ACCOUNT ID>_:secret:_<SECRET NAME THAT PROVIDES TRINO PLUGIN PRIVATE TLS CERTIFICATE WITHOUT VERSION>_",
               "PolicyRepositoryName":"<TRINO SERVICE NAME eg amazon-emr-trino>"
            }
         ],
         "AuditConfiguration":{
            "Destinations":{
               "AmazonCloudWatchLogs":{
                  "CloudWatchLogGroup":"arn:aws:logs:<REGION>:_<ACCOUNT ID>_:log-group:_<LOG GROUP NAME FOR AUDIT EVENTS>_"
               }
            }
         }
      }
   }
}
```

Itu PolicyRespositoryNames adalah nama layanan yang ditentukan dalam Admin Apache Ranger Anda.

Buat konfigurasi keamanan Amazon EMR dengan perintah berikut. Ganti konfigurasi keamanan dengan nama pilihan Anda. Memilih konfigurasi ini dengan nama ketika Anda membuat klaster Anda.

```
aws emr create-security-configuration \
--security-configuration file://./security-configuration.json \
--name security-configuration
```

------

**Konfigurasikan Fitur Keamanan Tambahan**

Untuk mengintegrasikan Amazon EMR dengan Apache Ranger, Anda juga harus mengonfigurasi fitur keamanan EMR berikut:
+ Mengaktifkan autentikasi Kerberos menggunakan klaster khusus atau eksternal KDC. Untuk instruksi, lihat [Gunakan Kerberos untuk otentikasi dengan Amazon EMR](emr-kerberos.md).
+ (Opsional) Aktifkan enkripsi dalam transit atau saat istirahat. Untuk informasi selengkapnya, lihat [Opsi enkripsi untuk Amazon EMR](emr-data-encryption-options.md).

Untuk informasi selengkapnya, lihat [Keamanan di Amazon EMR](emr-security.md).

# Simpan sertifikat TLS di AWS Secrets Manager
<a name="emr-ranger-tls-certificates"></a>

Plugin Ranger diinstal pada klaster Amazon EMR dan server Admin Ranger harus berkomunikasi melalui TLS untuk memastikan bahwa data kebijakan dan informasi lain yang dikirim tidak dapat dibaca jika mereka dicegat. EMR juga memberi mandat bahwa plugin mengautentikasi ke server Admin Ranger dengan menyediakan sertifikat TLS sendiri dan melakukan autentikasi TLS dua arah. Penataan ini memerlukan empat sertifikat yang akan dibuat: dua instal sertifikat TLS privat dan publik. Untuk petunjuk tentang menginstal sertifikat ke server Admin Ranger Anda, lihat [Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md). Untuk menyelesaikan penataan, plugin Ranger diinstal pada klaster EMR yang memerlukan dua sertifikat: sertifikat TLS publik dari server admin Anda, dan sertifikat privat yang akan digunakan plugin untuk mengautentikasi terhadap server Admin Ranger. Untuk memberikan sertifikat TLS ini, mereka harus dalam AWS Secrets Manager dan disediakan dalam Konfigurasi Keamanan EMR.

**catatan**  
Sangat direkomendasikan, tetapi tidak diperlukan, untuk membuat instalan sertifikat untuk setiap aplikasi Anda untuk membatasi dampak jika salah satu sertifikat plugin menjadi terganggu.

**catatan**  
Anda harus melacak dan memutar sertifikat sebelum tanggal kedaluwarsa mereka. 

## Format Sertifikat
<a name="emr-ranger-tls-cert-format"></a>

Mengimpor sertifikat ke AWS Secrets Manager adalah sama terlepas dari apakah itu sertifikat plugin pribadi atau sertifikat admin Ranger publik. Sebelum mengimpor sertifikat TLS, sertifikat harus dalam format PEM 509x.

Contoh sertifikat publik dalam format:

```
-----BEGIN CERTIFICATE-----
...Certificate Body...
-----END CERTIFICATE-----
```

Contoh sertifikat privat dalam format:

```
-----BEGIN PRIVATE KEY-----
...Private Certificate Body...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...Trust Certificate Body...
-----END CERTIFICATE-----
```

Sertifikat privat juga harus berisi sertifikat kepercayaan juga.

Anda dapat memvalidasi sertifikat dalam format yang benar dengan menjalankan perintah berikut:

```
openssl x509 -in <PEM FILE> -text
```

## Mengimpor sertifikat ke AWS Secrets Manager
<a name="emr-ranger-tls-cert-import"></a>

****Saat membuat Secret Anda di Secrets Manager, pilih Jenis rahasia **lain di bawah tipe rahasia** dan tempel sertifikat yang dikodekan PEM Anda di bidang Plaintext.****

![\[Mengimpor sertifikat ke AWS Secrets Manager.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-tls-cert-import.png)


# Mulai cluster EMR dengan Apache Ranger
<a name="emr-ranger-start-emr-cluster"></a>

Sebelum meluncurkan klaster EMR Amazon dengan Apache Ranger, pastikan setiap komponen memenuhi persyaratan versi minimum berikut:
+ Amazon EMR 5.32.0 atau yang lebih baru, atau 6.3.0 atau yang lebih baru. Kami menyarankan Anda menggunakan versi rilis Amazon EMR terbaru.
+ Server Admin Apache Ranger 2.x.

Selesaikan langkah-langkah berikut:
+ Instal Apache Ranger jika belum. Untuk informasi selengkapnya, lihat [instalasi Apache Ranger 0.5.0](https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.5.0+Installation).
+ Pastikan ada konektivitas jaringan antara klaster Amazon EMR dan server Admin Apache Ranger. Lihat [Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md)
+ Buat IAM role yang diperlukan. Lihat [IAM role untuk integrasi alami dengan Apache Ranger](emr-ranger-iam.md).
+ Buat konfigurasi keamanan EMR untuk instalasi Apache Ranger. Untuk informasi lebih lanjut, lihat [Buat konfigurasi keamanan EMR](emr-ranger-security-config.md).

# Konfigurasikan Zeppelin untuk kluster EMR Amazon yang mendukung Apache Ranger
<a name="emr-ranger-configure-zeppelin"></a>

Topiknya mencakup cara mengonfigurasi [Apache Zeppelin](https://zeppelin.apache.org/) untuk kluster EMR Amazon yang mendukung Apache Ranger sehingga Anda dapat menggunakan Zeppelin sebagai buku catatan untuk eksplorasi data interaktif. Zeppelin disertakan dalam versi rilis Amazon EMR 5.0.0 dan yang lebih baru. Versi rilis sebelumnya termasuk Zeppelin sebagai suatu aplikasi sandbox. Untuk informasi selengkapnya, lihat [Versi Amazon EMR rilis 4.x](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-4x.html) di *Panduan Amazon EMR Rilis*.

Secara default, Zeppelin dikonfigurasi dengan login dan kata sandi default yang tidak aman di lingkungan multi-penyewa.

Untuk mengkonfigurasi Zeppelin, selesaikan langkah-langkah berikut.

1. **Ubah mekanisme otentikasi**. 

   Ubah `shiro.ini` file untuk mengimplementasikan mekanisme otentikasi pilihan Anda. Zeppelin mendukung Direktori Aktif, LDAP, PAM, dan Knox SSO. Lihat [autentikasi Apache Shiro untuk Apache Zeppelin](https://zeppelin.apache.org/docs/0.8.2/setup/security/shiro_authentication.html) untuk informasi selengkapnya.

1. **Konfigurasikan Zeppelin untuk meniru pengguna akhir**

   Ketika Anda mengizinkan Zeppelin untuk meniru pengguna akhir, pekerjaan yang dikirimkan oleh Zeppelin dapat dijalankan sebagai pengguna akhir tersebut. Tambahkan konfigurasi berikut ke`core-site.xml`:

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "hadoop.proxyuser.zeppelin.hosts": "*",
         "hadoop.proxyuser.zeppelin.groups": "*"
       },
       "Configurations": [
       ]
     }
   ]
   ```

   Selanjutnya, tambahkan konfigurasi berikut ke `hadoop-kms-site.xml` lokasi di`/etc/hadoop/conf`:

   ```
   [
     {
       "Classification": "hadoop-kms-site",
       "Properties": {
         "hadoop.kms.proxyuser.zeppelin.hosts": "*",
         "hadoop.kms.proxyuser.zeppelin.groups": "*"
       },
       "Configurations": [
       ]
     }
   ]
   ```

   Anda juga dapat menambahkan konfigurasi ini ke klaster EMR Amazon menggunakan konsol dengan mengikuti langkah-langkah [dalam Mengkonfigurasi ulang grup instans](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html#emr-configure-apps-running-cluster-console) di konsol.

1. **Izinkan Zeppelin ke sudo sebagai pengguna akhir**

   Buat file `/etc/sudoers.d/90-zeppelin-user` yang berisi berikut ini:

   ```
   zeppelin ALL=(ALL) NOPASSWD:ALL
   ```

1. **Ubah pengaturan interpreter untuk menjalankan tugas pengguna di proses mereka sendiri**.

   Untuk semua penerjemah, konfigurasikan mereka untuk membuat instance penerjemah “Per Pengguna” dalam proses “terisolasi”.  
![\[Diagram arsitektur Amazon EMR dan Apache Ranger.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/per_user.png)

1. **Memodifikasi `zeppelin-env.sh`**

   Tambahkan yang berikut ini `zeppelin-env.sh` agar Zeppelin mulai meluncurkan interpreter sebagai pengguna akhir:

   ```
   ZEPPELIN_IMPERSONATE_USER=`echo ${ZEPPELIN_IMPERSONATE_USER} | cut -d @ -f1`
   export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c'
   ```

   Tambahkan yang berikut ini `zeppelin-env.sh` untuk mengubah izin buku catatan default menjadi hanya-baca ke pembuat saja:

   ```
   export ZEPPELIN_NOTEBOOK_PUBLIC="false"
   ```

   Akhirnya, tambahkan berikut ini `zeppelin-env.sh` untuk menyertakan jalur RecordServer kelas EMR setelah pernyataan pertama`CLASSPATH`:

   ```
   export CLASSPATH="$CLASSPATH:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-connector-common.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-spark-connector.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-client.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-common.jar:/usr/share/aws/emr/record-server/lib/jars/secret-agent-interface.jar"
   ```

1. **Mulai Ulang Zeppelin.**

   Jalankan perintah berikut untuk me-restart Zeppelin:

   ```
   sudo systemctl restart zeppelin
   ```

# Masalah yang diketahui untuk integrasi EMR Amazon
<a name="emr-ranger-security-considerations"></a>

**Masalah yang Diketahui**

Ada masalah yang diketahui dalam Amazon EMR rilis 5.32 di mana izin untuk `hive-site.xml` diubah sehingga hanya pengguna istimewa yang dapat membacanya karena mungkin ada kredensyal yang disimpan di dalamnya. Ini dapat mencegah Hue membaca `hive-site.xml` dan menyebabkan halaman web terus dimuat ulang. Jika Anda mengalami masalah ini, Anda harus menambahkan konfigurasi berikut untuk memperbaiki masalah:

```
[
  {
    "Classification": "hue-ini",
    "Properties": {},
    "Configurations": [
      {
        "Classification": "desktop",
        "Properties": {
          "server_group":"hive_site_reader"
         },
        "Configurations":[
        ]
      }
    ]
  }
]
```

Ada masalah yang diketahui bahwa plugin EMRFS S3 untuk Apache Ranger saat ini tidak mendukung fitur Zona Keamanan Apache Ranger. Pembatasan kontrol akses yang ditentukan menggunakan fitur Zona Keamanan tidak diterapkan pada kluster EMR Amazon Anda.

**Aplikasi UIs**

Secara default, Aplikasi UI tidak melakukan autentikasi. Ini termasuk ResourceManager UI, NodeManager UI, Livy UI, dan lainnya. Selain itu, setiap pengguna yang memiliki kemampuan untuk mengakses dapat melihat informasi tentang semua pekerjaan pengguna lain. UIs 

Jika perilaku ini tidak diinginkan, Anda harus memastikan bahwa grup keamanan digunakan untuk membatasi akses ke aplikasi UIs oleh pengguna.

**Izin Default HDFS**

Secara default, objek yang dibuat pengguna di HDFS diberikan izin baca dunia. Hal ini dapat berpotensi menyebabkan data yang dapat dibaca oleh pengguna yang seharusnya tidak memiliki akses ke sana. Untuk mengubah perilaku ini sehingga izin file default ditetapkan untuk baca dan tulis hanya oleh pembuat tugas, lakukan langkah-langkah berikut.

Saat membuat klaster EMR Anda, sediakan konfigurasi berikut:

```
[
  {
    "Classification": "hdfs-site",
    "Properties": {
      "dfs.namenode.acls.enabled": "true",
      "fs.permissions.umask-mode": "077",
      "dfs.permissions.superusergroup": "hdfsadmingroup"
    }
  }
]
```

Di samping itu, jalankan tindakan bootstrap berikut:

```
--bootstrap-actions Name='HDFS UMask Setup',Path=s3://elasticmapreduce/hdfs/umask/umask-main.sh
```

# Plugin Apache Ranger untuk skenario integrasi Amazon EMR
<a name="emr-ranger-plugins"></a>

Plugin Apache Ranger memvalidasi akses pengguna terhadap kebijakan otorisasi yang ditentukan dalam server admin kebijakan Apache Ranger.

**Topics**
+ [Plugin Apache Hive untuk integrasi Ranger dengan Amazon EMR](emr-ranger-hive.md)
+ [Plugin Apache Spark untuk integrasi Ranger dengan Amazon EMR](emr-ranger-spark.md)
+ [Plugin EMRFS S3 untuk integrasi Ranger dengan Amazon EMR](emr-ranger-emrfs.md)
+ [Plugin Trino untuk integrasi Ranger dengan Amazon EMR](emr-ranger-trino.md)

# Plugin Apache Hive untuk integrasi Ranger dengan Amazon EMR
<a name="emr-ranger-hive"></a>

Apache Hive adalah mesin eksekusi populer di ekosistem Hadoop. Amazon EMR menyediakan plugin Apache Ranger untuk dapat memberikan kendali akses lancar untuk Hive. Plugin ini kompatibel dengan server Admin Apache Ranger versi 2.0 dan versi terbaru.

**Topics**
+ [Fitur yang didukung](#emr-ranger-supported-features)
+ [Instalasi konfigurasi layanan](#emr-ranger-hive-service-config)
+ [Pertimbangan-pertimbangan](#emr-ranger-hive-considerations)
+ [Batasan](#emr-ranger-hive-limitations)

## Fitur yang didukung
<a name="emr-ranger-supported-features"></a>

Plugin Apache Ranger untuk Hive di EMR mendukung semua fungsi dari plugin sumber terbuka, yang meliputi basis data, tabel, kendali akses tingkat kolom dan penyaringan baris dan masking data. Untuk tabel perintah Hive dan terkait izin Ranger, lihat [perintah Hive untuk pemetaan izin Ranger](https://cwiki.apache.org/confluence/display/RANGER/Hive+Commands+to+Ranger+Permission+Mapping).

## Instalasi konfigurasi layanan
<a name="emr-ranger-hive-service-config"></a>

Plugin Apache Hive kompatibel dengan definisi layanan Hive yang ada dalam Apache Hive Hadoop SQL.

![\[Definisi layanan Apache Hive untuk Hadoop SQL.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger_service_mgr.png)


Jika Anda tidak memiliki sebuah instans dari layanan di bawah Hadoop SQL, seperti yang ditunjukkan di atas, Anda dapat membuat satu. Klik pada **\$1** di sebelah Hadoop SQL.

1. **Nama Layanan (Jika ditampilkan)**: Anda perlu memasukkan nama layanan. Nilai yang direkomendasikan adalah **amazonemrhive**. Buat catatan nama layanan ini -- itu akan dibutuhkan saat membuat konfigurasi keamanan EMR.

1. **Nama Tampilan**: Memasukkan nama yang akan ditampilkan untuk layanan. Nilai yang direkomendasikan adalah **amazonemrhive**.

![\[Detail layanan Apache Hive untuk Hadoop SQL.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger_create_service.png)


Properti Apache Hive Config digunakan untuk membuat koneksi ke server Admin Apache Ranger Anda dengan 2 untuk mengimplementasikan auto complete saat HiveServer membuat kebijakan. Properti di bawah ini tidak diharuskan akurat jika Anda tidak memiliki proses HiveServer 2 yang persisten dan dapat diisi dengan informasi apa pun.
+ **Username**: Masukkan nama pengguna untuk koneksi JDBC ke instance instance HiveServer 2.
+ **Kata Sandi**: Anda perlu memasukkan kata sandi untuk nama pengguna di atas.
+ **jdbc.driver. ClassName**: Masukkan nama kelas kelas JDBC untuk konektivitas Apache Hive. Nilai default dapat digunakan.
+ **jdbc.url**: Masukkan string koneksi JDBC yang akan digunakan saat menghubungkan ke 2. HiveServer
+ **Nama Umum untuk Sertifikat**: Bidang CN di sertifikat yang digunakan untuk connect ke server admin dari plugin klien. Nilai ini harus cocok dengan bidang CN di sertifikat TLS Anda yang dibuat untuk plugin.

![\[Properti konfigurasi layanan Apache Hive.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger_config_props.png)


Tombol **Test Connection** menguji apakah nilai-nilai di atas dapat digunakan untuk berhasil terhubung ke instance HiveServer 2. Setelah layanan berhasil dibuat, Manajer Layanan akan terlihat seperti di bawah ini:

![\[Terhubung ke HiveServer 2 instance\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger_config_connected.png)


## Pertimbangan-pertimbangan
<a name="emr-ranger-hive-considerations"></a>

**Server metadata sarang**

Server metadata Hive hanya dapat diakses oleh mesin tepercaya, khususnya Hive dan`emr_record_server`, untuk melindungi dari akses yang tidak sah. Server metadata Hive juga diakses oleh semua node di cluster. Port 9083 yang diperlukan menyediakan semua node akses ke node utama.

**Autentikasi**

Secara default, Apache Hive dikonfigurasi untuk mengautentikasi menggunakan Kerberos seperti yang dikonfigurasi dalam konfigurasi EMR Security. HiveServer2 dapat dikonfigurasi untuk mengotentikasi pengguna menggunakan LDAP juga. Lihat [Menerapkan autentikasi LDAP untuk Hive pada multi-penyewa klaster Amazon EMR](https://aws.amazon.com/blogs/big-data/implementing-ldap-authentication-for-hive-on-a-multi-tenant-amazon-emr-cluster/) untuk informasi.

## Batasan
<a name="emr-ranger-hive-limitations"></a>

Berikut ini adalah batasan saat ini untuk plugin Apache Hive di Amazon EMR 5.x:
+ Peran Hive saat ini tidak didukung. Pernyataan Berikan, Batalkan tidak didukung.
+ Hive CLI tidak didukung. JDBC/Beeline adalah satu-satunya cara resmi untuk menghubungkan Hive.
+ `hive.server2.builtin.udf.blacklist`konfigurasi harus diisi dengan UDFs yang Anda anggap tidak aman.

# Plugin Apache Spark untuk integrasi Ranger dengan Amazon EMR
<a name="emr-ranger-spark"></a>

Amazon EMR telah mengintegrasikan EMR RecordServer untuk menyediakan kontrol akses berbutir halus untuk SparkSQL. EMR RecordServer adalah proses istimewa yang berjalan di semua node pada cluster yang mendukung Apache Ranger. Ketika driver atau eksekutor Spark menjalankan pernyataan SparkSQL, semua metadata dan permintaan data akan melalui. RecordServer Untuk mempelajari lebih lanjut tentang EMR RecordServer, lihat halaman. [Komponen Amazon EMR untuk digunakan dengan Apache Ranger](emr-ranger-components.md)

**Topics**
+ [Fitur yang didukung](#emr-ranger-spark-supported-features)
+ [Menerapkan kembali definisi layanan untuk menggunakan pernyataan INSERT, ALTER, atau DDL](#emr-ranger-spark-redeploy-service-definition)
+ [Instalasi definisi layanan](#emr-ranger-spark-install-servicedef)
+ [Membuat kebijakan SparkSQL](#emr-ranger-spark-create-sparksql)
+ [Pertimbangan-pertimbangan](#emr-ranger-spark-considerations)
+ [Batasan](#emr-ranger-spark-limitations)

## Fitur yang didukung
<a name="emr-ranger-spark-supported-features"></a>


| Tindakan SQL statement/Ranger  | STATUS | Rilis EMR yang didukung | 
| --- | --- | --- | 
|  PILIH  |  Didukung  |  Pada 5.32  | 
|  TAMPILKAN BASIS DATA  |  Didukung  |  Pada 5.32  | 
|  TAMPILKAN KOLOM  |  Didukung  |  Pada 5.32  | 
|  TAMPILKAN TABEL  |  Didukung  |  Pada 5.32  | 
|  TAMPILKAN PROPERTI TABEL  |  Didukung  |  Pada 5.32  | 
|  GAMBAR TABEL  |  Didukung  |  Pada 5.32  | 
|  MASUKKAN TIMPA  |  Didukung  |  Pada 5,34 dan 6,4  | 
| MASUKKAN KE | Didukung | Pada 5,34 dan 6,4 | 
|  ALTER TABLE  |  Didukung  |  Pada 6.4  | 
|  CREATE TABLE  |  Didukung  |  Pada 5,35 dan 6,7  | 
|  BUAT BASIS DATA  |  Didukung  |  Pada 5,35 dan 6,7  | 
|  MEJA DROP  |  Didukung  |  Pada 5,35 dan 6,7  | 
|  DROP DATABASE  |  Didukung  |  Pada 5,35 dan 6,7  | 
|  TAMPILAN DROP  |  Didukung  |  Pada 5,35 dan 6,7  | 
|  CREATE VIEW  |  Tidak Didukung  |    | 

Fitur berikut didukung saat menggunakan SparkSQL:
+ Kendali akses lancar pada tabel di Metastore Hive, dan kebijakan dapat dibuat pada tingkat basis data, tabel, dan kolom.
+ Kebijakan Apache Ranger dapat mencakup kebijakan hibah dan tolak kebijakan untuk pengguna dan grup.
+ Acara audit dikirimkan ke CloudWatch Log.

## Menerapkan kembali definisi layanan untuk menggunakan pernyataan INSERT, ALTER, atau DDL
<a name="emr-ranger-spark-redeploy-service-definition"></a>

**catatan**  
Dimulai dengan Amazon EMR 6.4, Anda dapat menggunakan Spark SQL dengan pernyataan: INSERT INTO, INSERT OVERWRITE, atau ALTER TABLE. Dimulai dengan Amazon EMR 6.7, Anda dapat menggunakan Spark SQL untuk membuat atau menjatuhkan database dan tabel. Jika Anda memiliki instalasi yang ada di server Apache Ranger dengan definisi layanan Apache Spark digunakan, gunakan kode berikut untuk menerapkan definisi layanan.  

```
# Get existing Spark service definition id calling Ranger REST API and JSON processor
curl --silent -f -u <admin_user_login>:<password_for_ranger_admin_user> \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef/name/amazon-emr-spark' | jq .id

# Download the latest Service definition
wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-spark.json

# Update the service definition using the Ranger REST API
curl -u <admin_user_login>:<password_for_ranger_admin_user> -X PUT -d @ranger-servicedef-amazon-emr-spark.json \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef/<Spark service definition id from step 1>'
```

## Instalasi definisi layanan
<a name="emr-ranger-spark-install-servicedef"></a>

Instalasi defenisi layanan EMR Apache Spark memerlukan server Admin Ranger untuk setup. Lihat [Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md).

Ikuti langkah-langkah untuk menginstal definisi layanan Apache Spark:

**Langkah 1: SSH ke server Admin Apache Ranger**

Misalnya:

```
ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
```

**Langkah 2: Unduh definisi layanan dan plugin server Admin Apache Ranger**

Di direktori sementara, unduh definisi layanan. Definisi layanan ini didukung oleh versi Ranger 2.x.

```
mkdir /tmp/emr-spark-plugin/
cd /tmp/emr-spark-plugin/

wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-spark-plugin-2.x.jar
wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-spark.json
```

**Langkah 3: Instal plugin Apache Spark untuk Amazon EMR**

```
export RANGER_HOME=.. # Replace this Ranger Admin's home directory eg /usr/lib/ranger/ranger-2.0.0-admin
mkdir $RANGER_HOME/ews/webapp/WEB-INF/classes/ranger-plugins/amazon-emr-spark
mv ranger-spark-plugin-2.x.jar $RANGER_HOME/ews/webapp/WEB-INF/classes/ranger-plugins/amazon-emr-spark
```

**Langkah 4: Daftarkan definisi layanan Apache Spark untuk Amazon EMR**

```
curl -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X POST -d @ranger-servicedef-amazon-emr-spark.json \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef'
```

Jika perintah ini berhasil, Anda akan melihat layanan baru di Anda UI Admin Ranger yang disebut "AMAZON-EMR-SPARK", seperti yang ditunjukkan pada citra berikut (Ranger versi 2.0 ditampilkan).

![\["AMAZON-EMR-Spark" terdaftar di Admin Ranger.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-amazon-emr-spark.png)


**Langkah 5: Buat instance AMAZON-EMR-SPARK aplikasi**

**Nama Layanan (Jika ditampilkan):** Nama layanan yang akan digunakan. Nilai yang direkomendasikan adalah **amazonemrspark**. Catat nama layanan ini saat membuat konfigurasi keamanan EMR.

**Nama tampilan:** Nama yang akan ditampilkan untuk instans ini. Nilai yang direkomendasikan adalah **amazonemrspark**.

**Nama Umum Untuk Sertifikat:** Bidang CN di sertifikat yang digunakan untuk connect ke server admin dari plugin klien. Nilai ini harus cocok dengan bidang CN di sertifikat TLS Anda yang dibuat untuk plugin.

![\[Admin Ranger membuat layanan.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-service.png)


**catatan**  
Sertifikat TLS untuk plugin ini harus telah terdaftar di penyimpanan kepercayaan pada server Admin Ranger. Lihat [Sertifikat TLS untuk integrasi Apache Ranger dengan Amazon EMR](emr-ranger-admin-tls.md) untuk detail selengkapnya.

## Membuat kebijakan SparkSQL
<a name="emr-ranger-spark-create-sparksql"></a>

Saat membuat kebijakan baru, bidang yang harus diisi adalah:

**Nama Kebijakan**: Nama kebijakan ini.

**Label Kebijakan**: Label yang dapat Anda tempatkan di kebijakan ini.

**Basis data**: Basis data yang berlaku untuk kebijakan ini. Wildcard “\$1” mewakili semua database.

**Tabel**: Tabel yang berlaku untuk kebijakan ini. Wildcard “\$1” mewakili semua tabel.

**Kolom EMR Spark**: Kolom yang berlaku untuk kebijakan ini. Wildcard "\$1" mewakili semua kolom.

**Deskripsi**: Deskripsi dari kebijakan ini.

![\[Admin Ranger membuat detail kebijakan SparkSQL.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-policy-details.png)


Untuk menentukan pengguna dan grup, Anda perlu memasukkan pengguna dan grup di bawah ini untuk memberikan izin. Anda juga dapat menentukan pengecualian untuk kondisi **izinkan** dan kondisi **penolakan**.

![\[Detail kebijakan SparkSQL Admin Ranger mengizinkan syarat.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-policy-allow-conditions.png)


Setelah menentukan mengizinkan dan tolak syarat, klik **Simpan**.

## Pertimbangan-pertimbangan
<a name="emr-ranger-spark-considerations"></a>

Setiap node dalam cluster EMR harus dapat terhubung ke node utama pada port 9083.

## Batasan
<a name="emr-ranger-spark-limitations"></a>

Berikut ini adalah batasan saat ini untuk plugin Apache Spark:
+ Server Catatan akan selalu terhubung ke HMS yang berjalan pada klaster Amazon EMR. Konfigurasikan HMS untuk connect ke Mode Jarak Jauh, jika diperlukan. Anda tidak harus config nilai-nilai di file konfigurasi Apache Spark Hive-site.xml.
+ Tabel yang dibuat menggunakan sumber data Spark pada CSV atau Avro tidak dapat dibaca menggunakan EMR. RecordServer Gunakan Hive untuk membuat dan tulis data, dan membaca menggunakan Catatan.
+ Meja Delta Lake, Hudi dan Iceberg tidak didukung.
+ Pengguna harus memiliki akses ke basis data default. Ini adalah persyaratan untuk Apache Spark.
+ Server Admin Ranger tidak support selesai otomatis.
+ Plugin SparkSQL untuk Amazon EMR tidak support filter baris atau masking data.
+ Saat menggunakan ALTER TABLE dengan Spark SQL, lokasi partisi harus menjadi direktori anak dari lokasi tabel. Memasukkan data ke dalam partisi di mana lokasi partisi berbeda dari lokasi tabel tidak didukung.

# Plugin EMRFS S3 untuk integrasi Ranger dengan Amazon EMR
<a name="emr-ranger-emrfs"></a>

Untuk membuatnya lebih mudah untuk menyediakan kontrol akses terhadap objek di S3 pada cluster multi-tenant, plugin EMRFS S3 menyediakan kontrol akses ke data dalam S3 saat mengaksesnya melalui EMRFS. Anda dapat mengizinkan akses ke sumber daya S3 pada tingkat pengguna dan grup.

Untuk mencapai hal ini, ketika aplikasi Anda mencoba untuk mengakses data di S3, EMRFS mengirimkan permintaan untuk kredensial dalam proses Agen Rahasia, di mana permintaan diautentikasi dan diotorisasi terhadap plugin Apache Ranger. Jika permintaan diotorisasi, maka agen rahasia mengambil IAM role untuk Mesin Apache Ranger dengan kebijakan terbatas untuk menghasilkan kredensial yang hanya memiliki akses ke kebijakan Ranger yang mengizinkan akses. Kredensialnya kemudian diteruskan kembali ke EMRFS untuk mengakses S3.

**Topics**
+ [Fitur yang didukung](#emr-ranger-emrfs-features)
+ [Instalasi konfigurasi layanan](#emr-ranger-emrfs-service-config)
+ [Membuat kebijakan S3 EMRFS](#emr-ranger-emrfs-create-policies)
+ [Catatan penggunaan kebijakan S3 EMRFS](#emr-ranger-emrfs-considerations)
+ [Batasan](#emr-ranger-emrfs-limitations)

## Fitur yang didukung
<a name="emr-ranger-emrfs-features"></a>

Plugin EMRFS S3 menyediakan otorisasi tingkat penyimpanan. Kebijakan dapat dibuat untuk menyediakan akses ke pengguna dan grup ke bucket S3 dan prefiks. Otorisasi dilakukan hanya terhadap EMRFS.

## Instalasi konfigurasi layanan
<a name="emr-ranger-emrfs-service-config"></a>

Untuk menginstal definisi layanan EMRFS, Anda harus mengatur server Admin Ranger. Untuk mengatur server, lihat[Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md).

Ikuti langkah berikut untuk menginstal definisi layanan EMRFS.

**Langkah 1: SSH ke server Admin Apache Ranger**.

Contoh:

```
ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
```

**Langkah 2: Unduh definisi layanan EMRFS**.

Di direktori sementara, unduh definisi layanan Amazon EMR. Definisi layanan ini didukung oleh versi Ranger 2.x.

```
wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-emrfs.json
```

**Langkah 3: Daftarkan definisi layanan EMRFS S3**.

```
curl -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X POST -d @ranger-servicedef-amazon-emr-emrfs.json \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef'
```

Jika perintah ini berhasil, Anda melihat layanan baru di UI Admin Ranger yang disebut "AMAZON-EMR-S3", seperti yang ditunjukkan pada citra berikut (Ranger versi 2.0 ditampilkan).

![\[Admin Ranger membuat layanan S3 EMRFS.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-service-EMRFS.png)


**Langkah 4: Buat instance AMAZON-EMR-EMRFS aplikasi**.

Buat sebuah instans dari definisi layanan.
+ Klik pada **\$1** di sebelah AMAZON-EMR-EMRFS.

Isi kolom berikut:

**Nama Layanan (Jika ditampilkan)**: Nilai yang direkomendasikan adalah **amazonemrs3**. Catat nama layanan ini saat membuat konfigurasi keamanan EMR. 

**Nama Tampilan**: Nama yang akan ditampilkan untuk layanan. Nilai yang direkomendasikan adalah **amazonemrs3**.

**Nama Umum Untuk Sertifikat**: Bidang CN di sertifikat yang digunakan untuk connect ke server admin dari plugin klien. Nilai ini harus cocok dengan bidang CN dalam sertifikat TLS yang dibuat untuk plugin.

![\[Admin Ranger mengedit layanan S3 EMRFS.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-edit-service-EMRFS.png)


**catatan**  
Sertifikat TLS untuk plugin ini harus telah terdaftar di penyimpanan kepercayaan pada server Admin Ranger. Lihat [Sertifikat TLS untuk integrasi Apache Ranger dengan Amazon EMR](emr-ranger-admin-tls.md) untuk detail selengkapnya.

Ketika layanan dibuat, Manajer Service termasuk "AMAZON-EMR-EMRFS", seperti yang ditunjukkan pada citra berikut.

![\[Admin Ranger menampilkan layanan baru S3 EMRFS.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-new-service-EMRFS.png)


## Membuat kebijakan S3 EMRFS
<a name="emr-ranger-emrfs-create-policies"></a>

Untuk membuat kebijakan baru di halaman **Buat kebijakan** Manajer Layanan, isi kolom berikut.

**Nama Kebijakan**: Nama kebijakan ini.

**Label Kebijakan**: Label yang dapat Anda tempatkan di kebijakan ini.

**Sumber Daya S3**: Sumber daya yang dimulai dengan bucket dan prefiks opsional. Lihat [Catatan penggunaan kebijakan S3 EMRFS](#emr-ranger-emrfs-considerations) untuk informasi tentang praktik terbaik. Sumber daya di server Admin Ranger tidak boleh berisi **s3://**, **s3a://** atau **s3n://**.

![\[Admin Ranger menunjukkan membuat kebijakan untuk layanan S3 EMRFS.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-policy-EMRFS.png)


Anda dapat menentukan pengguna dan grup untuk memberikan izin. Anda juga dapat menentukan pengecualian untuk kondisi **izinkan** dan kondisi **penolakan**.

![\[Admin Ranger menunjukkan user/group izin untuk kebijakan EMRFS S3.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-permissions-EMRFS.png)


**catatan**  
Maksimum tiga sumber daya diperbolehkan untuk setiap kebijakan. Menambahkan lebih dari tiga sumber daya dapat mengakibatkan kesalahan ketika kebijakan ini digunakan pada klaster EMR. Menambahkan lebih dari tiga kebijakan akan menampilkan pengingat tentang batas kebijakan.

## Catatan penggunaan kebijakan S3 EMRFS
<a name="emr-ranger-emrfs-considerations"></a>

Saat membuat kebijakan S3 di Apache Ranger, ada beberapa pertimbangan penggunaan yang harus diperhatikan.

### Izin untuk beberapa objek S3
<a name="emr-ranger-emrfs-considerations-s3objects"></a>

Anda dapat menggunakan kebijakan rekursif dan ekspresi wildcard untuk memberikan izin untuk beberapa objek S3 dengan prefiks umum. Kebijakan rekursif memberikan izin untuk semua objek dengan prefiks umum. Ekspresi wildcard memilih beberapa prefiks. Bersama-sama, mereka memberikan izin ke semua objek dengan beberapa prefiks umum seperti yang ditunjukkan di contoh berikut.

**Example Menggunakan kebijakan rekursif**  
Misalkan Anda ingin izin untuk daftar semua file parket di bucket S3 seperti yang diorganisir sebagai berikut.  

```
s3://sales-reports/americas/
    +- year=2000
    |      +- data-q1.parquet
    |      +- data-q2.parquet
    +- year=2019
    |      +- data-q1.json
    |      +- data-q2.json
    |      +- data-q3.json
    |      +- data-q4.json
    |
    +- year=2020
    |      +- data-q1.parquet
    |      +- data-q2.parquet
    |      +- data-q3.parquet
    |      +- data-q4.parquet
    |      +- annual-summary.parquet    
    +- year=2021
```
Pertama, pertimbangkan file parket dengan prefiks `s3://sales-reports/americas/year=2000`. Anda dapat memberikan GetObject izin untuk semuanya dengan dua cara:  
**Menggunakan kebijakan non-rekursif**: salah satu pilihan adalah dengan menggunakan dua kebijakan non-rekursif terpisah, satu untuk direktori dan yang lainnya untuk file.   
Kebijakan pertama memberikan izin ke prefiks `s3://sales-reports/americas/year=2020` (tidak ada penjejakan `/`).  

```
- S3 resource = "sales-reports/americas/year=2000"
- permission = "GetObject"
- user = "analyst"
```
Kebijakan kedua menggunakan ekspresi wildcard untuk memberikan izin semua file dengan prefiks `sales-reports/americas/year=2020/`(perhatikan penjejakan `/`).  

```
- S3 resource = "sales-reports/americas/year=2020/*"
- permission = "GetObject"
- user = "analyst"
```
**Menggunakan kebijakan rekursif**: Alternatif yang lebih nyaman adalah dengan menggunakan kebijakan rekursif tunggal dan memberikan izin rekursif untuk prefiks.  

```
 - S3 resource = "sales-reports/americas/year=2020"
 - permission = "GetObject"
 - user = "analyst"
 - is recursive = "True"
```
Sejauh ini, hanya file parket dengan prefiks `s3://sales-reports/americas/year=2000` yang telah dimasukkan. Anda sekarang dapat juga menyertakan file parket dengan prefiks yang berbeda, `s3://sales-reports/americas/year=2020`, ke kebijakan rekursif yang sama dengan memperkenalkan ekspresi wildcard sebagai berikut.  

```
 - S3 resource = "sales-reports/americas/year=20?0"
 - permission = "GetObject"
 - user = "analyst"
 - is recursive = "True"
```

### Kebijakan untuk PutObject dan DeleteObject izin
<a name="emr-ranger-emrfs-considerations-putobject"></a>

Menulis kebijakan untuk `PutObject` dan `DeleteObject` izin ke file di EMRFS memerlukan perhatian khusus karena, tidak seperti GetObject izin, mereka memerlukan izin rekursif tambahan yang diberikan ke awalan.

**Example Kebijakan untuk PutObject dan DeleteObject izin**  
Misalnya, menghapus file tidak hanya `annual-summary.parquet` memerlukan DeleteObject izin ke file yang sebenarnya.  

```
- S3 resource = "sales-reports/americas/year=2020/annual-summary.parquet"
- permission = "DeleteObject"
- user = "analyst"
```
Hal ini juga membutuhkan kebijakan pemberian rekursif `GetObject` dan `PutObject` hak istimewa ke prefiksnya.  
Demikian pula, memodifikasi file `annual-summary.parquet`, membutuhkan tidak hanya izin `PutObject` untuk file yang sebetulnya.  

```
- S3 resource = "sales-reports/americas/year=2020/annual-summary.parquet"
- permission = "PutObject"
- user = "analyst"
```
Hal ini juga membutuhkan izin `GetObject` pemberian kebijakan untuk prefiksnya.  

```
- S3 resource = "sales-reports/americas/year=2020"
- permission = "GetObject"
- user = "analyst"
- is recursive = "True"
```

### Wildcard di kebijakan
<a name="emr-ranger-emrfs-considerations-wildcards"></a>

Ada dua wilayah di mana wildcard dapat ditentukan. Saat menentukan sumber daya S3, "\$1" dan "?" dapat digunakan. "\$1" menyediakan pencocokan terhadap jalur S3 dan cocok dengan segala sesuatu setelah prefiks. Misalnya, lihat kebijakan berikut ini.

```
S3 resource = "sales-reports/americas/*"
```

Ini cocok dengan jalur S3 berikut.

```
sales-reports/americas/year=2020/
sales-reports/americas/year=2019/
sales-reports/americas/year=2019/month=12/day=1/afile.parquet 
sales-reports/americas/year=2018/month=6/day=1/afile.parquet 
sales-reports/americas/year=2017/afile.parquet
```

Wilcard "?" cocok hanya satu karakter. Misalnya, untuk kebijakan.

```
S3 resource = "sales-reports/americas/year=201?/"
```

Ini cocok dengan jalur S3 berikut.

```
sales-reports/americas/year=2019/
sales-reports/americas/year=2018/
sales-reports/americas/year=2017/
```

### Wildcard di pengguna
<a name="emr-ranger-emrfs-considerations-wildcards-in-users"></a>

Ada dua wildcard built-in saat menetapkan pengguna untuk menyediakan akses ke pengguna. Yang pertama adalah wildcard "\$1PENGGUNA\$1" yang menyediakan akses ke semua pengguna. Wildcard kedua adalah "\$1PEMILIK\$1", yang menyediakan akses kepada pemilik objek tertentu atau secara langsung. Namun, wildcard "\$1PENGGUNA\$1" saat ini tidak didukung.

## Batasan
<a name="emr-ranger-emrfs-limitations"></a>

Berikut ini adalah batasan plugin EMRFS S3 saat ini:
+ Kebijakan Apache Ranger dapat memiliki maksimal tiga kebijakan.
+ Akses ke S3 harus dilakukan melalui EMRFS dan dapat digunakan dengan aplikasi terkait Hadoop. Berikut ini tidak didukung:

  - Perpustakaan Boto3

  - AWS SDK dan AWK CLI

  - Penyambung sumber terbuka S3A
+ Apache Ranger tolak kebijakan tidak didukung.
+ Operasi pada S3 dengan kunci yang memiliki enkripsi CSE-KMS saat ini tidak didukung.
+ Support lintas wilayah tidak didukung.
+ Fitur Zona Keamanan Apache Ranger tidak didukung. Pembatasan kontrol akses yang ditentukan menggunakan fitur Zona Keamanan tidak diterapkan pada kluster EMR Amazon Anda.
+ Pengguna Hadoop tidak menghasilkan peristiwa audit seperti Hadoop selalu mengakses Profil Instans EC2.
+ Disarankan agar Anda menonaktifkan Tampilan Konsistensi EMR Amazon. S3 sangat konsisten, jadi tidak lagi diperlukan. Lihat [Konsistensi kuat Amazon S3](https://aws.amazon.com/s3/consistency/) untuk informasi lebih lanjut.
+ Plugin EMRFS S3 membuat banyak panggilan STS. Direkomendasikan bahwa Anda melakukan pengujian beban pada akun pengembangan dan memantau volume panggilan STS. Anda juga disarankan untuk membuat permintaan STS untuk menaikkan batas AssumeRole layanan.
+ Server Admin Ranger tidak mendukung pelengkapan otomatis.

# Plugin Trino untuk integrasi Ranger dengan Amazon EMR
<a name="emr-ranger-trino"></a>

Trino (sebelumnya PrestosQL) adalah mesin query SQL yang dapat Anda gunakan untuk menjalankan kueri pada sumber data seperti HDFS, penyimpanan objek, database relasional, dan database NoSQL. Ini menghilangkan kebutuhan untuk memigrasikan data ke lokasi pusat dan memungkinkan Anda untuk menanyakan data dari mana pun ia berada. Amazon EMR menyediakan plugin Apache Ranger untuk menyediakan kontrol akses halus untuk Trino. Plugin ini kompatibel dengan server Admin Apache Ranger versi 2.0 dan versi terbaru.

**Topics**
+ [Fitur yang didukung](#emr-ranger-trino-features)
+ [Instalasi konfigurasi layanan](#emr-ranger-trino-service-config)
+ [Membuat kebijakan Trino](#emr-ranger-trino-create-policies)
+ [Pertimbangan-pertimbangan](#emr-ranger-trino-considerations)
+ [Batasan](#emr-ranger-trino-limitations)

## Fitur yang didukung
<a name="emr-ranger-trino-features"></a>

Plugin Apache Ranger untuk Trino di Amazon EMR mendukung semua fungsionalitas mesin kueri Trino yang dilindungi oleh kontrol akses berbutir halus. Ini termasuk database, tabel, kontrol akses tingkat kolom dan pemfilteran baris dan penyembunyian data. Kebijakan Apache Ranger dapat mencakup kebijakan hibah dan tolak kebijakan untuk pengguna dan grup. Acara audit juga diserahkan ke CloudWatch log.

## Instalasi konfigurasi layanan
<a name="emr-ranger-trino-service-config"></a>

Instalasi definisi layanan Trino mengharuskan server Admin Ranger diatur. Untuk mengatur pemisah Admin Ranger, lihat. [Siapkan server Admin Ranger untuk diintegrasikan dengan Amazon EMR](emr-ranger-admin.md)

Ikuti langkah-langkah ini untuk menginstal definisi layanan Trino.

1. SSH ke server Admin Apache Ranger.

   ```
   ssh ec2-user@ip-xxx-xxx-xxx-xxx.ec2.internal
   ```

   

1. Copot pemasangan plugin server Presto, jika ada. Jalankan perintah berikut. Jika kesalahan ini terjadi dengan kesalahan “Layanan tidak ditemukan”, ini berarti plugin server Presto tidak diinstal di server Anda. Lanjutkan ke langkah berikutnya.

   ```
   curl -f -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X DELETE -k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef/name/presto'
   ```

1. Unduh definisi layanan dan plugin server Admin Apache Ranger. Di direktori sementara, unduh definisi layanan. Definisi layanan ini didukung oleh versi Ranger 2.x.

   ```
   wget https://s3.amazonaws.com/elasticmapreduce/ranger/service-definitions/version-2.0/ranger-servicedef-amazon-emr-trino.json
   ```

1. Daftarkan definisi layanan Apache Trino untuk Amazon EMR.

   ```
   curl -u *<admin users login>*:*_<_**_password_ **_for_** _ranger admin user_**_>_* -X POST -d @ranger-servicedef-amazon-emr-trino.json \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -k 'https://*<RANGER SERVER ADDRESS>*:6182/service/public/v2/api/servicedef'
   ```

   Jika perintah ini berhasil berjalan, Anda akan melihat layanan baru di UI Admin Ranger Anda dipanggil`TRINO`, seperti yang ditunjukkan pada gambar berikut.  
![\[Admin Ranger membuat layanan.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-service-trino.png)

1. Buat instance `TRINO` aplikasi, masukkan informasi berikut.

   **Nama Layanan**: Nama layanan yang akan Anda gunakan. Nilai yang direkomendasikan adalah `amazonemrtrino`. Perhatikan nama layanan ini, karena akan diperlukan saat membuat konfigurasi keamanan Amazon EMR.

   **Nama tampilan:** Nama yang akan ditampilkan untuk instans ini. Nilai yang direkomendasikan adalah `amazonemrtrino`.  
![\[Nama tampilan Admin Ranger.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-display-name-trino.png)

   **jdbc.driver. ClassName**: Nama kelas kelas JDBC untuk konektivitas Trino. Anda dapat menggunakan nilai default.

   **jdbc.url**: String koneksi JDBC yang akan digunakan saat menghubungkan ke koordinator Trino.

   **Nama Umum Untuk Sertifikat:** Bidang CN di sertifikat yang digunakan untuk connect ke server admin dari plugin klien. Nilai ini harus cocok dengan bidang CN di sertifikat TLS Anda yang dibuat untuk plugin.  
![\[Ranger Admin nama umum.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-common-name-trino.png)

   Perhatikan bahwa sertifikat TLS untuk plugin ini seharusnya telah terdaftar di toko kepercayaan di server Admin Ranger. Untuk informasi selengkapnya, lihat [sertifikat TLS](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ranger-admin-tls.html).

## Membuat kebijakan Trino
<a name="emr-ranger-trino-create-policies"></a>

Saat Anda membuat kebijakan baru, isi kolom berikut.

**Nama Kebijakan**: Nama kebijakan ini.

**Label Kebijakan**: Label yang dapat Anda tempatkan di kebijakan ini.

**Katalog**: Katalog tempat kebijakan ini berlaku. Wildcard “\$1” mewakili semua katalog.

**Skema**: Skema yang berlaku untuk kebijakan ini. Wildcard “\$1” mewakili semua skema.

**Tabel**: Tabel yang berlaku untuk kebijakan ini. Wildcard “\$1” mewakili semua tabel.

**Kolom**: Kolom tempat kebijakan ini berlaku. Wildcard "\$1" mewakili semua kolom.

**Deskripsi**: Deskripsi dari kebijakan ini.

Jenis kebijakan lain ada untuk **Pengguna Trino** (untuk akses peniruan identitas pengguna), Properti **Sistem/Sesi Trino (untuk mengubah sistem mesin atau properti sesi**), **Fungsi/Prosedur (untuk memungkinkan panggilan fungsi atau prosedur**), dan **URL** (untuk memberikan akses baca/tulis ke mesin di lokasi data).

![\[Admin Ranger membuat detail kebijakan.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-policy-details-trino.png)


Untuk memberikan izin kepada pengguna dan grup tertentu, masukkan pengguna dan grup. Anda juga dapat menentukan pengecualian untuk kondisi **izinkan** dan kondisi **penolakan**.

![\[Rincian kebijakan Admin Ranger memungkinkan kondisi penolakan.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-create-policy-allow-conditions-trino.png)


Setelah menentukan kondisi izinkan dan tolak, pilih **Simpan**.

## Pertimbangan-pertimbangan
<a name="emr-ranger-trino-considerations"></a>

Saat membuat kebijakan Trino dalam Apache Ranger, ada beberapa pertimbangan penggunaan yang harus diperhatikan.

**Server metadata sarang**

Server metadata Hive hanya dapat diakses oleh mesin tepercaya, khususnya mesin Trino, untuk melindungi dari akses yang tidak sah. Server metadata Hive juga diakses oleh semua node di cluster. Port 9083 yang diperlukan menyediakan semua node akses ke node utama.

**Autentikasi**

Secara default, Trino dikonfigurasi untuk mengautentikasi menggunakan Kerberos seperti yang dikonfigurasi dalam konfigurasi keamanan Amazon EMR.

**Diperlukan enkripsi dalam transit**

Plugin Trino mengharuskan Anda mengaktifkan enkripsi dalam transit dalam konfigurasi keamanan EMR Amazon. Untuk mengaktifkan enkripsi, lihat[Enkripsi dalam transit](emr-data-encryption-options.md#emr-encryption-intransit).

## Batasan
<a name="emr-ranger-trino-limitations"></a>

Berikut ini adalah batasan plugin Trino saat ini:
+ Server Admin Ranger tidak mendukung pelengkapan otomatis.

# Penyelesaian masalah Apache Ranger
<a name="emr-ranger-troubleshooting"></a>

Berikut adalah beberapa masalah yang sering didiagnosis terkait penggunaan Apache Ranger.

## Rekomendasi
<a name="emr-ranger-troubleshooting-recommendations"></a>
+ **Uji menggunakan cluster node utama tunggal: Penyediaan cluster** master node tunggal lebih cepat daripada cluster multi-node yang dapat mengurangi waktu untuk setiap iterasi pengujian.
+ **Atur mode pengembangan pada cluster.** Ketika memulai klaster EMR Anda, atur parameter `--additional-info"` ke:

  `'{"clusterType":"development"}'`

  Parameter ini hanya dapat diatur melalui AWS CLI atau AWS SDK dan tidak tersedia melalui konsol EMR Amazon. Saat flag ini disetel, dan master gagal menyediakan, layanan EMR Amazon membuat cluster tetap hidup selama beberapa waktu sebelum menonaktifkannya. Kali ini sangat berguna untuk menyelidik berbagai log file sebelum klaster dihentikan.

# Kluster EMR gagal disediakan
<a name="emr-ranger-troubleshooting-cluster-failed"></a>

Ada beberapa alasan mengapa cluster EMR Amazon mungkin gagal untuk memulai. Berikut adalah beberapa cara untuk mendiagnosis masalah ini.

**Periksa log penyediaan EMR**

Amazon EMR menggunakan Puppet untuk menginstal dan mengkonfigurasi aplikasi pada cluster. Melihat log akan memberikan detail apakah ada kesalahan selama fase penyediaan cluster. Log dapat diakses pada klaster atau S3 jika log dikonfigurasi untuk didorong ke S3.

Log disimpan di `/var/log/provision-node/apps-phase/0/{UUID}/puppet.log` pada disk dan `s3://<LOG LOCATION>/<CLUSTER ID>/node/<EC2 INSTANCE ID>/provision-node/apps-phase/0/{UUID}/puppet.log.gz.`

**Pesan Kesalahan Umum**


| Pesan kesalahan | Penyebab | 
| --- | --- | 
|  Puppet (err): Systemd mulai gagal\$1 emr-record-server log journalctl untuk: emr-record-server  |  Server Catatan EMR gagal untuk mulai. Lihat log Server Catatan EMR di bawah ini.  | 
|  Puppet (err): Systemd mulai gagal\$1 emr-record-server log journalctl untuk emrsecretagent:  |  Agen Rahasia EMR gagal untuk mulai. Memeriksa log Agen Rahasia di bawah ini.  | 
|  /Stage [main] /Ranger\$1plugins: :Ranger\$1Hive\$1 (pemberitahuan): 140408606197664:Error:0906d06c:PEM Routines:PEM\$1READ\$1BIO:Tidak ada garis awal: PEM\$1LIB.c: 707:Mengharapkan: KUNCI PRIBADI plugin/Ranger\$1plugins::Prepare\$1two\$1way\$1tls[configure 2-way TLS in Hive plugin]/Exec[create keystore and truststore for Ranger Hive plugin]/returns APA PUN  |  Sertifikat TLS privat di Secrets Manager untuk Apache Plugin Ranger sertifikat tidak dalam format yang benar atau bukan sertifikat privat. Lihat [Sertifikat TLS untuk integrasi Apache Ranger dengan Amazon EMR](emr-ranger-admin-tls.md) untuk format sertifikat.  | 
|  /Stage [main] /Ranger\$1plugins: :ranger\$1s3\$1 plugin/Ranger\$1plugins::Prepare\$1two\$1way\$1tls[configure 2-way TLS in Ranger s3 plugin]/Exec[create keystore and truststore for Ranger amazon-emr-s3 plugin]/returns (notice): An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:sts::XXXXXXXXXXX:assumed-role/EMR\$1EC2\$1DefaultRole/i -XXXXXXXXXXXX tidak diizinkan untuk melakukan: secretsmanager: on resource: arn:aws:secretsManager:us-east-1:xxxxxxxxxx:secret: -XXXXX GetSecretValue AdminServer  |  Peran profil instans EC2 tidak memiliki izin yang benar untuk mengambil sertifikat TLS dari Agen Rahasia.  | 

**Periksa SecretAgent log**

Log Agen Rahasia terletak di `/emr/secretagent/log/` pada simpul EMR, atau di direktori `s3://<LOG LOCATION>/<CLUSTER ID>/node/<EC2 INSTANCE ID>/daemons/secretagent/` di S3.

**Pesan Kesalahan Umum**


| Pesan kesalahan | Penyebab | 
| --- | --- | 
|  Pengecualian di utas “main” com.amazonaws.services.securitytoken.model. AWSSecurityTokenServiceException: Pengguna: arn:aws:sts: :xxxxxxxxxxxx:Diasumsikan- role/EMR\$1EC2\$1DefaultRole/i -XXXXXXXXXXXXXXX tidak berwenang untuk melakukan: sts: pada sumber daya: arn:aws:iam: :xxxxxxxxxxxx:peran/\$1 (Layanan:; Kode Status: 403; Kode Kesalahan:; ID Permintaan: XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XX; Proksi: nol) AssumeRole RangerPluginDataAccessRole AWSSecurity TokenService AccessDenied  |  Pengecualian di atas berarti bahwa peran profil instans EMR EC2 tidak memiliki izin untuk mengambil peran tersebut. **RangerPluginDataAccessRole** Lihat [IAM role untuk integrasi alami dengan Apache Ranger](emr-ranger-iam.md).  | 
|  KESALAHAN qtp54617902-149: Terjadi Pengecualian Aplikasi Web javax.ws.rs. NotAllowedException: Metode HTTP 405 Tidak Diizinkan  |  Kesalahan ini bisa diabaikan.  | 

**Periksa Catatan Server Log (untuk SparkSQL)**

<LOG LOCATION><CLUSTER ID><EC2 INSTANCE ID>Log EMR Record Server tersedia di/var/log/emr-record-server/ pada simpul EMR, atau dapat ditemukan di direktori s3:////node/ /daemons//di S3. emr-record-server

**Pesan Kesalahan Umum**


| Pesan kesalahan | Penyebab | 
| --- | --- | 
|  InstanceMetadataServiceResourceFetcher:105 - [] Gagal mengambil token com.amazonaws. SdkClientException: Gagal terhubung ke titik akhir layanan   |  EMR SecretAgent gagal muncul atau mengalami masalah. Periksa SecretAgent log untuk kesalahan dan skrip boneka untuk menentukan apakah ada kesalahan penyediaan.  | 

# Kueri tiba-tiba gagal untuk integrasi Ranger dengan Amazon EMR
<a name="emr-ranger-troubleshooting-queries-failed"></a>

**Periksa log plugin Apache Ranger (Apache Hive, RecordServer EMR, EMR, dll., SecretAgent Log)**

Bagian ini umum di semua aplikasi yang terintegrasi dengan plugin Ranger, seperti Apache Hive, EMR Record Server, dan EMR. SecretAgent

**Pesan Kesalahan Umum**


| Pesan kesalahan | Penyebab | 
| --- | --- | 
|  ERROR:272 PolicyRefresher - [] (PolicyRefresherServiceName=Policy-repository): gagal menemukan layanan. Akan membersihkan cache lokal kebijakan (-1)   |  Pesan kesalahan ini berarti bahwa nama layanan yang Anda berikan di konfigurasi keamanan EMR tidak cocok dengan repositori kebijakan layanan di server Admin Ranger.  | 

Jika di dalam server Admin Ranger AMAZON-EMR-SPARK layanan Anda terlihat seperti berikut, maka Anda harus memasukkan **amazonemrspark** sebagai nama layanan.

![\[Server Admin Ranger menampilkan AMAZON-EMR-SPARK pemecahan masalah.\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/ranger-amazon-emr-spark-troubleshooting.png)
