> ## 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.

# Redshift

## Prérequis

* Si la posture de sécurité de votre Redshift nécessite la mise en liste blanche d'IP, ayez l'IP statique de notre service de synchronisation de données à portée de main lors des étapes suivantes. Elle sera requise à l'étape 2.
* Par défaut, l'authentification Redshift utilise un accès basé sur les rôles. Vous aurez besoin de la politique d'approbation préremplie avec l'identifiant du service de synchronisation des données pour accorder l'accès. Elle doit 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 utilisateur limité dans Redshift

1. Connectez-vous à Redshift à l'aide du client SQL.
2. Exécutez la requête suivante pour créer un utilisateur qui écrira les données (remplacez `<password>` par un mot de passe de votre choix).

```sql theme={null}
CREATE USER <username> PASSWORD '<password>';
```

> 📘 Création d'un utilisateur sans mot de passe.
>
> L'authentification basée sur les rôles ne nécessite pas de mot de passe. Vous pouvez créer l'utilisateur avec `CREATE USER <username> PASSWORD DISABLE;`.

3. Accordez à l'utilisateur les privilèges `create` et `temporary` sur la base de données. `create` permet au service de créer de nouveaux schémas et `temporary` permet au service de créer des tables temporaires.

```sql theme={null}
GRANT CREATE, TEMPORARY ON DATABASE <database> TO <username>;
```

> 📘 Le schéma sera créé lors de la première synchronisation
>
> Le nom de schéma fourni à l'étape 4 sera créé lors de la première connexion. Il n'est pas nécessaire de le créer manuellement à l'avance dans la destination.

> 📘 🚧 Si le `schema` existe déjà
> Par défaut, le service crée un nouveau schéma en fonction de la configuration de destination. Si vous préférez créer le schéma vous-même avant de connecter la destination, vous devez vous assurer que l'utilisateur écrivain dispose des autorisations appropriées sur le schéma, en utilisant `GRANT ALL ON schema <schema> TO <username>;`
>
> Une fois que vous avez accordé l'autorisation `GRANT ALL` sur le schéma, vous pouvez supprimer en toute sécurité l'autorisation `CREATE` sur la base de données (mais vous devez conserver l'autorisation `TEMPORARY` sur la base de données).

## Étape 2 : Mettre en liste blanche la connexion

1. Dans la console Redshift, cliquez sur **Clusters** et notez le nom du **cluster**.
2. Sélectionnez le cluster que vous souhaitez connecter.
3. Dans le volet **General information**, notez les détails du **Endpoint**. Vous devrez peut-être utiliser l'icône **copy** pour copier les détails complets afin de découvrir l'endpoint complet et le numéro de port.

![](https://storage.googleapis.com/prequel_docs/images/redshift-endpoint-details.png "redshift endpoint details.png")

4. Cliquez sur l'onglet **Properties**.
5. Faites défiler jusqu'à la section **Network and security settings**.
6. Dans le champ « VPC security group », sélectionnez un groupe de sécurité pour l'ouvrir.

![](https://storage.googleapis.com/prequel_docs/images/redshift-vpc-security-groups.png "redshift vpc s groups.png")

7. Dans la fenêtre Security Groups, cliquez sur **Inbound rules**.
8. Cliquez sur **Edit inbound rules**.
9. Dans la fenêtre Edit the Inbound rules, suivez les étapes ci-dessous pour créer des règles TCP personnalisées pour l'IP statique :
   a. Sélectionnez **Custom TCP** dans le menu déroulant.
   b. Saisissez le numéro de port Redshift. (probablement `5439`)
   c. Saisissez l'**IP statique**.
   d. Cliquez sur **Add rule**.

## Étape 3 : Créer un bucket de staging

### Créer un bucket de staging

1. Accédez à la page du service S3.
2. Cliquez sur Create bucket.
3. Saisissez un **Bucket name** et modifiez les paramètres par défaut selon vos besoins. Remarque : **Object Ownership** peut être réglé sur « **ACLs disabled** » et **Block Public Access settings for this bucket** peut être réglé 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

1. Accédez à 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 `BUCKET_NAME` par le nom du bucket choisi ci-dessus, et REGION\_NAME, ACCOUNT\_ID, CLUSTER\_NAME, USERNAME et DATABASE\_NAME par les valeurs Redshift appropriées.
   1. **Remarque** : la première autorisation de bucket dans la liste s'applique à `BUCKET_NAME` tandis que la deuxième autorisation s'applique uniquement au contenu du bucket — `BUCKET_NAME/*` — une distinction importante.

```json JSON policy theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::BUCKET_NAME"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::BUCKET_NAME/*"
    },
    {
      "Effect": "Allow",
      "Action": "redshift:GetClusterCredentials",
      "Resource": [
        "arn:aws:redshift:REGION_NAME:ACCOUNT_ID:dbuser:CLUSTER_NAME/USERNAME",
        "arn:aws:redshift:REGION_NAME:ACCOUNT_ID:dbname:CLUSTER_NAME/DATABASE_NAME"
      ]
    }
  ]
}
```

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

### Créer le rôle

1. Accédez à la page du service **IAM**.
2. Accédez à l'onglet de navigation **Roles** et cliquez sur **Create role**.
3. Sélectionnez **Custom trust policy** et collez la politique d'approbation fournie (depuis le prérequis) pour autoriser l'accès AssumeRole à ce rôle. Cliquez sur **Next**.
4. Ajoutez la politique d'autorisations créée ci-dessus et cliquez sur **Next**.
5. Saisissez un **Role name**, par exemple, `transfer-role`, et 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 Redshift 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 le préférez.
>
> 1. Accédez à la page du service **IAM**.
> 2. Accédez à l'onglet de navigation **Users** et cliquez sur **Add users**.
> 3. Saisissez un **User name** pour le service, par exemple, `transfer-service`, 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. Dans l'écran **Success**, notez le **Access key ID** et le **Secret access key**.

## Étape 4 : Ajouter votre destination

1. Partagez en toute sécurité vos **host**, **database**, **cluster**, votre **schema** choisi, **IAM role ARN** et les **détails du bucket de staging** avec nous pour finaliser la connexion.
