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

# Accéder aux données Iceberg en toute sécurité

> Cet article explique comment les clients de ClickHouse Cloud peuvent accéder en toute sécurité aux données Apache Iceberg stockées dans un stockage objet grâce à l’accès basé sur les rôles.

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

ClickHouse Cloud prend en charge le contrôle d’accès sécurisé basé sur les rôles pour les données Iceberg stockées dans un stockage objet (généralement S3) grâce à une relation d’approbation AWS IAM basée sur un ARN. Ce guide suit la même approche de configuration sécurisée que [Accessing S3 data securely](/docs/fr/products/cloud/guides/data-sources/accessing-s3-data-securely), et ajoute une configuration spécifique à Iceberg dans ClickHouse.

<div id="overview">
  ## Vue d’ensemble
</div>

* Obtenez l’ID du rôle de service ClickHouse Cloud (IAM).
* Créez un rôle IAM dans votre compte AWS que ClickHouse peut assumer.
* Associez au rôle des politiques d’objet et de catalogue spécifiques à Iceberg.
* Utilisez les fonctions de table Iceberg ou le moteur de table IcebergS3 avec des identifiants liés à un rôle.

<div id="obtaining-the-clickhouse-service-iam-role-arn">
  ## Obtenir l’ID du rôle de service ClickHouse (ARN)
</div>

<Steps>
  <Step title="1. Connectez-vous à votre compte ClickHouse Cloud." id="login" />

  <Step title="2. Sélectionnez le service ClickHouse sur lequel vous souhaitez interroger les données Iceberg." id="select-service" />

  <Step title={<>3. Accédez à l’onglet <strong>Settings</strong>.</>} id="settings-tab" />

  <Step title={<>4. Faites défiler la page jusqu’à <strong>Network security information</strong>.</>} id="network-security-information" />

  <Step title={<>5. Copiez la valeur <strong>Service role ID (IAM)</strong>.</>} id="service-role-iam-value">
    Cet ARN est requis dans la stratégie d’approbation du rôle AWS IAM qui accédera à vos données Iceberg.

    <Image img="https://mintcdn.com/private-7c7dfe99/7KTNIE_ER4ouwRNt/images/cloud/security/secures3_arn.webp?fit=max&auto=format&n=7KTNIE_ER4ouwRNt&q=85&s=1b8e4dd1eccec32d9a7308147df29e06" size="lg" alt="Obtention de l’ARN du rôle IAM du service ClickHouse" border width="1222" height="254" data-path="images/cloud/security/secures3_arn.webp" />
  </Step>
</Steps>

<div id="setting-up-iam-assume-role">
  ## Configurer l’action d’assumer un rôle IAM
</div>

