Hey Avi,

I have reproduced and found a solution. The issue is not MFA, it is the BASIC 
credential provider is not using the token:
https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kinesis/src/main/java/org/apache/flink/streaming/connectors/kinesis/util/AWSUtil.java#L181

If you want to supply AK/SK/Token then you will have to use another 
CredentialProviderType, below is an example using SYS_PROP. We could improve 
the Kinesis connector to detect the session token and construct a 
BasicSessionCredentials:
https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/BasicSessionCredentials.java

Properties systemProperties = System.getProperties();
systemProperties.setProperty("aws.accessKeyId", accessKey);
systemProperties.setProperty("aws.secretKey", secretKey);
systemProperties.setProperty("aws.sessionToken", seesionToken);

Properties producerConfig = new Properties();
producerConfig.setProperty(AWSConfigConstants.AWS_REGION, REGION);
producerConfig.setProperty(AWSConfigConstants.AWS_CREDENTIALS_PROVIDER, 
"SYS_PROP");

I will add this to the Jira also. Let me know if you have any issues.

Thanks,
Danny

From: Avi Levi <a...@neosec.com>
Date: Wednesday, 16 December 2020 at 08:09
To: Robert Metzger <rmetz...@apache.org>
Cc: user <user@flink.apache.org>
Subject: RE: [EXTERNAL] Connecting to kinesis with mfa


CAUTION: This email originated from outside of the organization. Do not click 
links or open attachments unless you can confirm the sender and know the 
content is safe.


Thanks Robert, I actually tried all of the above but got to the same 
unfortunate result

On Wed, Dec 16, 2020 at 8:24 AM Robert Metzger 
<rmetz...@apache.org<mailto:rmetz...@apache.org>> wrote:
Hey Avi,

Maybe providing secret/access key + session token doesn't work, and you need to 
provide either one of them?
https://docs.aws.amazon.com/credref/latest/refdocs/setting-global-aws_session_token.html

I'll also ping some AWS contributors active in Flink to take a look at this.

Best,
Robert

On Tue, Dec 15, 2020 at 10:07 AM Avi Levi 
<a...@neosec.com<mailto:a...@neosec.com>> wrote:
Hi guys,
we are struggling to connect to kinesis when mfa is activated. I did configured 
everything according to the documentation but still getting exception :

val producerConfig = new Properties()

producerConfig.put(AWSConfigConstants.AWS_REGION, awsRegion)

producerConfig.put(AWSConfigConstants.AWS_ACCESS_KEY_ID, awsAccessKey)

producerConfig.put(AWSConfigConstants.AWS_SECRET_ACCESS_KEY, awsSecretAccessKey)

producerConfig.put(com.amazonaws.auth.profile.internal.ProfileKeyConstants.AWS_SESSION_TOKEN,
 awsSessionToken)

with a very simple pipeline :



val producer = new FlinkKinesisProducer(new SimpleStringSchema(), 
producerConfig)

producer.setFailOnError(true)

producer.setDefaultStream(outputStreamName)

producer.setDefaultPartition("0")

env.fromElements("a", "b", "c").addSink(producer)

env.execute()

the results with:

15:30:44,292 WARN 
org.apache.flink.kinesis.shaded.com.amazonaws.services.kinesis.producer.LogInputStreamReader
 - [2020-12-14 15:30:44.292188] [0x0000cb5f][0x000070000512c000] [warning] [AWS 
Log: WARN](AWSClient)If the signature check failed. This could be because of a 
time skew. Attempting to adjust the signer.

15:30:44,378 INFO 
org.apache.flink.kinesis.shaded.com.amazonaws.services.kinesis.producer.LogInputStreamReader
 - [2020-12-14 15:30:44.377865] [0x0000cb5b][0x00007000082c1000] [info] 
[shard_map.cc:87] Updating shard map for stream "ExampleOutputStream"

15:30:44,396 WARN 
org.apache.flink.kinesis.shaded.com.amazonaws.services.kinesis.producer.LogInputStreamReader
 - [2020-12-14 15:30:44.396208] [0x0000cb55][0x0000700002a3e000] [warning] [AWS 
Log: WARN](AWSErrorMarshaller)Encountered AWSError 
'UnrecognizedClientException': The security token included in the request is 
invalid.

15:30:44,396 ERROR 
org.apache.flink.kinesis.shaded.com.amazonaws.services.kinesis.producer.LogInputStreamReader
 - [2020-12-14 15:30:44.396256] [0x0000cb55][0x0000700002a3e000] [error] [AWS 
Log: ERROR](AWSClient)HTTP response code: 400

Exception name: UnrecognizedClientException

Error message: The security token included in the request is invalid.

6 response headers:

connection : close

I double check that all keys are correct using the same keys that work 
perfectly when I execute commands from the cli. also when removing the mfa from 
kinesis the pipeline works as expected. finally i did open a 
ticket<https://issues.apache.org/jira/browse/FLINK-20602> for that also .

Reply via email to