Skip to content

REST catalog: support AWS sigV4 #1236

Open

Description

@xxchan

Is your feature request related to a problem or challenge?

For AWS glue/s3 tables

rest.sigv4-enabled, rest.signing-name, rest.signing-region

apache/iceberg-python#1405

rest_catalog = load_catalog(
  catalog_name,
  **{
    "type": "rest",    
    "warehouse":"arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>",
    "uri": "https://s3tables.<Region>.amazonaws.com/iceberg",
    "rest.sigv4-enabled": "true",
    "rest.signing-name": "s3tables",
    "rest.signing-region": "<Region>"
  }
)                

Describe the solution you'd like

No response

Willingness to contribute

None

Activity

  1. xxchan commented on Apr 23, 2025

    @xxchan
    MemberAuthor

    Found a problem in reqsign:

    1. Reqsign got canonical request like: canonical request: GET /iceberg/v1/arn%3Aaws%3As3tables%3Aap-southeast-1..., but should have been sth like /iceberg/v1/arn%253Aaws%253As3tables%253Aap-southeast-1%..., where reqsign wrongly decoded %3.
    2. x-amz-content-sha256 seems to be required for this endpoint, which is not natively supported by reqsign.
  2. ananthaksr commented on Apr 23, 2025

    @ananthaksr

    @xxchan I'd like to work on this.

  3. xxchan commented on Apr 24, 2025

    @xxchan
    MemberAuthor

    @ananthaksr Hi, thanks for offering help, but I've already finished a working draft. #1241

  4. phillipleblanc commented on May 1, 2025

    @phillipleblanc
    Contributor

    I've also implemented this in #917

  5. gsoundar commented on May 7, 2025

    @gsoundar

    @xxchan How is your change coming along ?

  6. github-actions commented on Nov 6, 2025

    @github-actions
    Contributor

    This issue has been automatically marked as stale because it has been open for 180 days with no activity. It will be closed in next 14 days if no further activity occurs. To permanently prevent this issue from being considered stale, add the label 'not-stale', but commenting on the issue is preferred when possible.

  7. liurenjie1024 commented on Nov 6, 2025

    @liurenjie1024
    Contributor

    Missing feature.

  8. xxchan commented on Nov 6, 2025

    @xxchan
    MemberAuthor
  9. pschugt commented on Jan 14, 2026

    @pschugt

    Is there any update on this that AWS sigV4 support will be implemented in the near future? Or can i help somewhere to speed up things :)

    Br!

  10. added a commit that references this issue on Mar 23, 2026
    4400539
  11. ublubu commented on Jun 25, 2026

    @ublubu

    Hey, I had a look at the prior art catalogued in #2311, and I really like the Authenticator trait idea from #2088.

    Over at MaterializeInc/materialize, we've already been using iceberg-rust with AWS SigV4 for S3 Tables (and gcp_auth for Google's BigLake) using that technique.

    The main difference is that, while the trait lives in our iceberg-rust fork, the AWS/GCP-specific authenticators are implemented in our home repo, materialize.

    SigV4 Authenticator:

    GCP Authenticator (Bearer Token Authenticator wrapper + GCP Token Provider):


    Proposal for an authenticator trait to upstream into apache/iceberg-rust

    RequestAuthenticator/Authenticator

    Almost exactly the same as #2088. Most importantly, mut access to the entire request (needed for SigV4):

    /// Apply authentication to the outgoing request.
    async fn authenticate_request(&self, req: &mut Request) -> Result<()>;

    Helper types and traits: BearerTokenAuthenticator + trait TokenProvider

    OAuth2 and gcp_auth (and the static token config option) all provide bearer tokens the authenticator can put in a request header.
    A BearerTokenAuthenticator holds a impl TokenProvider so it can act as impl RequestAuthenticator.

    Similar to #2088's OAuth2Authenticator, but split into two parts.

    Draft diff to add just these new traits without breaking anything:

    Here's a full diff illustrating what I have in mind. I did my best to preserve the existing auth behavior and config APIs.

    main...MaterializeInc:iceberg-rust:to-upstream/requestauthenticator


    Next steps

    I'm actively working on Materialize's support for Iceberg. I'd like to get our iceberg-rust fork closer to upstream, so I'm happy to drive this if it needs a driver.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions