繁体   English   中英

AWS Java SDK v2 未在 EKS 中使用 IRSA IAM 角色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM