[英]AWS Java SDK v2 not using IRSA IAM Role in EKS
我有一个在 EKS 中运行的小型应用程序,它附加了一个具有 IAM 角色 (IRSA) 的服务帐户。 当应用程序尝试发送 SQS 消息时,它会失败并显示:
software.amazon.awssdk.services.sqs.model.SqsException: Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied. (Service: Sqs, Status Code: 403
我的代码是:
SqsClient sqsClient = SqsClient.builder()
.region(Region.US_EAST_1)
.build();
sqsClient.sendMessage(SendMessageRequest.builder()
.queueUrl(queueUrl)
.messageBody(message)
.build()
我已经检查了 IAM 权限,他们具有正确的访问权限,并且 OIDC 信任关系似乎很好。 如果我进入 pod,我可以运行aws sts get-caller-identity
并获得正确的角色
bash-4.4# aws sts get-caller-identity
{
"UserId": "ASDFSDFSDF:botocore-session-12345678",
"Account": "123456789",
"Arn": "arn:aws:sts::123456789:assumed-role/eksctl-role/botocore-session-12345678"
}
为什么 Java 不使用这个角色?
使用服务帐户的 IAM 角色 (IRSA) 时,java 库使用WebIdentityTokenFileCredentialsProvider
进行身份验证,并且它需要sts
模块才能工作。
使用此凭据提供程序需要“sts”模块位于类路径上。
在我的 gradle 文件中添加sts
依赖项解决了这个问题,现在它使用了正确的 IAM 角色
implementation platform('software.amazon.awssdk:bom:2.15.0')
implementation 'software.amazon.awssdk:sts'
implementation 'software.amazon.awssdk:sqs'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.