Este guia mostra como clientes do ClickHouse Cloud podem usar o controle de acesso baseado em função para se autenticar no Amazon Simple Storage Service (S3) e acessar seus dados com segurança. Antes de partir para a configuração do acesso seguro ao S3, é importante entender como isso funciona. Abaixo está uma visão geral de como os serviços do ClickHouse podem acessar buckets privados do S3 assumindo uma função na conta da AWS dos clientes.

Essa abordagem permite que os clientes gerenciem todo o acesso aos seus buckets do S3 em um único lugar (a política do IAM da função assumida), sem precisar revisar todas as políticas de bucket para adicionar ou remover acessos. Na seção abaixo, você aprenderá a configurar isso.
Obtenha o ARN da função do IAM do seu serviço ClickHouse
-
Faça login na sua conta do ClickHouse Cloud.
-
Selecione o serviço ClickHouse para o qual você deseja criar a integração
-
Selecione a guia Configurações
-
Role para baixo até a seção Informações de segurança da rede, na parte inferior da página
-
Copie o valor de Service role ID (IAM) do serviço, como mostrado abaixo.

Configurar a assunção de função do IAM
A assunção de função do IAM pode ser configurada de duas maneiras:
Implantação com stack do CloudFormation
-
Faça login na sua conta da AWS no navegador com um usuário do IAM que tenha permissão para criar e gerenciar função do IAM.
-
Acesse a seguinte URL do CloudFormation para preencher a stack do CloudFormation.
-
Digite (ou cole) o Service role ID (IAM) do seu serviço, obtido anteriormente, no campo intitulado "ClickHouse Instance Roles" Você pode colar o ID da service role exatamente como ele aparece no Cloud Console.
-
Digite o nome do seu bucket no campo intitulado "Bucket Names". Se a URL do seu bucket for
https://ch-docs-s3-bucket.s3.eu-central-1.amazonaws.com/clickhouseS3/, então o nome do bucket serách-docs-s3-bucket.
- Configure a stack do CloudFormation. Veja abaixo informações adicionais sobre esses parâmetros.
| Parameter | Default Value | Description |
|---|---|---|
| RoleName | ClickHouseAccess-001 | Nome da nova função do IAM que o ClickHouse Cloud usará para acessar seu bucket do S3. |
| Role Session Name | * | Role Session Name pode ser usado como um segredo compartilhado para proteger ainda mais seu bucket. |
| ClickHouse Instance Roles | Lista separada por vírgulas de funções do IAM de serviço do ClickHouse que podem usar esta integração segura com S3. | |
| Bucket Access | Read | Define o nível de acesso aos buckets informados. |
| Bucket Names | Lista separada por vírgulas dos nomes dos buckets aos quais esta função do IAM terá acesso. Observação: use o nome do bucket, não o ARN completo do bucket. |
-
Marque a caixa de seleção I acknowledge that AWS CloudFormation might create IAM resources with custom names.
-
Clique no botão Create stack, no canto inferior direito
-
Verifique se a stack do CloudFormation é concluída sem erro.
-
Selecione a Stack recém-criada e, em seguida, selecione a guia Outputs da stack do CloudFormation
-
Copie o valor de RoleArn desta integração, que é o que você precisará para acessar seu bucket do S3.

Criar função do IAM manualmente
-
Faça login na sua conta da AWS no navegador com um usuário do IAM que tenha permissão para criar e gerenciar funções do IAM.
-
Acesse o Console do serviço IAM
-
Crie uma nova função do IAM com a seguinte política de IAM e de confiança. Substitua
{ClickHouse_IAM_ARN}pelo ARN da função do IAM pertencente à sua instância do ClickHouse.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "{ClickHouse_IAM_ARN}"
},
"Action": "sts:AssumeRole"
}
]
}Política de IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}"
],
"Effect": "Allow"
},
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}/*"
],
"Effect": "Allow"
}
]
}- Copie o novo ARN da função do IAM após a criação, pois ele é necessário para acessar seu bucket do S3.
Acesse seu bucket do S3 com a role ClickHouseAccess
O ClickHouse Cloud permite especificar extra_credentials como parte da função de tabela S3.
Abaixo está um exemplo de como executar uma consulta usando a role recém-criada, copiada acima.
DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'))Abaixo está um exemplo de consulta que usa role_session_name como segredo compartilhado para consultar dados de um bucket.
Se role_session_name não estiver correto, essa operação falhará.
DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001', role_session_name = 'secret-role-name'))Controle avançado de ações
Para um controle de acesso mais rigoroso, é possível restringir a política do bucket para aceitar apenas solicitações originadas dos endpoints da VPC do ClickHouse Cloud usando a condição aws:SourceVpce. Para obter os endpoints da VPC da sua região do ClickHouse Cloud, abra um terminal e execute:
# Replace <your-region> with your ClickHouse Cloud region
curl -s https://api.clickhouse.cloud/static-ips.json | jq -r '.aws[] | select(.region == "<your-region>") | .s3_endpoints[]'Em seguida, adicione uma regra de negação à política do IAM com os endpoints retornados:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": [
"arn:aws:s3:::{BUCKET_NAME}",
"arn:aws:s3:::{BUCKET_NAME}/*"
]
},
{
"Sid": "VisualEditor3",
"Effect": "Deny",
"Action": [
"s3:GetObject"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": [
"{ClickHouse VPC ID from your S3 region}",
"{ClickHouse VPC ID from your S3 region}",
"{ClickHouse VPC ID from your S3 region}"
]
}
}
}
]
}Para mais detalhes sobre o acesso aos endpoints dos serviços do ClickHouse Cloud, consulte Endereços IP da Cloud.