Skip to content

Commit 271e908

Browse files
Review comments
1 parent 62e4171 commit 271e908

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ public static void enforceFeatureEnabledOrThrow(
353353
public static final FeatureConfiguration<Boolean> ENABLE_KMS_SUPPORT_FOR_S3 =
354354
PolarisConfiguration.<Boolean>builder()
355355
.key("ENABLE_KMS_SUPPORT_FOR_S3")
356+
.catalogConfig("polaris.config.enable-kms-support-for-s3")
356357
.description("If true, enables KMS support for S3 storage integration")
357358
.defaultValue(false)
358359
.buildFeatureConfiguration();

polaris-core/src/main/java/org/apache/polaris/core/storage/aws/AwsCredentialsStorageIntegration.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.apache.polaris.core.storage.aws;
2020

21+
import static org.apache.polaris.core.config.FeatureConfiguration.ENABLE_KMS_SUPPORT_FOR_S3;
2122
import static org.apache.polaris.core.config.FeatureConfiguration.STORAGE_CREDENTIAL_DURATION_SECONDS;
2223

2324
import jakarta.annotation.Nonnull;
@@ -84,10 +85,11 @@ public AccessConfig getSubscopedCreds(
8485
.roleSessionName("PolarisAwsCredentialsStorageIntegration")
8586
.policy(
8687
policyString(
87-
storageConfig.getRoleARN(),
88+
storageConfig,
8889
allowListOperation,
8990
allowedReadLocations,
90-
allowedWriteLocations)
91+
allowedWriteLocations,
92+
callContext)
9193
.toJson())
9294
.durationSeconds(storageCredentialDurationSeconds);
9395
credentialsProvider.ifPresent(
@@ -148,7 +150,8 @@ private IamPolicy policyString(
148150
AwsStorageConfigurationInfo awsStorageConfigurationInfo,
149151
boolean allowList,
150152
Set<String> readLocations,
151-
Set<String> writeLocations) {
153+
Set<String> writeLocations,
154+
CallContext callContext) {
152155
IamPolicy.Builder policyBuilder = IamPolicy.builder();
153156
IamStatement.Builder allowGetObjectStatementBuilder =
154157
IamStatement.builder()
@@ -225,7 +228,7 @@ private IamPolicy policyString(
225228

226229
policyBuilder.addStatement(allowGetObjectStatementBuilder.build());
227230

228-
if (isKMSSupported()) {
231+
if (isKMSSupported(callContext)) {
229232
policyBuilder.addStatement(
230233
IamStatement.builder()
231234
.effect(IamEffect.ALLOW)
@@ -273,7 +276,10 @@ private String getArnPrefixFor(String roleArn) {
273276
return path;
274277
}
275278

276-
private boolean isKMSSupported() {
277-
return PolarisConfiguration.loadConfig(FeatureConfiguration.ENABLE_KMS_SUPPORT_FOR_S3);
279+
private boolean isKMSSupported(CallContext callContext) {
280+
return callContext
281+
.getPolarisCallContext()
282+
.getConfigurationStore()
283+
.getConfiguration(callContext.getRealmContext(), ENABLE_KMS_SUPPORT_FOR_S3);
278284
}
279285
}

polaris-core/src/test/java/org/apache/polaris/core/storage/BaseStorageIntegrationTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,37 @@
1919

2020
package org.apache.polaris.core.storage;
2121

22+
import jakarta.annotation.Nonnull;
23+
import jakarta.annotation.Nullable;
24+
import java.time.Clock;
2225
import org.apache.polaris.core.PolarisCallContext;
2326
import org.apache.polaris.core.PolarisDiagnostics;
27+
import org.apache.polaris.core.config.FeatureConfiguration;
28+
import org.apache.polaris.core.config.PolarisConfigurationStore;
2429
import org.apache.polaris.core.context.CallContext;
30+
import org.apache.polaris.core.context.RealmContext;
2531
import org.apache.polaris.core.persistence.BasePersistence;
2632
import org.mockito.Mockito;
2733

2834
public abstract class BaseStorageIntegrationTest {
2935
protected CallContext newCallContext() {
36+
PolarisConfigurationStore configStore =
37+
new PolarisConfigurationStore() {
38+
@Override
39+
public <T> @Nullable T getConfiguration(
40+
@Nonnull RealmContext realmContext, String configName) {
41+
if (FeatureConfiguration.ENABLE_KMS_SUPPORT_FOR_S3.key.equals(configName)) {
42+
return (T) Boolean.TRUE;
43+
}
44+
return PolarisConfigurationStore.super.getConfiguration(realmContext, configName);
45+
}
46+
};
47+
3048
return new PolarisCallContext(
31-
() -> "realm", Mockito.mock(BasePersistence.class), Mockito.mock(PolarisDiagnostics.class));
49+
() -> "realm",
50+
Mockito.mock(BasePersistence.class),
51+
Mockito.mock(PolarisDiagnostics.class),
52+
configStore,
53+
Clock.systemDefaultZone());
3254
}
3355
}

polaris-core/src/test/java/org/apache/polaris/service/storage/aws/AwsCredentialsStorageIntegrationTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,8 @@ public void testGetSubscopedCredsInlinePolicyWithoutList() {
533533
String warehouseKeyPrefix = "path/to/warehouse";
534534
String firstPath = warehouseKeyPrefix + "/namespace/table";
535535
String secondPath = warehouseKeyPrefix + "/oldnamespace/table";
536+
String region = "us-east-2";
537+
String accountId = "012345678901";
536538
Mockito.when(stsClient.assumeRole(Mockito.isA(AssumeRoleRequest.class)))
537539
.thenAnswer(
538540
invocation -> {
@@ -807,6 +809,8 @@ public void testGetSubscopedCredsInlinePolicyWithoutWrites() {
807809
String warehouseKeyPrefix = "path/to/warehouse";
808810
String firstPath = warehouseKeyPrefix + "/namespace/table";
809811
String secondPath = warehouseKeyPrefix + "/oldnamespace/table";
812+
String region = "us-east-2";
813+
String accountId = "012345678901";
810814
Mockito.when(stsClient.assumeRole(Mockito.isA(AssumeRoleRequest.class)))
811815
.thenAnswer(
812816
invocation -> {
@@ -1075,6 +1079,8 @@ public void testGetSubscopedCredsInlinePolicyWithEmptyReadAndWrite() {
10751079
String bucket = "bucket";
10761080
String warehouseKeyPrefix = "path/to/warehouse";
10771081
String region = "us-east-2";
1082+
String accountId = "012345678901";
1083+
String region = "us-east-2";
10781084
Mockito.when(stsClient.assumeRole(Mockito.isA(AssumeRoleRequest.class)))
10791085
.thenAnswer(
10801086
invocation -> {

0 commit comments

Comments
 (0)