Skip to content

Commit f8e2ef6

Browse files
authored
Merge 40861ae into 7bb33eb
2 parents 7bb33eb + 40861ae commit f8e2ef6

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

src/main/java/com/warnermedia/kplserver/App.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public static void main(String[] args) throws Exception {
2525
ServerSocket errSocket = new ServerSocket(port);
2626
errSocket.setSoTimeout(100);
2727

28-
KinesisEventPublisher kinesisEventPublisher = new KinesisEventPublisher(stream, getRegion(), getMetricsLevel(), errSocket);
28+
KinesisEventPublisher kinesisEventPublisher = new KinesisEventPublisher(stream, getRegion(), getMetricsLevel(), getCrossAccountRole(), errSocket);
2929

3030
// graceful shutdowns
3131
Runtime.getRuntime().addShutdownHook(new Thread() {
@@ -88,4 +88,11 @@ static String getMetricsLevel() {
8888
return p;
8989
}
9090

91+
static String getCrossAccountRole() {
92+
String p = System.getenv("CROSS_ACCOUNT_ROLE");
93+
if (p == null || p.equals("")) {
94+
return "";
95+
}
96+
return p;
97+
}
9198
}

src/main/java/com/warnermedia/kplserver/KinesisEventPublisher.java

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
package com.warnermedia.kplserver;
22

3+
import com.amazonaws.auth.AWSCredentialsProvider;
4+
import com.amazonaws.auth.AWSStaticCredentialsProvider;
5+
import com.amazonaws.auth.BasicSessionCredentials;
6+
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
7+
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
38
import com.amazonaws.services.kinesis.producer.KinesisProducer;
49
import com.amazonaws.services.kinesis.producer.KinesisProducerConfiguration;
510
import com.amazonaws.services.kinesis.producer.UserRecord;
611
import com.amazonaws.services.kinesis.producer.UserRecordFailedException;
712
import com.amazonaws.services.kinesis.producer.UserRecordResult;
13+
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
14+
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceAsyncClientBuilder;
15+
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
16+
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
17+
import com.amazonaws.services.securitytoken.model.Credentials;
818
import com.google.common.util.concurrent.FutureCallback;
919
import com.google.common.util.concurrent.Futures;
1020
import com.google.common.util.concurrent.ListenableFuture;
@@ -36,14 +46,48 @@ public class KinesisEventPublisher {
3646
ServerSocket errSocket;
3747
Socket errClient;
3848

39-
public KinesisEventPublisher(String stream, String region, String metricsLevel, ServerSocket errSocket) {
49+
public KinesisEventPublisher(String stream, String region, String metricsLevel, String crossAccountRole, ServerSocket errSocket) {
4050
this.stream = stream;
4151
kinesis = new KinesisProducer(new KinesisProducerConfiguration()
4252
.setRegion(region)
43-
.setMetricsLevel(metricsLevel));
53+
.setMetricsLevel(metricsLevel)
54+
.setCredentialsProvider(loadCredentials(crossAccountRole)));
4455
this.errSocket = errSocket;
4556
}
4657

58+
private static AWSCredentialsProvider loadCredentials(String crossAccountRole) {
59+
final AWSCredentialsProvider credentialsProvider;
60+
61+
Boolean isCrossAccount = false;
62+
if (!crossAccountRole.equals("")) {
63+
isCrossAccount = true;
64+
}
65+
66+
if (isCrossAccount) {
67+
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceAsyncClientBuilder.standard()
68+
.withCredentials(new ProfileCredentialsProvider("nonprodjump"))
69+
.withRegion("us-east-1")
70+
.build();
71+
72+
AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest().withDurationSeconds(3600)
73+
.withRoleArn(crossAccountRole)
74+
.withRoleSessionName("Kinesis_Session");
75+
76+
AssumeRoleResult assumeRoleResult = stsClient.assumeRole(assumeRoleRequest);
77+
Credentials creds = assumeRoleResult.getCredentials();
78+
79+
credentialsProvider = new AWSStaticCredentialsProvider(
80+
new BasicSessionCredentials(creds.getAccessKeyId(),
81+
creds.getSecretAccessKey(),
82+
creds.getSessionToken())
83+
);
84+
} else {
85+
credentialsProvider = new DefaultAWSCredentialsProviderChain();
86+
}
87+
88+
return credentialsProvider;
89+
}
90+
4791
public void runOnce(String line) throws Exception {
4892
// add new line so that downstream systems have an easier time parsing
4993
String finalLine = line + "\n";

0 commit comments

Comments
 (0)