-
Notifications
You must be signed in to change notification settings - Fork 235
Implement basic support for rest.sigv4_enabled
for the Iceberg REST catalog
#917
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Implement basic support for rest.sigv4_enabled
for the Iceberg REST catalog
#917
Conversation
I found this PR while digging into how to query AWS' REST catalog implementation for S3 Tables. |
I think we might need to rework this to not depend on the aws crates for the signing part - that seems to have some conflicts I wasn't able to resolve with the MSRV check. Looking at how the object_store crate does it would be a good start: https://github.com/apache/arrow-rs-object-store/blob/main/src/aws/credential.rs |
Implements basic support for connecting to the AWS Glue Iceberg REST catalog by supporting the parameters
rest.sigv4-enabled
,rest.signing-name
andrest.signing-region
. See the corresponding parameters in the PyIceberg docs: https://py.iceberg.apache.org/configuration/#rest-catalogI've added a new feature to the
iceberg-catalog-rest
calledsigv4
which when enabled, will recognize the above configuration parameters. I've left this disabled by default.I added the crate
request_middleware
to allow running middleware on requests, and if therest.sigv4-enabled
configuration is enabled, the middleware to sign the request and add the correctAuthorization
header is enabled.I've tested this implementation in my project, and it works great for connecting to the AWS Glue REST catalog, i.e.
https://glue.<region>.amazonaws.com/iceberg
I based this logic on the equivalent logic in PyIceberg: https://github.com/apache/iceberg-python/blob/6fffb644518bb64e8f33883d850edbe18c12bd07/pyiceberg/catalog/rest.py#L475