我有一个带有 OpenID Connect 提供商的 EKS 集群。我的目标是配置跨账户权限,以允许账户 A 中的集群上运行的 Pod 访问账户 B 中的 AWS 资源。为此,我创建了一个服务账户并将其附加到账户 A 中的相关 Pod。
我的问题是,在更改获得批准之前,我需要证明它有效。
AWS文档似乎建议我可以通过CLI测试
STS:AssumeRoleWithWebIdentity
的使用。然而,当它指定 web_identity_token_file
时,它实际上并没有告诉您如何生成该令牌。
Magic Google 让我想到了另一个 SO 问题,现在我已经为相关服务帐户创建了一个秘密,并且可以获得 JWT 令牌。但是,当我使用该令牌时,我看到一个错误 -
操作错误STS:AssumeRoleWithWebIdentity,https响应错误StatusCode:400,RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,InvalidIdentityToken:Issuer必须是有效的URL
上面的问题然后让我在另一个问题中找到这个答案,但是以这种方式生成令牌会导致另一个错误。
操作错误STS:AssumeRoleWithWebIdentity,https响应错误StatusCode:400,RequestID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,InvalidIdentityToken:令牌受众不正确
所以我的问题是,如何通过 CLI 测试具有 Web 身份的角色承担?有没有办法为我的 EKS 集群的 OIDC 提供商生成通用 JWT 令牌?
这里的答案是按照
这个答案中的建议使用
kubectl create token
,但除此之外还需要更改受众,因为默认受众无效。
kubectl create token <sa> -n <namespace> --audience sts.amazonaws.com
请注意,不需要服务帐户链接的 Secret。