

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Consentire l'accesso alla funzione Lambda a metastore Hive esterni
<a name="hive-metastore-iam-access-lambda"></a>

Per richiamare una funzione Lambda nell'account, è necessario creare un ruolo con le seguenti autorizzazioni:
+ `AWSLambdaVPCAccessExecutionRole`: un'autorizzazione per il [ruolo di esecuzione di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) per gestire le interfacce di rete elastiche che collegano la funzione a un VPC. Assicurarsi di disporre di un numero sufficiente di interfacce di rete e indirizzi IP disponibili.
+ `AmazonAthenaFullAccess`— La policy [AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)gestita garantisce l'accesso completo ad Athena.
+ Una policy Amazon S3 per consentire alla funzione Lambda di scrivere su S3 e consentire ad Athena di leggere da S3.

Ad esempio, la seguente policy definisce l'autorizzazione per la posizione di spill `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" ] } ] }
```

------

Ogni volta che si utilizzano le policy IAM, assicurati di seguire le best practice IAM. Per ulteriori informazioni, consulta [Best Practice di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella *Guida per l'utente di IAM*.

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

Per creare una funzione Lambda nell'account, sono necessari i permessi di sviluppo delle funzioni o il ruolo `AWSLambdaFullAccess`. Per ulteriori informazioni, consulta [Policy IAM basate su identità per AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html).

[Poiché Athena utilizza le AWS Serverless Application Repository per creare le funzioni Lambda, il superutente o l'amministratore che crea le funzioni Lambda deve disporre anche di politiche IAM per consentire le query federate Athena.](federated-query-iam-access.md)

## Configurazione delle autorizzazioni per la registrazione del catalogo e le operazioni API sui metadati
<a name="hive-metastore-iam-access-lambda-catalog-registration-and-metadata-api-operations"></a>

[Per l'accesso tramite API alla registrazione del catalogo e alle operazioni sui metadati, puoi utilizzare la policy gestita. AmazonAthenaFullAccess ](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy) Se non si utilizza la policy `AmazonAthenaFullAccess`, aggiungere le seguenti operazioni API alle policy Athena:

------
#### [ 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": [
                "*"
            ]
        }
    ]
}
```

------

## Chiama una funzione Lambda tra le regioni
<a name="hive-metastore-iam-access-lambda-cross-region-invocation"></a>

Per impostazione predefinita, Athena invoca le funzioni Lambda definite nella stessa Regione. Per richiamare una funzione Lambda in Regione AWS una regione diversa da quella in cui vengono eseguite le query Athena, usa l'ARN completo della funzione Lambda. 

L’esempio seguente mostra come un catalogo nella Regione Europa (Francoforte) può specificare una funzione Lambda nella Regione Stati Uniti orientali (Virginia settentrionale) per recuperare i dati dal metastore Hive nella Regione Europa (Francoforte).

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

Quando si specifica l'ARN completo in questo modo, Athena può invocare la funzione Lambda `external-hms-service-new` su `us-east-1` per recuperare i dati del metastore Hive da `eu-central-1`.

**Nota**  
Il catalogo deve essere registrato nello stesso Regione AWS che utilizzi per eseguire le query Athena.

## Chiama una funzione Lambda tra più account
<a name="hive-metastore-iam-access-lambda-cross-account-invocation"></a>

A volte potrebbe essere necessario richiedere l'accesso a un metastore Hive da un altro account. Ad esempio, per eseguire un metastore Hive, è possibile avviare un cluster EMR da un account diverso da quello utilizzato per le query Athena. Gruppi o team diversi potrebbero eseguire metastore Hive con account diversi all'interno del loro VPC. Oppure si potrebbe voler accedere ai metadati provenienti da vari metastore Hive di gruppi o team diversi.

Athena utilizza il [supporto AWS Lambda per l'accesso tra account](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/) per abilitare l'accesso tra account per i metastore Hive.

**Nota**  
Si noti che l'accesso tra account per Athena implica normalmente l'accesso tra account sia per i metadati che per i dati in Amazon S3.

Si consideri il seguente scenario:
+ L’account `111122223333` imposta la funzione Lambda `external-hms-service-new` su us-east-1 in Athena per accedere a un metastore Hive in esecuzione su un cluster EMR.
+ L'account `111122223333` vuole consentire all'account 444455556666 di accedere ai dati del metastore Hive.

Per concedere `444455556666` all'account l'accesso alla funzione Lambda`external-hms-service-new`, account `111122223333` utilizza il comando seguente AWS CLI `add-permission`. Il comando è stato formattato per la leggibilità.

```
$ 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\"}"
}
```

Per verificare l'autorizzazione Lambda, utilizzare il comando `get-policy`, come nell'esempio seguente. Il comando è stato formattato per la leggibilità.

```
$ 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\"}]}"
}
```

Dopo aver aggiunto l'autorizzazione, è possibile utilizzare un ARN completo della funzione Lambda su `us-east-1` come mostrato di seguito quando si definisce un catalogo `ehms`:

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

Per informazioni sulla invocazione tra regioni, vedere [Chiama una funzione Lambda tra le regioni](#hive-metastore-iam-access-lambda-cross-region-invocation) in questo argomento.

### Concedere l’accesso tra account ai dati
<a name="hive-metastore-iam-access-lambda-granting-cross-account-access-to-data"></a>

Prima di poter eseguire query Athena, è necessario concedere l'accesso tra account ai dati in Amazon S3. Questa operazione può essere eseguita in uno dei seguenti modi:
+ Aggiornare la policy dell'elenco di controllo dell'accesso del bucket Amazon S3 con un [ID utente canonico](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html).
+ Aggiungere l'accesso tra account alla policy del bucket Amazon S3.

Ad esempio, aggiungere la policy seguente alla policy del bucket Amazon S3 nell'account `111122223333` per consentire all'account `444455556666` di leggere i dati dalla posizione Amazon S3 specificata.

------
#### [ 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/*" } ]
    }
```

------

**Nota**  
Potrebbe essere necessario concedere l'accesso tra account ad Amazon S3 non solo ai dati, ma anche alla posizione di spill Amazon S3. La funzione Lambda esegue lo spillover dei dati aggiuntivi nella posizione di spill quando la dimensione dell'oggetto di risposta supera una determinata soglia. Vedere l'inizio di questo argomento per una policy di esempio.

Nell'esempio corrente, dopo aver concesso l'accesso tra account a `444455556666,`, `444455556666` può utilizzare il catalogo `ehms` in `account` per eseguire query sulle tabelle definite nell’account `111122223333`.

Nell'esempio seguente, il profilo di SQL Workbench `perf-test-1` è per l’account `444455556666`. La query utilizza il catalogo `ehms` per accedere al metastore Hive e ai dati Amazon S3 nell'account `111122223333`.

![\[Accesso a metastore Hive e dati Amazon S3 tra account in SQL Workbench.\]](http://docs.aws.amazon.com/it_it/athena/latest/ug/images/hive-metastore-iam-access-lambda-1.png)
