Cómo utilizar SSL Verify con AWS Wrangler

0

AWS Wrangler proporciona una interfaz conveniente para consumir objetos S3 como marcos de datos pandas. Quiero usar esto en lugar de clientes, recursos o sesiones de boto3 cuando obtengo objetos. También necesito usar la verificación SSL.

El siguiente código de cliente boto3 funciona con el certificado SSL Aries Root (!)

import awswrangler as wr
import boto3
import os

aries_cert = os.environ['ARIES_CERT']

s3_session = boto3.Session(
    aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
    region_name="us-east-1"
)
s3_client = s3_session.client(
    service_name="s3",
    endpoint_url="https://MY-ENDPOINT.com",
    use_ssl=True,
    verify=aries_cert,
    aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
    aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'),
    config=botocore.config.Config(
        read_timeout=600,
        connect_timeout=600,
        retries={"max_attempts": 3}
    )
)

bucket, prefix = path.split('/', 1)
bucket = bucket if not bucket.startswith('s3://') else bucket.split('s3://')[1]
obj = s3_client.get_object(Bucket=bucket, Key=prefix)
# Do stuff with `obj['Body'].read()`

Este código de aws wrangler también funciona (sin el certificado de cliente TLS (SSL?)):

import awswrangler as wr
import boto3
import botocore
import os

wr.config.s3_endpoint_url = "https://MY-ENDPOINT.com"

session = boto3.Session(
    aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
    region_name="us-east-1"
)
path = f's3://{path}' if not path.startswith('s3://') else path

df = wr.s3.read_parquet(
    path=path,
    dataset=True,
    boto3_session=session
)

Pero luego, cuando incluyo el certificado de cliente TLS (SSL?), La lectura falla:

wr.config.botocore_config = botocore.config.Config(
    retries={"max_attempts": 3},
    connect_timeout=600,
    read_timeout=600,
    client_cert=os.getenv("ARIES_CERT")
)
df = wr.s3.read_parquet(
    path=path,
    dataset=True,
    boto3_session=session
)

Mensaje de error:

SSLError: SSL validation failed for https://MY-ENDPOINT.com/MY-BUCKET?list-type=2&prefix=MY-PREFIX-BLAH-BLAH.parquet%2F&max-keys=1000&encoding-type=url [SSL] PEM lib (_ssl.c:3524)

¿Alguna idea de lo que está pasando aquí? No encuentro los documentos de aws wrangler, ni los de boto3 y botocore muy útiles:

https://aws-data-wrangler.readthedocs.io/en/latest/tutorials/002%20-%20Sessions.html https://aws-data-wrangler.readthedocs.io/en/latest/tutorials/021% 20-% 20Global% 20Configurations.html # 21 --- Configuraciones globales https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html https://botocore.amazonaws.com /v1/documentation/api/latest/reference/config.html https://botocore.amazonaws.com/v1/documentation/api/latest/tutorial/index.html

Además, este tipo de preguntas se han hecho antes, y si se puede proporcionar intuición sobre cómo trabajar con clientes, recursos y sesiones de boto3 en diferentes contextos, se agradecería.