> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metronome.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Athena

## Prérequis

* Par défaut, l'authentification Athena utilise un accès basé sur les rôles. Vous aurez besoin de la politique de confiance pré-renseignée avec l'identifiant du service de synchronisation des données pour accorder l'accès. Elle devrait ressembler à l'objet JSON suivant avec un identifiant de compte de service approprié :

```json theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRoleWithWebIdentity"],
      "Principal": {
        "Federated": "accounts.google.com"
      },
      "Condition": {
        "StringEquals": {
          "accounts.google.com:sub": "<some_service_account_identifier>"
        }
      }
    }
  ]
}
```

## Étape 1 : créer un bucket de destination, une politique de service et un rôle

### Créer le bucket cible Athena

Suivez ces étapes pour créer un bucket utilisé pour stocker temporairement les données avant leur transfert vers une destination.

1. Naviguez vers la page du service **S3**.
2. Cliquez sur **Create bucket**.
3. Saisissez un **Bucket name**, sélectionnez une **AWS Region** et modifiez les paramètres par défaut selon vos besoins. Remarque : **Object Ownership** peut être défini sur « **ACLs disabled** » et **Block Public Access settings for this bucket** peut être défini sur « **Block all public access** » comme recommandé par AWS. Notez le nom du bucket et la région AWS.
4. Cliquez sur **Create bucket**.

### Créer la politique d'accès Athena

1. Naviguez vers la page du service **IAM**, cliquez sur l'onglet de navigation **Policies**, puis cliquez sur **Create policy**.
2. Cliquez sur l'onglet JSON et collez la politique suivante, en veillant à remplacer `ACCOUNT_ID`, `WORKGROUP`, `BUCKET_NAME` et `SCHEMA` par vos informations de compte.
   * `WORKGROUP` doit être `primary` sauf indication contraire lors de la configuration de la connexion.
   * `BUCKET` doit faire référence au bucket créé à l'étape précédente.
   * `SCHEMA` utilisé ci-dessous n'a pas besoin d'être créé à l'avance. S'il n'existe pas, il sera créé automatiquement avant le transfert des données.

```json JSON policy theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAthenaAccess",
      "Effect": "Allow",
      "Action": [
        "athena:GetQueryResults",
        "athena:StartQueryExecution",
        "athena:StartSession",
        "athena:GetDatabase",
        "athena:GetDataCatalog",
        "athena:GetWorkGroup",
        "athena:GetTableMetadata",
        "athena:GetQueryExecution"
      ],
      "Resource": ["arn:aws:athena:*:ACCOUNT_ID:workgroup/WORKGROUP"]
    },
    {
      "Sid": "AllowGlueAccessToDestinationDatabaseAndTables",
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabases",
        "glue:GetDatabase",
        "glue:GetTables",
        "glue:GetTable",
        "glue:GetPartitions",
        "glue:CreateTable",
        "glue:CreateDatabase",
        "glue:UpdateTable",
        "glue:DeleteTable"
      ],
      "Resource": [
        "arn:aws:glue:*:ACCOUNT_ID:catalog",
        "arn:aws:glue:*:ACCOUNT_ID:database/SCHEMA",
        "arn:aws:glue:*:ACCOUNT_ID:database/default",
        "arn:aws:glue:*:ACCOUNT_ID:table/SCHEMA/*"
      ]
    },
    {
      "Sid": "AllowS3AccessToBucket",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*"]
    }
  ]
}
```

> 📘 Permissions Athena vs. S3
>
> Comme Athena utilise S3 comme couche de stockage sous-jacente, l'accès aux ressources demandé dans la politique est limité par des permissions spécifiques aux ressources dans les actions S3.

> 📘 Schema vs. Database
>
> Lors de l'onboarding de la destination, il vous sera demandé de fournir à la fois un « schema » et une « database ». Bien que ces termes soient essentiellement synonymes dans Athena, ils sont utilisés ici à deux fins différentes :
>
> * `schema` doit être le nom du dossier dans S3 sous lequel les données finales seront écrites.
> * `database` doit être le nom du dossier dans S3 dans lequel les résultats de requêtes Athena sont écrits (c'est-à-dire les données générées automatiquement `athena_output/`).

3. Cliquez sur **Review**, choisissez un **name** pour la politique, par exemple `transfer-service-policy` (cela sera référencé à l'étape suivante), ajoutez une description et cliquez sur **Create policy**.

### Créer le rôle

1. Naviguez vers la page du service **IAM**.
2. Naviguez vers l'onglet de navigation **Roles** et cliquez sur **Create role**.
3. Sélectionnez **Custom trust policy** et collez la politique de confiance fournie (à partir du prérequis) pour autoriser l'accès AssumeRole à ce rôle. Cliquez sur **Next**.
4. Ajoutez la politique de permissions créée ci-dessus, puis cliquez sur **Next**.
5. Saisissez un **Role name**, par exemple `transfer-role`, puis cliquez sur **Create role**.
6. Une fois créé avec succès, recherchez le rôle créé dans la liste des rôles, cliquez sur le nom du rôle et notez la valeur **ARN**.

> 🚧 Méthode d'authentification alternative : utilisateur AWS avec HMAC Access Key ID et Secret Access Key
> L'authentification basée sur les rôles est le mode d'authentification préféré pour Athena selon les recommandations d'AWS. Cependant, HMAC Access Key ID et Secret Access Key est une méthode d'authentification alternative qui peut être utilisée si vous préférez.
>
> 1. Naviguez vers la page du service **IAM**.
> 2. Naviguez vers l'onglet de navigation **Users** et cliquez sur **Add users**.
> 3. Saisissez un **User name** pour le service, par exemple `transfer-service`, puis cliquez sur **Next**. Sous **Select AWS access type**, sélectionnez l'option **Access key - Programmatic access**. Cliquez sur **Next: Permissions**.
> 4. Cliquez sur l'option **Attach existing policies directly**, et recherchez le nom de la politique créée à l'étape précédente. Sélectionnez la politique et cliquez sur **Next: Tags**.
> 5. Cliquez sur **Next: Review** et cliquez sur **Create user**.
> 6. Sur l'écran **Success**, notez l'**Access key ID** et la **Secret access key**.

## Étape 2 : ajouter votre destination

1. Partagez en toute sécurité avec nous votre **database**, **schema**, **workgroup**, **bucket name**, **bucket region** et **IAM Role ARN** pour finaliser la connexion.
