

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

# Izinkan akses fungsi Lambda ke metastores Hive eksternal
<a name="hive-metastore-iam-access-lambda"></a>

Untuk memanggil fungsi Lambda di akun Anda, Anda harus membuat peran yang memiliki izin berikut:
+ `AWSLambdaVPCAccessExecutionRole`— Izin [peran AWS Lambda eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) untuk mengelola antarmuka jaringan elastis yang menghubungkan fungsi Anda ke VPC. Pastikan bahwa Anda memiliki cukup jumlah antarmuka jaringan dan alamat IP yang tersedia.
+ `AmazonAthenaFullAccess`— Kebijakan yang [AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)dikelola memberikan akses penuh ke Athena.
+ Sebuah kebijakan Amazon S3 untuk memungkinkan fungsi Lambda untuk menulis ke S3 dan untuk memungkinkan Athena untuk membaca dari S3.

Sebagai contoh, kebijakan berikut mendefinisikan izin untuk lokasi tumpahan`s3:\\mybucket\spill`.

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

****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/spill" ] } ] }
```

------

Setiap kali Anda menggunakan kebijakan IAM, pastikan bahwa Anda mengikuti praktik terbaik IAM. Untuk informasi selengkapnya tentang administrator, lihat [Praktik terbaik keamanan di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam *Panduan Pengguna IAM*.

## Buat fungsi Lambda
<a name="hive-metastore-iam-access-lambda-creating-lambda-functions"></a>

Untuk membuat fungsi Lambda di akun Anda, izin pengembangan fungsi atau peran `AWSLambdaFullAccess` diperlukan. Untuk informasi selengkapnya, lihat [Kebijakan IAM berbasis identitas](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html) untuk. AWS Lambda

[Karena Athena menggunakan AWS Serverless Application Repository untuk membuat fungsi Lambda, superuser atau administrator yang membuat fungsi Lambda juga harus memiliki kebijakan IAM untuk mengizinkan kueri federasi Athena.](federated-query-iam-access.md)

## Konfigurasikan izin untuk pendaftaran katalog dan operasi API metadata
<a name="hive-metastore-iam-access-lambda-catalog-registration-and-metadata-api-operations"></a>

Untuk akses API ke pendaftaran katalog dan operasi metadata, Anda dapat menggunakan kebijakan [AmazonAthenaFullAccess terkelola](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy). Jika Anda tidak menggunakan `AmazonAthenaFullAccess` kebijakan, tambahkan operasi API berikut ke kebijakan Athena Anda:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:GetDataCatalog",
                "athena:CreateDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:GetDatabase",
                "athena:ListDatabases",
                "athena:GetTableMetadata",
                "athena:ListTableMetadata"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

## Panggil fungsi Lambda di seluruh wilayah
<a name="hive-metastore-iam-access-lambda-cross-region-invocation"></a>

Secara default, Athena memanggil fungsi Lambda didefinisikan di wilayah yang sama. Untuk memanggil fungsi Lambda di Wilayah AWS selain wilayah tempat Anda menjalankan kueri Athena, gunakan ARN lengkap dari fungsi Lambda. 

Contoh berikut menunjukkan bagaimana katalog di Wilayah Eropa (Frankfurt) dapat menentukan fungsi Lambda di Wilayah Timur AS (Virginia N.) untuk mengambil data dari metastore Hive di Wilayah Eropa (Frankfurt).

```
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new     
```

Jika Anda menentukan ARN penuh dengan cara ini, Athena dapat memanggil`external-hms-service-new`Fungsi Lambda`us-east-1`untuk mengambil data metastore Hive dari`eu-central-1`.

**catatan**  
Katalog harus terdaftar sama dengan Wilayah AWS yang Anda gunakan untuk menjalankan kueri Athena.

## Panggil fungsi Lambda di seluruh akun
<a name="hive-metastore-iam-access-lambda-cross-account-invocation"></a>

Kadang-kadang Anda mungkin memerlukan akses ke metastore Hive dari akun yang berbeda. Misalnya, untuk menjalankan metastore Hive, Anda dapat menggunakan akun yang berbeda dari akun yang Anda gunakan untuk kueri Athena. grup yang berbeda atau tim mungkin menjalankan Hive metastore dengan akun yang berbeda dalam VPC mereka. Atau Anda mungkin ingin mengakses metadata dari metastores Hive berbeda dari grup atau tim yang berbeda.

Athena menggunakan[AWS Lambda dukungan untuk akses lintas akun](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/)untuk mengaktifkan akses lintas rekening untuk Hive Metastores.

**catatan**  
Perhatikan bahwa akses lintas rekening untuk Athena biasanya menyiratkan akses rekening lintas untuk kedua metadata dan data di Amazon S3.

Bayangkan skenario berikut:
+ Akun`111122223333`mengatur fungsi Lambda`external-hms-service-new`pada kita-timur-1 di Athena untuk mengakses Hive Metastore berjalan pada cluster EMR.
+ Akun`111122223333`ingin memungkinkan akun 444455556666 untuk mengakses data Hive Metastore.

Untuk memberikan `444455556666` akses akun ke fungsi Lambda`external-hms-service-new`, akun `111122223333` menggunakan perintah berikut AWS CLI `add-permission`. Perintah telah diformat untuk dibaca.

```
$ aws --profile perf-test lambda add-permission
      --function-name external-hms-service-new
      --region us-east-1
      --statement-id Id-ehms-invocation2
      --action "lambda:InvokeFunction"
      --principal arn:aws:iam::444455556666:user/perf1-test
{
    "Statement": "{\"Sid\":\"Id-ehms-invocation2\",
                   \"Effect\":\"Allow\",
                   \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"},
                   \"Action\":\"lambda:InvokeFunction\",
                   \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}"
}
```

Untuk memeriksa izin Lambda, gunakan`get-policy`seperti pada contoh berikut. Perintah telah diformat untuk dibaca.

```
$ aws --profile perf-test lambda get-policy 
      --function-name arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new 
      --region us-east-1
{
    "RevisionId": "711e93ea-9851-44c8-a09f-5f2a2829d40f",
    "Policy": "{\"Version\":\"2012-10-17\",		 	 	 
                \"Id\":\"default\",
                \"Statement\":[{\"Sid\":\"Id-ehms-invocation2\",
                                \"Effect\":\"Allow\",
                                \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"},
                                \"Action\":\"lambda:InvokeFunction\",
                                \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}]}"
}
```

Setelah menambahkan izin, Anda dapat menggunakan ARN lengkap dari fungsi Lambda`us-east-1`seperti berikut saat anda menentukan katalog`ehms`:

```
arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new
```

Untuk informasi tentang doa lintas wilayah, lihat[Panggil fungsi Lambda di seluruh wilayah](#hive-metastore-iam-access-lambda-cross-region-invocation)sebelumnya dalam topik ini.

### Berikan akses lintas akun ke data
<a name="hive-metastore-iam-access-lambda-granting-cross-account-access-to-data"></a>

Sebelum Anda dapat menjalankan kueri Athena, Anda harus memberikan akses lintas rekening ke data di Amazon S3. Anda dapat melakukannya dengan salah satu cara berikut:
+ Memperbarui kebijakan daftar kontrol akses bucket Amazon S3 dengan[ID pengguna kanonis](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html).
+ Menambahkan akses akun lintas ke kebijakan bucket Amazon S3.

Sebagai contoh, tambahkan kebijakan berikut untuk Amazon S3 bucket kebijakan di akun`111122223333`untuk mengizinkan akun`444455556666`Untuk membaca data dari lokasi Amazon S3 yang ditentukan.

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

****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Sid": "Stmt1234567890123", "Effect":
    "Allow", "Principal": { "AWS":
        "arn:aws:iam::444455556666:user/perf1-test"
    }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::athena-test/lambda/dataset/*" } ]
    }
```

------

**catatan**  
Anda mungkin perlu untuk memberikan akses rekening lintas ke Amazon S3 tidak hanya untuk data Anda, tetapi juga untuk Amazon S3 lokasi tumpahan Anda. Fungsi Lambda Anda tumpahan data tambahan ke lokasi tumpahan saat ukuran objek respon melebihi ambang batas yang diberikan. Lihat awal topik ini untuk kebijakan sampel.

Dalam contoh saat ini, setelah akses lintas rekening diberikan kepada`444455556666,` `444455556666`dapat menggunakan katalog`ehms`sendiri`account`untuk kueri tabel yang didefinisikan dalam akun`111122223333`.

Pada contoh berikut, profil SQL Workbench`perf-test-1`Untuk akun`444455556666`. kueri menggunakan katalog`ehms`untuk mengakses metastore Hive dan data Amazon S3 pada akun`111122223333`.

![\[Mengakses data Hive metastore dan Amazon S3 di seluruh akun di SQL Workbench.\]](http://docs.aws.amazon.com/id_id/athena/latest/ug/images/hive-metastore-iam-access-lambda-1.png)
