in aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/auth/credentials/ImdsCredentialsProvider.kt [50:78]
override suspend fun getCredentials(): Credentials {
if (AwsSdkSetting.AwsEc2MetadataDisabled.resolve(platformProvider) == true) {
throw CredentialsNotLoadedException("AWS EC2 metadata is explicitly disabled; credentials not loaded")
}
val profileName = try {
profile.get()
} catch (ex: Exception) {
throw CredentialsProviderException("failed to load instance profile", ex)
}
val payload = client.value.get("$CREDENTIALS_BASE_PATH/$profileName")
val deserializer = JsonDeserializer(payload.encodeToByteArray())
return when (val resp = deserializeJsonCredentials(deserializer)) {
is JsonCredentialsResponse.SessionCredentials -> Credentials(
resp.accessKeyId,
resp.secretAccessKey,
resp.sessionToken,
resp.expiration
)
is JsonCredentialsResponse.Error -> {
when (resp.code) {
CODE_ASSUME_ROLE_UNAUTHORIZED_ACCESS -> throw ProviderConfigurationException("Incorrect IMDS/IAM configuration: [${resp.code}] ${resp.message}. Hint: Does this role have a trust relationship with EC2?")
else -> throw CredentialsProviderException("Error retrieving credentials from IMDS: code=${resp.code}; ${resp.message}")
}
}
}
}