Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Acceder de forma segura a datos en S3

Esta guía muestra cómo los clientes de ClickHouse Cloud pueden aprovechar el acceso basado en roles para autenticarse con Amazon Simple Storage Service (S3) y acceder de forma segura a sus datos. Antes de entrar en la configuración del acceso seguro a S3, es importante entender cómo funciona. A continuación, se ofrece una visión general de cómo los servicios de ClickHouse pueden acceder a buckets de S3 privados al asumir un rol dentro de la cuenta de AWS del cliente.

Descripción general del acceso seguro a S3 con ClickHouse

Este enfoque permite a los clientes gestionar todo el acceso a sus buckets de S3 desde un único lugar (la política de IAM del rol asumido), sin tener que revisar todas las políticas de sus buckets para añadir o quitar acceso. En la sección siguiente, aprenderá a configurarlo.

Obtén el ARN del rol de IAM de tu servicio de ClickHouse

  1. Inicia sesión en tu cuenta de ClickHouse Cloud.

  2. Selecciona el servicio de ClickHouse para el que quieres crear la integración

  3. Selecciona la pestaña Settings

  4. Desplázate hacia abajo hasta la sección Network security information, al final de la página

  5. Copia el valor de ID del rol de servicio (IAM) correspondiente al servicio, como se muestra a continuación.

Obtención del ARN del rol de IAM del servicio de ClickHouse

Configurar la asunción de roles de IAM

La asunción de roles de IAM se puede configurar de una de estas dos maneras:

Implementación con una pila de CloudFormation

  1. Inicie sesión en su cuenta de AWS desde el navegador web con un usuario de IAM que tenga permiso para crear y administrar roles de IAM.

  2. Visite la siguiente URL de CloudFormation para rellenar la pila de CloudFormation.

  3. Introduzca (o pegue) el ID del rol de servicio (IAM) de su servicio que obtuvo anteriormente en el campo titulado "ClickHouse Instance Roles" Puede pegar el ID del rol de servicio exactamente como aparece en la Cloud Console.

  4. Introduzca el nombre de su bucket en el campo titulado "Bucket Names". Si la URL de su bucket es https://ch-docs-s3-bucket.s3.eu-central-1.amazonaws.com/clickhouseS3/, entonces el nombre del bucket es ch-docs-s3-bucket.

  1. Configure la pila de CloudFormation. A continuación se ofrece información adicional sobre estos parámetros.
Parámetro Valor predeterminado Descripción
RoleName ClickHouseAccess-001 El nombre del nuevo rol que ClickHouse Cloud usará para acceder a su bucket de S3.
Role Session Name * Role Session Name puede usarse como un secreto compartido para proteger aún más su bucket.
ClickHouse Instance Roles Lista separada por comas de los roles de IAM del servicio de ClickHouse que pueden usar esta integración segura con S3.
Bucket Access Read Establece el nivel de acceso para los buckets proporcionados.
Bucket Names Lista separada por comas de los nombres de bucket a los que este rol tendrá acceso. Nota: use el nombre del bucket, no el ARN completo del bucket.
  1. Seleccione la casilla I acknowledge that AWS CloudFormation might create IAM resources with custom names.

  2. Haga clic en el botón Create stack en la esquina inferior derecha

  3. Asegúrese de que la pila de CloudFormation se complete sin errores.

  4. Seleccione la pila recién creada y, a continuación, la pestaña Outputs de la pila de CloudFormation

  5. Copie el valor de RoleArn de esta integración, que es lo que necesita para acceder a su bucket de S3.

Salida de la pila de CloudFormation que muestra el ARN del rol de IAM

Crear manualmente un rol de IAM

  1. Inicie sesión en su cuenta de AWS desde el navegador web con un usuario de IAM que tenga permisos para crear y administrar roles de IAM.

  2. Vaya a la consola del servicio IAM

  3. Cree un nuevo rol de IAM con la siguiente política de IAM y de confianza. Sustituya {ClickHouse_IAM_ARN} por el ARN del rol de IAM correspondiente a su instancia de 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"
        }
    ]
}
  1. Copia el nuevo IAM Role Arn una vez creado, ya que es necesario para acceder a tu bucket de S3.

Acceda a su bucket de S3 con el rol ClickHouseAccess

ClickHouse Cloud le permite especificar extra_credentials como parte de la función de tabla S3. A continuación se muestra un ejemplo de cómo ejecutar una consulta con el rol recién creado que se copió arriba.

DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'))

A continuación se muestra una consulta de ejemplo que usa role_session_name como secreto compartido para consultar datos de un bucket. Si role_session_name no es correcto, esta operación fallará.

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

Control avanzado de acciones

Para un control de acceso más estricto, es posible restringir la policy del bucket para que solo acepte solicitudes que se originen en los endpoints de VPC de ClickHouse Cloud mediante la condición aws:SourceVpce. Para obtener los endpoints de VPC de su región de ClickHouse Cloud, abra una terminal y ejecute:

# 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[]'

A continuación, agregue una regla de denegación a la política de IAM con los endpoints obtenidos:

{
        "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 obtener más información sobre cómo acceder a los endpoints de los servicios de ClickHouse Cloud, consulta Direcciones IP de Cloud.

Navigation