无法使用 AWS 和在 kubernetes pods 上启用 IRSA 创建签名 url

Unable to create a signed url using AWS and with IRSA enabled on kubernetes pods

我想创建一个签名 url,这样我就可以创建一个 MQTT 客户端。 为此,我需要一个秘密访问密钥、访问密钥 ID 和会话令牌。由于我的 pods 使用 IRSA,我希望使用我使用 aws sdk 检索的临时凭证来执行此操作。

我尝试了很多东西,这是最新的

import v4 from 'aws-signature-v4';


const role = await sts
    .assumeRole({
        RoleArn: 'arn:aws:iam::my-acc:role/my-role',
        RoleSessionName: 'some-random-session-name',
        DurationSeconds: 900,
    })
    .promise();        

const url = v4.createPresignedURL(
'GET',
awsConfig.iotDataEndpoint.toLowerCase(),
'/mqtt',
'iotdevicegateway',
'',
{
    key: role.Credentials.AccessKeyId,
    secret: role.Credentials.SecretAccessKey,
    sessionToken: role.Credentials.SessionToken,
    protocol: 'wss',
    expires: 900,
    region: awsConfig.region,
})

抛出

User: arn:aws:sts::my-acc:assumed-role/my-role/token-file-web-identity is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::my-acc:role/my-role

我确保 arn:aws:sts::my-acc:assumed-role/my-role 具有执行 sts:AssumeRole 的权限并且与该资源存在信任关系。

有什么想法吗?

事实证明,您为 IRSA 使用的角色也需要获得自行承担的权限。

arn:aws:iam::my-acc:role/my-role 添加 sts:AssumeRole 权限以修复 arn:aws:iam::my-acc:role/my-role