Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Como acessar dados do Iceberg com segurança

O ClickHouse Cloud oferece suporte ao acesso seguro baseado em funções a dados do Iceberg armazenados em armazenamento de objetos (normalmente no S3) por meio de uma relação de confiança do AWS IAM baseada em ARN. Este guia segue o mesmo padrão de configuração segura de Acessando dados do S3 com segurança e adiciona a configuração específica do Iceberg no ClickHouse.

Visão geral

  • Obtenha o ID da função de serviço do ClickHouse Cloud (IAM).
  • Crie uma IAM função na sua conta AWS que o ClickHouse possa assumir.
  • Anexe à função políticas específicas do Iceberg para objetos e catálogos.
  • Use funções de tabela do Iceberg ou o mecanismo de tabela IcebergS3 com credenciais baseadas em IAM função.

Obtenha o ID da função de serviço do ClickHouse (ARN)

1. Faça login na sua conta do ClickHouse Cloud.

2. Selecione o serviço do ClickHouse no qual você deseja consultar dados do Iceberg.

[object Object]

[object Object]

[object Object]

Esse ARN é necessário para a política de confiança da função do IAM da AWS que acessará seus dados do Iceberg.

Como obter o ARN da função do IAM do serviço ClickHouse

Configurar a assunção de função no IAM

1. Faça login na AWS e acesse o serviço IAM.

2. Selecione Roles e, em seguida, Create função.

Selecione Trusted entity type como Custom trust policy e insira os valores com base na etapa 3.

3. Adicione as políticas de confiança e do IAM.

Substitua {service-role-id} pelo Service Role ID (IAM) da sua instância do ClickHouse.

{
  "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}:*"
    }
  ]
}

4. Conclua a criação da função.

a. Clique em Next e depois em Next novamente na tela de atribuição de permissões.

b. Adicione um nome (por exemplo, iceberg-role-for-clickhouse) e uma descrição.

c. Adicione tags (opcional).

d. Revise as políticas.

e. Selecione Create função.

[object Object]

Configure o acesso ao Iceberg no ClickHouse Cloud

Opção A: função de tabela Iceberg com ARN da função

Use a função de tabela icebergS3 com a opção NOSIGN e credenciais baseadas em função. O ClickHouse Cloud chamará o STS para assumir a função.

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')
);

Opção B: mecanismo de tabela Iceberg persistente

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')
);

Opção C: catálogo do Glue + IcebergS3

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';

Observação: ao usar o catálogo do Glue, verifique se sua função do IAM tem permissões de leitura e listagem no S3 e no Glue.

Opção D: DataLake Catalog para Glue

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;

Verifique o acesso

  1. Execute uma consulta simples:
SELECT * FROM icebergS3('https://{your-bucket}.s3.{region}.amazonaws.com/{iceberg-path}/', 'NOSIGN')
LIMIT 5;
  1. Verifique se há erros de IAM, como AccessDenied ou InvalidAccessKeyId.

Solução de problemas

  • Verifique o ARN da função nas configurações do serviço ClickHouse Cloud.
  • Certifique-se de que seu bucket/objetos estejam na mesma região das consultas ao Iceberg para reduzir a latência e o custo.
  • Confirme se o caminho da tabela Iceberg aponta para um local válido de metadados do Iceberg (arquivos metadata/v1/... no diretório raiz da tabela).
  • No modo de catálogo, verifique os metadados do Glue e a visibilidade das partições no console do AWS Glue.
Navigation