<Steps>
  <Step title="1. Connectez-vous à AWS et accédez au service IAM." id="aws-iam-service" />

  <Step title="2. Sélectionnez Roles, puis Create role." id="create-role">
    Sélectionnez `Trusted entity type` comme `Custom trust policy`, puis saisissez les valeurs en vous basant sur l’étape 3.
  </Step>

  <Step title="3. Ajoutez les politiques d’approbation et IAM." id="add-trust-iam-policies">
    Remplacez `{service-role-id}` par le Service Role ID (IAM) de votre instance ClickHouse.

    ```json theme={null}
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ClickHouseServiceRoleTrustPolicy",
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Principal": {
            "AWS": "{service-role-id}"  
          }
        },
        {
          "Sid": "ReadOnlyIcebergS3IAMPolicy",
          "Effect": "Allow",
          "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket",
            "s3:GetObject",
            "s3:ListMultipartUploadParts",
            "s3:GetObjectVersion",
            "s3:ListBucketVersions"
          ],
          "Resource": [
            "arn:aws:s3:::{your-bucket}",
            "arn:aws:s3:::{your-bucket}/*"
          ]
        },
        {
          "Sid": "OptionalGlueDataCatalogIAMPolicy",
          "Effect": "Allow",
          "Action": [
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetTables",
            "glue:GetPartition",
            "glue:GetPartitions"
          ],
          "Resource": "arn:aws:glue:{region}:{account-id}:*"
        }
      ]
    }
    ```

    <Note>
      Pour les charges de travail en lecture/écriture, la politique IAM doit inclure `s3:PutObject`, `s3:DeleteObject` ainsi que les actions de modification des métadonnées pour Iceberg. L’exemple ci-dessus est volontairement restrictif et en lecture seule.

      Si vous avez besoin d’une isolation plus forte, exigez que les requêtes proviennent des points de terminaison VPC de ClickHouse Cloud. Pour plus d’informations sur cette option, consultez [Contrôle avancé et sécurisé des actions S3](/docs/fr/products/cloud/guides/data-sources/accessing-s3-data-securely#advanced-action-control).
    </Note>
  </Step>

  <Step title="4. Finalisez la création du rôle." id="finish-role-creation">
    a. Cliquez sur Next, puis encore sur Next dans l’écran d’attribution des permissions.

    b. Ajoutez un nom (par ex. `iceberg-role-for-clickhouse`) et une description.

    c. Ajoutez des tags (facultatif).

    d. Vérifiez les politiques.

    e. Sélectionnez `Create role`.
  </Step>

  <Step title={<>5. Copiez le nouvel <strong>IAM Role Arn</strong> une fois le rôle créé.</>} id="copy-role-arn" />
</Steps>

<div id="configure-iceberg-access">
  ## Configurer l’accès à Iceberg dans ClickHouse Cloud
</div>

<div id="iceberg-table-function-with-role-arn">
  ### Option A : fonction de table Iceberg avec ARN de rôle
</div>

Utilisez la fonction de table `icebergS3` avec l’option `NOSIGN` et des identifiants associés à un rôle. ClickHouse Cloud appellera STS pour assumer le rôle.

```sql theme={null}
SELECT count(*)
FROM icebergS3(
  'https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/',
  'NOSIGN',
  extra_credentials(role_arn='arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse', role_session_name='iceberg-session')
);
```

<div id="persistent-iceberg-table-engine">
  ### Option B : Moteur de table Iceberg persistant
</div>

```sql theme={null}
CREATE TABLE iceberg_secure (
  id UInt64,
  event_date Date,
  data String
)
ENGINE = IcebergS3(
  'https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/',
  'NOSIGN',
  extra_credentials(role_arn='arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse')
);
```

<div id="glue-catalog-plus-icebergs3">
  ### Option C : catalogue Glue + IcebergS3
</div>

```sql theme={null}
CREATE TABLE my_db.my_table
ENGINE = IcebergS3(
  's3://{your-bucekt}/warehouse/{db}/{table}/',
  'NOSIGN',
  extra_credentials(role_arn='arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse')
)
SETTINGS
  catalog_type = 'glue',
  warehouse = '{your-warehouse}',
  storage_endpoint = 's3://{your-bucket}',
  region = '{region}'
  aws_role_arn = 'arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse';
```

> Remarque : lorsque vous utilisez le catalogue Glue, assurez-vous que votre rôle IAM dispose des autorisations de lecture et de listage pour S3 et Glue.

<div id="datalake-catalog-for-glue">
  ### Option D : catalogue DataLake pour Glue
</div>

<Note>
  Le catalogue DataLake pour Glue est prévu dans la version 26.2.
</Note>

```sql theme={null}
CREATE DATABASE glue_test2
ENGINE = DataLakeCatalog
SETTINGS 
    catalog_type = 'glue', 
    region = {region}, 
    aws_role_arn = 'arn:aws:iam::{account-id}:role/iceberg-role-for-clickhouse',
    aws_role_session_name = {session-name},
    SETTINGS
    allow_database_glue_catalog = 1;
```

<div id="validate-access">
  ## Vérifier l’accès
</div>

1. Exécutez une requête simple :

```sql theme={null}
SELECT * FROM icebergS3('https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/', 'NOSIGN')
LIMIT 5;
```

2. Vérifiez la présence d’erreurs IAM telles que `AccessDenied` ou `InvalidAccessKeyId`.

<div id="troubelshooting">
  ## Dépannage
</div>

* Vérifiez l’ARN du rôle dans les paramètres du service ClickHouse Cloud.
* Assurez-vous que votre bucket et vos objets se trouvent dans la même région que celle utilisée pour les requêtes Iceberg, afin de réduire la latence et les coûts.
* Vérifiez que le chemin de la table Iceberg pointe vers un emplacement de métadonnées Iceberg valide (fichiers `metadata/v1/...` sous la racine de la table).
* En mode catalogue, vérifiez les métadonnées Glue et la visibilité des partitions dans la console AWS Glue.
