Skip to content

eventbridge-kafka-connector v1.3.1+ breaks authentication with kube2iam (InstanceProfileCredentialsProvider) #396

@sugarcrm-jgminder

Description

@sugarcrm-jgminder

Describe the bug

Commit 1bc23b83f65659ba2cac3c637974cddc04b63dc9 introduced a change in v1.3.1 to Leverage DefaultSupplier to automatically reload credentials on file refresh. This change causes authentication to fail when using kube2iam which in turn uses InstanceProfileCredentialsProvider.

To Reproduce

Steps to reproduce the behavior:

  1. Deploy kube2iam in a k8s cluster
  2. Deploy a KafkaConnect deployment with kube2iam annotations for a role:
iam.amazonaws.com/role: <role>
  1. Deploy an eventbridge-kafka-connector sink to the KafkaConnect cluster in Step 2.
  2. Watch authentication fail with the following message:
{
  "@timestamp": "2024-09-16T19:40:38.334Z",
  "source_host": "cxp-connect-eventbridge-connect-0",
  "file": "EventBridgeSinkTask.java",
  "method": "handleFailedEntries",
  "level": "WARN",
  "line_number": "145",
  "thread_name": "task-thread-eventbridge-sink-0",
  "@version": 1,
  "logger_name": "software.amazon.event.kafkaconnector.EventBridgeSinkTask",
  "message": "Retrying failed putItems call: attempts=1 maxRetries=2 errorMessage=software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(profilesAndSectionsMap=[])), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()]) : [SystemPropertyCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., EnvironmentVariableCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., WebIdentityTokenCredentialsProvider(): Either the environment variable AWS_WEB_IDENTITY_TOKEN_FILE or the javaproperty aws.webIdentityTokenFile must be set., ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(profilesAndSectionsMap=[])): Profile file contained no credentials for profile 'default': ProfileFile(profilesAndSectionsMap=[]), ContainerCredentialsProvider(): Cannot fetch credentials from container - neither AWS_CONTAINER_CREDENTIALS_FULL_URI or AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variables are set., InstanceProfileCredentialsProvider(): Failed to load credentials from IMDS.]",
  "class": "software.amazon.event.kafkaconnector.EventBridgeSinkTask",
  "mdc": {
    "connector.context": "[eventbridge-sink|task-0] "
  }
}

Expected behavior

The connector should be able to authenticate using the InstancProfileCredentialsProvider. Versions prior to v1.3.1 would have an authentication log like the following:

cxp-connect-eventbridge-connect-0 cxp-connect-eventbridge-connect {"@timestamp":"2024-09-18T18:12:32.669Z","source_host":"cxp-connect-eventbridge-connect-0","file":"EventBridgeWriter.java","method":"<init>","level":"INFO","line_number":"137","thread_name":"task-thread-eventbridge-sink-0","@version":1,"logger_name":"software.amazon.event.kafkaconnector.EventBridgeWriter","message":"[@9d66194-dirty] Resolving iam credentials","class":"software.amazon.event.kafkaconnector.EventBridgeWriter","mdc":{"connector.context":"[eventbridge-sink|task-0] "}}
cxp-connect-eventbridge-connect-0 cxp-connect-eventbridge-connect {"@timestamp":"2024-09-18T18:12:32.791Z","source_host":"cxp-connect-eventbridge-connect-0","file":"Logger.java","method":"debug","level":"DEBUG","line_number":"85","thread_name":"task-thread-eventbridge-sink-0","@version":1,"logger_name":"software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider","message":"Loaded credentials from IMDS with expiration time of 2024-09-18T18:42:32Z","class":"software.amazon.awssdk.utils.Logger","mdc":{"connector.context":"[eventbridge-sink|task-0] "}}

Environment:

Client Version: v1.29.6
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.30.3
Java 11

Additional context

I reverted commit 1bc23b83f65659ba2cac3c637974cddc04b63dc9 and redeployed the connector and the expected behavior was observed:

cxp-connect-eventbridge-connect-0 cxp-connect-eventbridge-connect {"@timestamp":"2024-09-18T18:12:32.669Z","source_host":"cxp-connect-eventbridge-connect-0","file":"EventBridgeWriter.java","method":"<init>","level":"INFO","line_number":"137","thread_name":"task-thread-eventbridge-sink-0","@version":1,"logger_name":"software.amazon.event.kafkaconnector.EventBridgeWriter","message":"[@9d66194-dirty] Resolving iam credentials","class":"software.amazon.event.kafkaconnector.EventBridgeWriter","mdc":{"connector.context":"[eventbridge-sink|task-0] "}}
cxp-connect-eventbridge-connect-0 cxp-connect-eventbridge-connect {"@timestamp":"2024-09-18T18:12:32.791Z","source_host":"cxp-connect-eventbridge-connect-0","file":"Logger.java","method":"debug","level":"DEBUG","line_number":"85","thread_name":"task-thread-eventbridge-sink-0","@version":1,"logger_name":"software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider","message":"Loaded credentials from IMDS with expiration time of 2024-09-18T18:42:32Z","class":"software.amazon.awssdk.utils.Logger","mdc":{"connector.context":"[eventbridge-sink|task-0] "}}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions