5555import software .amazon .awssdk .services .glue .model .GetSchemaVersionResponse ;
5656import software .amazon .awssdk .services .glue .model .SchemaId ;
5757import software .amazon .awssdk .services .glue .model .SchemaVersionNumber ;
58+ import software .amazon .awssdk .services .sts .StsClient ;
59+ import software .amazon .awssdk .services .sts .auth .StsAssumeRoleCredentialsProvider ;
5860
5961public class GlueSerde implements Serde {
6062
@@ -88,6 +90,7 @@ public void configure(PropertyResolver serdeProperties,
8890 serdeProperties .getProperty ("region" , String .class )
8991 .orElseThrow (() -> new IllegalArgumentException ("region not provided for GlueSerde" )),
9092 serdeProperties .getProperty ("endpoint" , String .class ).orElse (null ),
93+ serdeProperties .getProperty ("roleArn" , String .class ).orElse (null ),
9194 serdeProperties .getProperty ("registry" , String .class )
9295 .orElseThrow (() -> new IllegalArgumentException ("registry not provided for GlueSerde" )),
9396 serdeProperties .getProperty ("keySchemaNameTemplate" , String .class )
@@ -114,6 +117,7 @@ public void configure(PropertyResolver serdeProperties,
114117 void configure (AwsCredentialsProvider credentialsProvider ,
115118 String region ,
116119 @ Nullable String endpoint ,
120+ @ Nullable String roleArn ,
117121 String registryName ,
118122 @ Nullable String keySchemaNameTemplate ,
119123 String valueSchemaNameTemplate ,
@@ -160,6 +164,19 @@ static AwsCredentialsProvider createCredentialsProvider(PropertyResolver serdePr
160164 .orElseGet (() -> () -> AwsBasicCredentials .create (awsAccessKey .get (), awsSecretKey .get ()));
161165 }
162166
167+ Optional <String > roleArn = serdeProperties .getProperty ("roleArn" , String .class );
168+ if (roleArn .isPresent ()) {
169+ return StsAssumeRoleCredentialsProvider .builder ()
170+ .refreshRequest (b -> b .roleArn (roleArn .get ())
171+ .roleSessionName ("kafbat-ui-" + UUID .randomUUID ()))
172+ .stsClient (StsClient .builder ()
173+ .credentialsProvider (DefaultCredentialsProvider .create ())
174+ .region (Region .of (serdeProperties .getProperty ("region" , String .class )
175+ .orElseThrow (() -> new IllegalArgumentException ("region required for assume role" ))))
176+ .build ())
177+ .build ();
178+ }
179+
163180 Optional <String > profileName = serdeProperties .getProperty ("awsProfileName" , String .class );
164181 Optional <String > profileFile = serdeProperties .getProperty ("awsProfileFile" , String .class );
165182 if (profileName .isPresent () || profileFile .isPresent ()) {
0 commit comments