

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Autorisation d'accès des fonctions Lambda aux métastores Hive externes
<a name="hive-metastore-iam-access-lambda"></a>

Pour invoquer une fonction Lambda dans votre compte, vous devez créer un rôle disposant des autorisations suivantes :
+ `AWSLambdaVPCAccessExecutionRole` – Autorisation [rôle d'exécution AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) permettant de gérer des interfaces réseau élastiques qui connectent votre fonction à un VPC. Assurez-vous que vous disposez d'un nombre suffisant d'interfaces réseau et d'adresses IP disponibles.
+ `AmazonAthenaFullAccess`— La politique [AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)gérée accorde un accès complet à Athéna.
+ Une politique Simple Storage Service (Amazon S3) pour permettre à la fonction Lambda d'écrire sur S3 et à Athena de lire à partir de S3.

Par exemple, la politique suivante définit l'autorisation pour l'emplacement de déversement `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" ] } ] }
```

------

Chaque fois que vous utilisez des politiques IAM, veillez à respecter les bonnes pratiques IAM. Pour plus d'informations, consultez la rubrique [Bonnes pratiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) du *Guide de l'utilisateur IAM*.

## Création de fonctions Lambda
<a name="hive-metastore-iam-access-lambda-creating-lambda-functions"></a>

Pour créer une fonction Lambda dans votre compte, des autorisations de développement de fonction ou le rôle `AWSLambdaFullAccess` sont nécessaires. Pour de plus amples informations, veuillez consulter la rubrique [Politiques IAM basées sur l'identité pour AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html).

[Comme Athena utilise le AWS Serverless Application Repository pour créer des fonctions Lambda, le superutilisateur ou l'administrateur qui crée des fonctions Lambda doit également disposer de politiques IAM autorisant les requêtes fédérées Athena.](federated-query-iam-access.md)

## Configuration d’autorisations pour les opérations d’enregistrement de catalogue et d’API de métadonnées
<a name="hive-metastore-iam-access-lambda-catalog-registration-and-metadata-api-operations"></a>

Pour accéder à l'API pour l'enregistrement du catalogue et les opérations de métadonnées, vous pouvez utiliser la [politique AmazonAthenaFullAccess gérée](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy). Si vous n’utilisez pas la politique `AmazonAthenaFullAccess`, ajoutez les opérations d’API suivantes à vos politiques 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": [
                "*"
            ]
        }
    ]
}
```

------

## Appel d’une fonction Lambda entre régions
<a name="hive-metastore-iam-access-lambda-cross-region-invocation"></a>

Par défaut, Athena invoque des fonctions Lambda définies dans la même région. Pour appeler une fonction Lambda dans une région Région AWS autre que celle dans laquelle vous exécutez les requêtes Athena, utilisez l'ARN complet de la fonction Lambda. 

L’exemple suivant montre comment un catalogue de la région Europe (Francfort) peut spécifier une fonction Lambda de la région USA Est (Virginie du Nord) pour extraire des données du metastore Hive de la région Europe (Francfort).

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

Lorsque vous spécifiez l'ARN complet de cette manière, Athena peut appeler la fonction Lambda `external-hms-service-new` sur `us-east-1` pour récupérer les données du métastore Hive à partir de `eu-central-1`.

**Note**  
Le catalogue doit être enregistré dans le même répertoire Région AWS que celui que vous utilisez pour exécuter les requêtes Athena.

## Appel d’une fonction Lambda entre comptes
<a name="hive-metastore-iam-access-lambda-cross-account-invocation"></a>

Parfois, vous pouvez avoir besoin d'accéder à un métastore Hive à partir d'un autre compte. Par exemple, vous pouvez exécuter un metastore Hive avec un compte autre que celui utilisé pour les requêtes Athena. Différents groupes ou équipes peuvent exécuter le métastore Hive avec différents comptes à l'intérieur de leur VPC. Vous pouvez également accéder aux métadonnées de différents métastores Hive de différents groupes ou équipes.

Athena utilise la [prise en charge AWS Lambda de l'accès multi-comptes](https://aws.amazon.com/blogs/compute/easy-authorization-of-aws-lambda-functions/) pour permettre l'accès multi-comptes aux métastores Hive.

**Note**  
Notez que l'accès entre comptes pour Athena implique normalement un accès inter-comptes pour les métadonnées et les données dans Simple Storage Service (Amazon S3).

Imaginez le scénario suivant :
+ Le compte `111122223333` configure la fonction Lambda `external-hms-service-new` sur us-east-1 dans Athena pour accéder à un métastore Hive exécuté sur un cluster EMR.
+ Le compte `111122223333` veut autoriser le compte 444455556666 à accéder aux données du métastore Hive.

Pour autoriser `444455556666` un compte à accéder à la fonction Lambda`external-hms-service-new`, account `111122223333` utilise la commande suivante AWS CLI `add-permission`. La commande a été formatée pour être lisible.

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

Pour vérifier l'autorisation Lambda, utilisez la commande `get-policy`, comme dans l'exemple suivant. La commande a été formatée pour être lisible.

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

Après avoir ajouté l'autorisation, vous pouvez utiliser un ARN complet de la fonction Lambda sur `us-east-1` comme suit lorsque vous définissez le catalogue `ehms` :

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

Pour de plus amples informations sur l’invocation entre régions, veuillez consulter [Appel d’une fonction Lambda entre régions](#hive-metastore-iam-access-lambda-cross-region-invocation) plus haut dans cette rubrique.

### Autorisation d’accès intercompte aux données
<a name="hive-metastore-iam-access-lambda-granting-cross-account-access-to-data"></a>

Avant de pouvoir exécuter des requêtes Athena, vous devez accorder l'accès inter-comptes aux données dans Simple Storage Service (Amazon S3). Vous pouvez effectuer cette opération de différentes manières :
+ Mettez à jour la politique de la liste de contrôle d'accès du compartiment Simple Storage Service (Amazon S3) avec un [ID utilisateur canonique](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html).
+ Ajoutez l'accès inter-comptes à la politique de compartiment Simple Storage Service (Amazon S3).

Par exemple, ajoutez la politique suivante à la politique de compartiment Simple Storage Service (Amazon S3) du compte `111122223333` pour permettre au compte `444455556666` de lire des données à partir de l'emplacement Simple Storage Service (Amazon S3) spécifié.

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

------

**Note**  
Il se peut que vous deviez accorder un accès inter-comptes à Simple Storage Service (Amazon S3) non seulement à vos données, mais aussi à votre emplacement de déversement Simple Storage Service (Amazon S3). Votre fonction Lambda déverse des données supplémentaires à l'emplacement de déversement lorsque la taille de l'objet de réponse dépasse un seuil donné. Veuillez consulter le début de cette rubrique pour obtenir un exemple de politique.

Dans l'exemple actuel, une fois que l'accès entre comptes est accordé à `444455556666,`, `444455556666` peut utiliser le catalogue `ehms` dans son propre `account` pour interroger les tables qui sont définies dans le compte `111122223333`.

Dans l'exemple suivant, le profil SQL Workbench `perf-test-1` est pour le compte `444455556666`. La requête utilise le catalogue `ehms` pour accéder au métastore Hive et aux données Simple Storage Service (Amazon S3) du compte `111122223333`.

![\[Accès inter-comptes aux données du métastore Hive et de Simple Storage Service (Amazon S3) dans SQL Workbench.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/hive-metastore-iam-access-lambda-1.png)
