guypayeur commented on issue #3742:
URL: https://github.com/apache/polaris/issues/3742#issuecomment-4553996752

   For anyone hitting this against MinIO (or any S3-compatible storage with 
limited STS), the working config combo is in Polaris's own integration test 
[`RestCatalogMinIOSpecialIT.java`](https://github.com/apache/polaris/blob/main/runtime/service/src/intTest/java/org/apache/polaris/service/it/RestCatalogMinIOSpecialIT.java)
 — but it isn't surfaced in the user-facing configuration reference, which made 
it take ~6 hours to find. Three pieces have to align:
   
   **1. Server-level Quarkus application properties** (NOT environment 
variables):
   
   ```properties
   polaris.storage.aws.access-key=<minio-root-user>
   polaris.storage.aws.secret-key=<minio-root-secret>
   polaris.features."SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION"=false
   ```
   
   Counter-intuitive: `SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION` **must be 
`false`**. Setting it to `true` bypasses the storage-config path entirely, 
which means `pathStyleAccess` + `endpoint` never reach the S3 client, and the 
SDK falls back to virtual-hosted-style URLs (`bucket.endpoint`) → 
`UnknownHostException`.
   
   **2. Catalog `storageConfigInfo`** with all three together:
   
   ```json
   "storageConfigInfo": {
     "storageType": "S3",
     "allowedLocations": ["s3://my-bucket/"],
     "endpoint": "http://minio:9000";,
     "region": "us-east-1",
     "stsUnavailable": true,
     "pathStyleAccess": true
   }
   ```
   
   **3. Catalog `properties` keys must be prefixed with `table-default.`**:
   
   ```json
   "properties": {
     "default-base-location": "s3://my-bucket/my-catalog",
     "table-default.s3.endpoint": "http://minio:9000";,
     "table-default.s3.access-key-id": "<minio-root-user>",
     "table-default.s3.secret-access-key": "<minio-root-secret>",
     "table-default.s3.path-style-access": "true",
     "table-default.s3.region": "us-east-1"
   }
   ```
   
   The `table-default.` prefix is what makes the IT test work — it uses 
`TABLE_DEFAULT_PREFIX + AWS_KEY_ID.getPropertyName()` to construct these keys. 
Without the prefix, the response to the original reporter's symptom is exactly 
`"Credential vending was requested for table ... but no credentials are 
available"`.
   
   With all three, `create_table` → `append` → `scan` works end-to-end against 
MinIO. Verified on Polaris 1.5.0 + PyIceberg 0.9 + MinIO `2025-04-22`.
   
   Would be helpful to surface this pattern in the production-configuration 
docs under "Configuring AWS S3 Cloud Storage" — happy to draft a PR if a 
maintainer can confirm the recommended docs location.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to